« June 2011 | Main | August 2011 »

July 2011

30 July 2011

テスト技術が書かれた最初の書籍(3)

"Program Testing"としてテスト技術が書かれた書籍"Computer Programming Fundamentals"が1961年に出版されましたが、評判がよかったのか、1966年には第二版が出版されています。この書籍は1961年当時最新のIBM 7090電子計算機を例にして記述されています。その後、1970年にはIBM System/360ベースの記述に改訂された"COMPUTER PROGRAMMING FUNDAMENTALS: Based on the IBM System/360"が出版されています。
日本でも、以下のとおり第一版が1964年に、改訂版が1972年に翻訳出版されました。

ハーバート・D・リード, ジェラルド・M・ワインバーグ, 水野幸男(訳), 電子計算機ソフトウエアの基礎, 培風館, 1964

ハーバート・D・リーズ, ジェラルド・M・ワインバーグ, 藤井純/山門四十夫(訳), 電子計算機プログラミングの基礎, 産業図書, 1972

ほぼ5年間隔(1961、1966、1970)で書籍が改版・改訂されているので、これらの記述内容の変化から1960年代のテスト技術の進歩の様子が分かるかもしれないと思い、各版の"Program Testing"の章の構成と内容を比べてみました。

【第一版(1961年出版)】
1)次の節から構成されています。
    Preliminary Testing (予備テスト)
    An Assembly Output (アッセンブリの出力)
    The Test Cases (テスト)
    A Case of Errors (誤りの例)
    The Philosophy of Segmentation (セグメンテイションの思想)
    Aids to Testing (テストの補助)
    The Dumping Method (ダンプの方法)
    Conditional Debugging Macros (条件付きデバッギングマクロ)
    Tracing (トレーシング)
    Summary (要約)

【第二版(1966年出版)】
1)Tracingの後につぎの2つの節が追加されています。
    Program Testing in FORTRAN
    The FORTRAN Debugging System
  コンパイラ利用者の拡大に伴ってFORTRANで書かれたプログラムのテストの注意事項やデバッグ方法が新たに書かれています。
2)The Test Cases、 A Case of Errors などの節の記述は変わっていませんが、練習問題(problems)が追加されています。
  例えば、例題プログラムの流れ図のテストに関してつぎのような問題があげられています。
    ・プログラムの正規の流れをチェックするテストケースをつくれ
    ・プログラムが出会う少なくとも4つの例外的な状況をあげよ
    ・他にどんなテストを行えばよいか、それらのテストはどうして必要なのかを説明せよ

【改訂版(1970年出版)】
1)Conditional Debugging Macrosの節がつぎの節に置き換えられています。
    TESTRAN
  テストのために入力や中間結果を適当な形式にして出力する多くの変換ルーチンをもったマクロの集まりであるTESTRANの使い方が説明されています。当時の最新のテストツールだと思われます。

記述内容自体はほとんど変化がなかったので少しがっかりしましたが、1960年代前半から中盤のSystem/360の開発プロジェクトではいろいろなテストが実施されていた筈であり、当時IBMの教育部門(Systems Research Institute)にいたWeinbergも前述のような練習問題で教育するとともに現場からのフィードバックを得ていたのではないでしょうか。

<おまけ:テスト関係の用語の翻訳状況>
この書籍の"Program Testing"の章には"The Test Cases"という節があります。原文で"The"がついている理由は分かりませんが、現在の我々なら「テストケース」と訳すと思います。1964年の翻訳本では「テスト」、1972年の翻訳本では「テストの例」「テスト例」と訳されていました。当時、test caseという言葉は日本では全く馴染みがなかった筈なのでいたしかたないですね。

|

17 July 2011

テスト技術が書かれた最初の書籍(2)

先日の記事で紹介した書籍"Digital Computer Programming"(1957)ではテストに関する事項が"Program Checkout"と題した章で説明されていました。当時はcheckout、debugging、testingという用語が明確には区別されていませんでしたが、ずばり"Program Testing"としてテスト技術が書かれた最初の書籍は、1961年に出版されたIBM社のLeedsとWeinbergの"Computer Programming Fundamentals"のようです。
この書籍の10章が"Program Testing"で次の節から構成されています(節の翻訳名称は後述の翻訳版から)。各節の内容を簡単に紹介しておきます。

Preliminary Testing (予備テスト)
  テストの前に、まずflow diagram(流れ図)を確認すべきであるとして、チェック事項を示しています。現在のレビューに相当するフェーズです。

An Assembly Output (アッセンブリの出力)
  アッセンブリプログラムを使って計算機によるチェックを行う方法を示しています。

The Test Cases (テスト)
  テストの進め方として、プログラムの代表的な流れに沿って全体的なテストを行い、その後に各処理セクションをテストすることを勧めています。処理セクションのテストの原則として、1. Test the normal cases (正規の場合のテスト)、2. Test the extremes (極端な場合のテスト)、3. Test the exceptions (例外的な場合のテスト) を示しています。

A Case of Errors (誤りの例)
  テストの原則が守られなかったために発生したトラブルの例を示しています。

