段階的詳細化法

プログラミングにおいて段階的詳細化法（だんかいてきしょうさいかほう、）とは、最初にシステム全体を定式化してしまい、その後で、ブラックボックスとなっている各部品の詳細を同様の手法で段階的に詰めてゆくトップダウン開発法（top-down development）を言う。

 概要 
シングルスレッド（single-thread）計算機においては、その計算の進行プロセスは一方向しかない。そのようなプロセスを生成するプログラムは、入力→内部操作→出力と、一つの入力に対して一つの出力を持つものとなり、コードとしても上から下へ読めるようなものとなる。

段階的詳細化法（stepwise refinement）とは、まず一番抽象的な一入力と一出力を持つ手続きを書き、次にまた同じく一入力と一出力を持つ手続きをもって、その一番抽象的な手続きの内部処理を詳細化したものを構成する、というプロセスを繰り返して複雑なプログラムを記述する手法である。プログラムの実装において抽象化の表現には関数が用いられる。

 原典 
原典であるヴィルトのProgram Development by Stepwise Refinementを読むと、実際には以上のような説明はなされていない。最初の、詳細化する以前の状態は「定式化」ではないし、部分の詳細化と全体設計の見直しを交互に繰り返しているので、「段階的に詰めてゆくトップダウン開発法」でもない。「シングルスレッド……一方向……入力→内部操作→出力……コードとしても上から下へ読める」というようなことも書いてなく（8クイーンパズルを題材にしているため、入力に相当するものは最初からプログラムにハードコーディングされるし、出力は探索ルーチンの一番深い部分に埋め込まれていて、最後に出力する、というような構造にはできない設計をしている）、よって「まず一番抽象的な一入力と一出力を持つ手続きを書き……」というようなこともヴィルトの原典には書かれていない。結局、この記事のこの節以前の部分は全て、実際には原典に書かれていたことではなく、書かれていると信じられてきたことである。

 プロジェクトマネジメント 
プロジェクトマネジメントで「段階的詳細化」と訳されているのは progressive elaboration （ :en:Progressive elaboration ）であり、基本的には別のものである。

 脚注 

 参考文献 




 関連項目 
 構造化プログラミング
 トップダウン設計とボトムアップ設計
 データ構造 - アルゴリズム

 関連人物 
 ニクラウス・ヴィルト
 エドガー・ダイクストラ

Category:ソフトウェア工学