ビジネス

【連載】第2回:ソフトウェアテストそもそも話~ソフトウェアテストの黎明から揺籃の時代(後編)~

【連載】第2回:ソフトウェアテストそもそも話~ソフトウェアテストの黎明から揺籃の時代(後編)~

「HQW!」の読者の皆さん、こんにちは。辰巳敬三です。

この連載コラムでは、ソフトウェアのテスト技術や品質技術の歴史を紹介しています。

第2回の前編では、ソフトウェアテストの黎明期である1950年代にどのようなテストが行われていたのかを解説しました。後編では、ソフトウェアテストの揺籃期である1960年代の状況を取り上げます。

ソフトウェアテスト技法タイムライン(再掲)

前編と同様、まず、コンピューターやソフトウェア開発の歴史、そしてテスト技術の歴史をタイムライン(年表)で確認しましょう。

タイムラインの上部には、Capers Jonesが示したソフトウェア工学の歴史に基づく年代区分を記載しており、それぞれのタイトルが当時の状況を表しています[1]。年代区分の下には、各時代におけるエポックメイキングなハードウェア、ソフトウェア、稼働システムを示し、中段以下には、テスト技法が考案された時期を記載しました。このタイムラインを見ると、テスト技法が本格的に登場するのは、1970年代に入ってからであることが分かります。

揺籃期(1960年代)

"Program Testing"が書かれた最初の書籍(1960年代初め)

1950年代後半から1960年代には、SAGE(防空管制システム)やマーキュリー計画(有人宇宙飛行計画)などの軍や宇宙関係のシステム開発、コンピューターメーカーでの基本ソフトウェア開発などのプロジェクトが進められました。テスト技術に関してもいろいろなノウハウの蓄積が進んだはずです。

1961年に出版されたIBM社のHerbert D. LeedsとGerald M. Weinbergの『Computer Programming Fundamentals』[2]は、計算処理やプログラミングの基本的な概念や技法が書かれた書籍ですが、"Program Testing"という名称でテスト技術が書かれた最初の書籍でもあります。著者の二人は、出版当時IBMの社内研修機関であるIBM Systems Research Instituteに所属しており、この書籍も研修の内容が反映されています。ちなみに、Weinbergは1955年にIBMに入社、1958年にマーキュリー計画のプロジェクトで世界初の「独立テストチーム(separate software testing group)」を設立しています。

それでは、この書籍の第10章Program Testingで触れられている、1960年代初めのテストの研修内容を見てみましょう。まず、各論に入る前の解説文では、

プログラマーは、誤りがあるかどうかわからないのであるから、プログラムは誤りがないなどと思ってはならない。逆に極端な懐疑主義こそ正しい態度といえる。

と述べられ、テストの重要性、テストに対する心構え、プログラマーの姿勢とテストの取り組み方など、現在にも通用する普遍的な考え方が書かれています。その後に続く各節の概要は下表のとおりです(節の名称は翻訳版書籍から引用)。

概 要

予備テスト

(Preliminary Testing)

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

アッセンブリの出力

(An Assembly Output)

アッセンブリプログラムを使って計算機による機械的なチェック(記号の定義誤り、命令コードの間違いなど)を行う方法が示されています。

テスト

(The Test Cases)

プログラムの代表的な流れに沿って全体的なテストを行い、その後に各処理セクションをテストすることを勧めています。テストの基本原則として、1. 通常の場合のテスト、2. 極端な場合のテスト、3. 例外的な場合のテスト、が挙げられています。

誤りの例

(A Case of Errors)

テストの原則が守られなかったために発生した預金の金利計算用プログラムのトラブルの例と教訓が示されています。

セグメンテイションの思想

(The Philosophy of Segmentation)

テストする際に対象プログラムを多くのセクションに分けて考えること、その際にはセクション間の相互関係を考えること、コーディングの際には必ずテストのことを考慮しておくべきことなどが示されています。

テストの補助

(Aids to Testing)

ダンプと検屍(post-mortem、プログラムの実行が終わった後に行うダンプ)が説明されています。

ダンプの方法