The Philosophy of Segmentation (セグメンテイションの思想)
  テストする際に対象プログラムを多くのセクションに分けて考えるべきであること、その際にはセクション間の相互関係を考えるべきことなどを示しています。

Aids to Testing (テストの補助)
  ダンプ(dump)と検屍(post-mortem、プログラムの実行が終わった後に行うダンプ)を説明しています。

The Dumping Method (ダンプの方法)
Conditional Debugging Macros (条件付きデバッギングマクロ)
Tracing (トレーシング)
  解説省略

Summary (要約)
  テストの基本原則はつぎの4項目に集約されるとしています。
    1. Write the program correctly in the first place
       (最初に正確にプログラムを書くこと)
    2. Think about check-out when coding
       (コーディングの際にチェックも考慮すること)
    3. Know the debugging tools which are available
       (利用できるデバッギング用の道具を知ること)
    4. Make the program prove that it works
       (プログラムがうまく働くことをプログラムによって証明すること)
  そして、この原則をもっと簡単に言うと
    Be a meticulous, thoughtful, well-informed skeptic
    (細心で、思慮深く、懐疑的であれ)
  ということができると締めくくっています。

この書籍で書かれているテストの原則は現在でも色褪せていないと思いませんか。Weinberg氏、さすがです。

<補足>
"Computer Programming Fundamentals"は1964年に以下の翻訳版が日本で出版されています。

ハーバート・D・リード, ジェラルド・M・ワインバーグ, 水野幸男(訳), 電子計算機ソフトウエアの基礎, 培風館, 1964

翻訳された水野幸男氏は後にNEC副社長を務められた方で、NECのSWQC(Software Quality Control)活動の推進責任者でもあった方です。

Computer_Programming_Fundamentals

|

14 July 2011

ソフトウェア・テストPRESS総集編

ソフトウェア・テストPRESSのバックナンバーVol.1~Vol.10の記事全てがPDFファイル(CD-ROM)で収録された「ソフトウェア・テストPRESS総集編」が発刊されました。

私がVol.8とVol.9で書いた「ソフトウェアテスト・ヒストリー」も収録されています。この記事には多数の参考文献やURLを掲載していたので、電子化によりインターネットで検索しやすくなりました。ただ、残念ながら雑誌形態のままPDF化されているのでURL情報が途中で改行され、クリックしてもうまく表示できないものがあります。また、2年前の執筆当時には有効であったリンクが現在は切れてしまっているものもあります。
右サイドバーのWeb Pagesの「ソフトウェアテストの歴史の参考文献」は、テストPRESSで掲載した参考文献の情報を最新化したものなので、こちらを活用していただければと思います。
また、ソフトウェアテスト・ヒストリー執筆以降に調査したこと、記述の誤りの訂正などはこのBlogで書いていこうと思います。

|

09 July 2011

テスト技術が書かれた最初の書籍(1)

1957年に出版されたGE社のD. D. McCrackenが書いた"Digital Computer Programming"はプログラミングの書籍としては最も初期のものです。この書籍の13章の"Program Checkout"でテストに関する事項が説明されており、これがテスト技術が書かれた最初のものだと思われます。ただ、この書籍ではtestという用語は使われていません。テストの考え方の歴史的変遷が書かれた論文"The Growth of Software Testing"(1988,Gelperin & Hetzel)によると、1950年代はcheckout、debugging、testingという用語の概念は明確に区別されていなかったとのことです。
Gelperin & Hetzelの論文では「デバッグとテストの分離」を意識し始めた時代の幕開けとして、前述の"Digital Computer Programming"に対するRand社のC. L. Bakerが書いた書評を位置付けています。Bakerは、この書評でprogram checkoutにはデバッグとテストという二つのフェーズがあると指摘し、McCrackenがデバッグとテストを区別して書いていないことを批判しています。Bakerはデバッグとテストを以下のように定義しています。

『デバッグはコーダ(coder)の目論見どおりにプログラムが動くことを確認するプロセス、テストは解決しようとした問題をプログラムが解決していることを確認するプロセスである』

このBakerの定義は、我々の現在の定義とは異なっています。例えばJSTQBでは、テストは「欠陥から発生する故障を見つけること」、デバッグは「ソフトウェアの故障の原因を見つけて、分析して、取り除くプロセス」となっています。Bakerの定義は、現在の定義に照らすとデバッグはVerification(検証)、テストはValidation(妥当性検証)の意味合いで使われているように思います。すなわち、この時期にV&Vの考え方の萌芽があったと言えると思います。
では、デバッグとテストが現在の定義に落ち着いたのはいつごろでしょうか? 1973年に出版された"Program Test Methods"(プログラム・テスト法)の中で、編著者のW. C. Hetzelは"A Definitional Framework"(定義的枠組)でテスト関連の用語の整理をしており、「歴史的には、デバッグとテストとはひとまとめにされてきたが、実際はまったく別のものである」として現在と同様のデバッグとテストの定義を示しています。このことから1970年代前半に現在の定義に落ち着いたと思われます。G. J. Myersの"Software Reliability"(1976)、"The Art of Software Testing"(1979)では現在と同様のデバッグとテストの定義になっています。

Digital_ Computer_Programming

|

« June 2011 | Main | August 2011 »