A design methodology for reliable software systems (1972)
October 8, 2023スタンフォードで数学の博士号を取得したLiskovは以前勤めていたMitre Corporationに戻った後、最初にVenusとよばれるタイムシェアリングシステムの開発プロジェクトを担当し、その次にソフトウェア危機に対処する開発手法の研究に取り組んだ。 A design methodology for reliable software systemsは、Venusの開発から得られた構造化プログラミングの方法論である。
表題のとおり、目的はソフトウェアの信頼性を高める方法論であり、そのためにテストのカバレッジを上げることがよいとみなさている。 効率的にカバレッジを上げるには、必要十分なテストケースを特定し、その量が十分に開発可能でなければならない。 構造化プログラミングは、プログラムをモジュールに分割することで、テストケースの特定とテストケースの量の削減の両方に寄与する。
構造化プログラミングは1968年から1969年にかけてDijkstraによって提案されており、論文の発表当時からすれば新しいプログラミングパラダイムであるが、標準的な定義はない。 そこで、Liskovは、制御構文とモジュールの依存関係についての2つのルールで構造化プログラミングを定義した。 制御構文のルールは、gotoの利用を禁じ、使用可能な制御を、文の逐次的な実行、条件分岐、反復のみに限定する。 依存関係のルールは、上位のモジュールから下位のモジュールの順に開発し、上位モジュールは下位モジュールの名前を参照することである。
依存関係のルールにあるモジュールの上下関係は、Dijsktraの抽象度を意味する。 より機械を意識してI/Oデバイスやデータを扱うモジュールほど下位に位置する。 モジュールは、自分の抽象度の異なる方法でリソースにアクセスしてはならず、下位モジュールは上位モジュールに依存してはならない。
必要なテストケースを簡単に見つけるには、モジュール間の依存関係が分かりすいほうが望ましい。 モジュール間でデータを受け渡す場合、モジュールが外部に公開している関数に明示的に引数としてデータを渡さなければならない。