(The Dumping Method)

ダンプを出力するCOREマクロ命令が説明されています。

条件付きデバッギングマクロ

(Conditional Debugging Macros)

特定の条件を満足したときにCOREマクロ命令を実行する方法が説明されています。

トレーシング

(Tracing)

TRAPマクロ命令を使ったトレース方法が説明されています。

テストの節では、同値分割や境界値分析、セグメンテイションの思想の節では、テスト容易性につながる考え方が示されています。そして、章の最後は次の要約で締めくくられています。

しかし結局テストの基本原則は、次の4項目に集約される。

 1. 最初に正確にプログラムを書くこと。

 2. コーディングの際にチェックも考慮すること。

 3. 利用できるデバッギング用の道具を知ること。

 4. プログラムがうまく働くことをプログラムによって証明すること。

この原則をもっと簡単に言えば、「細心で、思慮深く、懐疑的であれ」ということができよう。

書籍の出版から60年以上経ていますが、現在でもこの原則は色あせていません。Weinberg師匠、さすがです。

ビジネスへのコンピューター活用の本格化(1960年代中盤)

Jonesがソフトウェア工学の歴史区分で「ビジネスコンピューターとビジネスソフトウェアの台頭」[1]と表現した1960年代は、企業における業務へのコンピューターの活用が広がった時代です。実験室の道具であったコンピューターが業務の効率化の手段となるにつれ、データ処理における管理と手順の必要性が企業の経営陣に認識され始めました。

データ処理のコンサルタントであったDick H. Brandonが、1963年に出版した『Management Standards for Data Processing』[3]は、管理や作業方法の標準の開発方法を示した書籍です。当時、"Data Processing(データ処理)"という用語は、現在の「IT(情報処理)」と同様の感覚で使われており、この書籍も最新のデータ処理におけるマネジメント標準の開発ガイドという趣旨の内容となっています。

この書籍では、データ処理におけるシステム分析、プログラミング、運用の各フェーズにおける作業標準(methods standards)や、機器と要員の管理のためのパフォーマンス標準について述べられています。また、テストの作業標準(Testing standards)についても、プログラミングの一環として記載されています。

さらに、テストの作業標準は以下の8つのフェーズに分けられ、それぞれの推奨ルールが詳細な手順と共に示されています。

(1)机上チェック(Desk Checking)
(2)プログラム準備(Program Preparation)
(3)テストデータの準備(Test Data Preparation)
(4)テストデータのシーケンス化(Test Data Sequencing)
(5)プログラムテスト(Program Testing)
(6)製品およびシステムテスト(Production and Systems Testing)
(7)移行(Conversion)
(8)ドキュメントのテスト(Testing of Documentation)

この「プログラムテスト、製品テスト、システムテスト」というフェーズ分けを見る限り、1960年代前半には、現在の「テストレベル」に相当する考え方が確立していたと考えられます。

自由放任から規律あるテストへ(1960年代後半)

1964年に発表されたIBMのSystem/360のオペレーティングシステム、OS/360が予定より1年遅れの1966年にリリースされ、1967年には本格的なマルチタスクOSのMVTがリリースされました。

※HQW!編集部メンバーがミュンヘン博物館にて撮影したSystem/360
※HQW!編集部メンバーがミュンヘン博物館にて撮影したSystem/360

OS/360の開発プロジェクトの経験に基づいて書かれたのが、Frederick P. Brooksの『人月の神話』です[4]。このプロジェクトでは、当然ながら相当なテスト作業が行われ、テストプロセス、テスト技法、テストマネジメントに関するノウハウが蓄積されたはずです。

※HQW!編集部メンバーの蔵書を撮影
※HQW!編集部メンバーの蔵書を撮影

後に原因結果グラフを考案するIBM社のWilliam R. Elmendorfは、1953年に入社し、1963年にハードウェア部門からソフトウェア部門へ異動しました。そこでプログラミング言語やOS/360のアーキテクチャを担当した後、1965年からソフトウェアテストを担当するようになったそうです[5]。1969年に発表された論文[6]では、このプロジェクトにおいて、確立されたテストプロセスが実践されていたことがうかがえます。下図のように、左側にOS開発工程の四つのフェーズ、右側にテスト制御プロセスの五つのステップを示し、次のように述べています(筆者訳)。

