要求定義・仕様記述・設計・検証の手引き × 3つの理論で統一する成果物定義
要求定義・仕様記述・設計・検証の手引き × 3つの理論で統一する成果物定義 Kuniwak さん(@orga_chem)が、要求定義・仕様記述・設計・検証を統一的に定義する資料を公開し、大きな反響を呼んでいます。 知人から辞書(悪い意味)との評価をうけた資料を公開しました。要求が何か、仕様が何か、設計が何か、検証が何かを明確に説明できない方向けの資料です。 https://x.com/orga_chem/status/2028973674876051777 126 いいね・22 RT・127 ブックマーク(10,847 表示)を集めたこのポストが指すのは、Speaker Deck で公開されたスライド資料です。「辞書(悪い意味)」と評されるほどの網羅性を持ちながら、Jackson(要求論)・Hoare(CSP)・Meyer(DbC)という3つの理論的基盤で全体を貫く一貫した構成が特徴です。 なぜこの資料が必要なのか ソフトウェア開発の現場では、「要求」「仕様」「設計」の区別が曖昧なまま開発が進むことが珍しくありません。 「この機能の仕様は?」と聞かれて、要求(何を解決したいか)を答えてしまう 「設計書を書いて」と言われて、仕様(何をするか)を書いてしまう テストケースが何を検証しているのか、要求なのか仕様なのか不明確 この曖昧さが、手戻り・認識ズレ・テスト漏れの根本原因になっています。Kuniwak さんの資料は、これら4つの成果物を数学的な基盤から明確に定義することで、チーム内の共通言語を確立しようとするものです。 基礎概念: イベント・状態機械・トレース・並行合成 資料の全体を貫く基礎概念は4つあり、下から順に積み上がるレイヤー構造になっています。 レイヤー3: 並行合成 複数の状態機械を組み合わせる操作 ↑ 状態機械を使う レイヤー2: トレース 状態機械の上を走る「実行パス」 ↑ 状態機械の上で定義される レイヤー1: 状態機械 状態とイベントと遷移の構造 ↑ イベントで構成される レイヤー0: イベント 最小単位(ボタン押下、時間経過など) レイヤー 概念 何を定義するか 比喩 0 イベント 「何が起きるか」の最小単位 将棋の「一手」 1 状態機械 イベントでどう状態が変わるかの構造 将棋の「盤面と駒の動きのルール」 2 トレース 状態機械の上を実際に通る経路 将棋の「棋譜」(実際に指した手の列) 3 並行合成 複数の状態機械を組み合わせる操作 複数の対局が連動するルール 上位の概念は下位の概念なしには定義できません。トレースは状態機械がなければ経路を辿れず、状態機械はイベントがなければ遷移が起きません。この順序で理解することが重要です。 レイヤー0: イベント 状態遷移の引き金となる最小単位です。UI 操作、時間経過、通信など、さまざまな形態があります。 ユーザーが「送信」ボタンを押す → イベント 3秒経過する → イベント サーバーからレスポンスが届く → イベント イベント単体では「何かが起きた」という事実だけです。これが意味を持つのは、次のレイヤーである状態機械の中に置かれたときです。 ...