オペレーティングシステムの機能テストは、圧倒的に不正確な芸術から、ますます正確な科学へと移行しつつある。それに伴い、テストを管理するプロセスも成熟しつつある。自由放任的(laissez-faire)なアプローチから、テスト計画の厳密な定義、テスト工数の体系的な管理、テストカバレッジの客観的な定量測定を特徴とする規律ある(disciplined)アプローチへの移行が進んでいる。

このテスト制御プロセスが開発フェーズと並行して進められるものであるとすれば、Wモデルの先駆けとも言えそうです。なお、Elmendorfは1970年夏にニューヨーク大学で開催されたコンピュータサイエンス・シンポジウムにおいて、『Disciplined Software Testing』(規律あるソフトウェアテスト)と題した講演も行っています[7]。

おわりに

1969年、Elmendorfは、IBM社内や学会で1962年から1968年の間に発表されたテストに関する論文の網羅的なリストを作成しました。しかし、確認できたのはわずか57件であり、その中にはテストを詳しく取り扱っていないものも含まれていました[5]。

一方、57件の中には、Brooksが『人月の神話』で「飛び切りうまい扱い方を考案している」と評した、1968年発表のFred Gruenbergerによる『Program Testing and Validating』[8]も含まれています。この論文は明確なテストケース設計技法を示したものではありませんが、二次方程式を解くプログラムの例題を基に、テストデータの選定に関する考え方を提示しており、当時すでにテスト技術の探求が進んでいたことが分かります。

以上、見てきたように、1960年代は、同値分割や境界値分析、テスト容易性、テストレベル、テストプロセス、そしてWモデルにつながる基本的な考え方が生まれた時代でした。まさに、テスト技術の「揺り籠」とも言える揺籃期だったのです。

そして、1970年代に入ると、1972年にテストを主題とした初のシンポジウム『The Computer Program Test Methods Symposium』が開催され、翌年には、その発表論文を基に、テストに関する初めての書籍『Program Test Methods』[9]が出版されました。このようなシンポジウムや論文を通じて、テスト技術の研究は加速し、各技法に名前が付けられることで、伝達可能なテストケース設計技法として確立されていったのではないでしょうか。


 

<参考文献>
[1] C. Jones, "The Technical and Social History of Software Engineering," Addison-Wesley, 2013
[2] H. Leeds and G. Weinberg, "Computer Programming Fundamentals," McGraw-Hill, 1961(水野幸男(訳),電子計算機ソフトウエアの基礎, 培風館, 1964)
[3] D. H. Brandon, "Management Standards for Data Processing," Van Nostrand, 1963
[4] フレデリック・P・ブルックス, Jr.,滝沢徹・牧野祐子・富澤昇(訳),人月の神話 原著発行20周年記念増刷版,ピアソン・エデュケーション,2002
[5] R. Bender, "William Elmendorf - In Memoriam," 2006
 http://benderrbt.com/William-Elmendorf-In%20Memoriam.pdf
[6] W. R. Elmendorf, "Controlling the functional testing of an operating system," IEEE Transactions on Systems Science and Cybernetics, pp. 284-290, 1969
[7] W. R. Elmendorf, "Disciplined Software Testing," In Debugging Techniques in Large Systems, R. Rustin, ed., Prentice-Hall, 1971, pp. 137-140
[8] F. Gruenberger, "Program testing and validating," Datamation, 14, pp. 39-47, 1968
[9] W. C. Hetzel(Ed), "Program Test Methods," Prentice-Hall, 1973(鳥居 宏次(訳),プログラム・テスト法,近代科学社,1974)

SNSシェア

この記事は面白かったですか?

今後の改善の参考にさせていただきます!

Search Articles By The Cast出演者/執筆者から記事を探す

Search Articless By The Categoryカテゴリから記事を探す

Ranking

ランキング

もっと見る