ソフトウェア開発工程と 開発モデルの紹介

ソフトウェア開発工程と
開発モデルの紹介
2008.11.14
神戸大学 大学院理学研究科
地球惑星科学専攻 博士後期課程 D2
納多 哲史
今回の発表について
• ソフトウェア開発の考え方を紹介します
• 一般的なモデルのみの紹介で, 具体的な
手法には言及しません
– リクエストがあれば今後の計算機セミナーで
の紹介も考えます
問題提起
• 我々研究者はどのようにソフトウェア開発を
進めると効率良く研究を進められるだろう
か?
発表の最後にまた考えることにします.
目次
•
•
•
•
•
前提
行き当たりばったりなソフトウェア開発の例
開発工程
開発プロセスモデル
(おまけ) アジャイルソフトウェア開発
前提
これから話す内容は営利目的のソフトウェア開発を前提
とされているため, 営利目的のソフトウェア開発を前提を示しておく.
• ソフトウェア開発を「顧客の要望する機能
をソフトウェアとして実現する作業」と定義
– ソフトウェアを欲しい人と作る人は異なる
• 経費や期限が予め決まっている
– 予算やスケジュールの管理が必要
• ソフトウェア開発は複数の開発者によって
分担される
– 作業の並列化が必要
行き当たりばったりな
ソフトウェア開発の例
行き当たりばったりな
ソフトウェアの作り方
• とにかく早く作ってしまおうとする
–
–
–
–
–
顧客の要望は最初に一通り聞くだけ
仕様書, 設計書は書かない
いきなりプログラミングを始める
いきなりシステム全体を稼動させる
ろくにテストも行わず, 動けば即納品
顧客の要望をちゃんと聞かないと……
• 具体的に何を作ればよいのか分からない
• 顧客が欲しいソフトウェアとは異なったもの
ができる
– 一から作り直しの場合も
– (時には契約解除, 損害賠償請求も)
仕様書・設計書を書かず,
いきなりプログラミングを始めると……
• 工数・費用の把握が困難になり, 作業分担
やスケジュールの管理を行いにくい
• 各開発者の作ったプログラムがそのまま
結合できない (プログラム間で渡すデータ
の型が異なるなど)
• 機能の抜け漏れ, 重複が生じやすい
• 後からの機能追加・変更が多いとコードが
複雑化しやすく, 保守が困難になる
• 品質・信頼性を高められなくなる
いきなりシステム全体を
稼動させると……
• バグの特定が困難
• テストの組み合わせ数が膨大になる
結局, 行き当たりばったりな
ソフトウェア開発は……
• 顧客の思い通りの製品が出来ない
• 作業の手戻りが多発する
– 完成までに時間がかかる
– 進捗管理が困難
• 高い品質・信頼性を得られない
• 後からの保守が難しくなる
大規模なソフトウェアには通用しない!
ソフトウェア開発工程
ソフトウェア開発工程とは
• ソフトウェア開発を複数の段階(プロセス)
に分割, モデル化したもの
– 利点: 作業が複数に分割されることで費用, 開
発者数の見積もり・スケジュール管理が行い
やすくなる
– 注意: 開発現場で厳密に採用されているわけ
ではない. 複数の段階をサポートするような
ツールもある
ソフトウェア開発工程の全体像
上
流
要求定義
何をしたいか明文化
外部設計
内部設計
何を作るか明文化
プログラム設計
下
流
プログラミング
実際に作る
テスト
品質の確認
(納品)
(運用・保守)
プログラミング(コーディング)は開発の一部に過ぎない!
仕様書、設計書などの書類作成にも多くが費やされる
開発工程: 要求定義
顧客がどのような機能を持つソフトウェアを
要求しているか明らかにする.
顧客と開発者が話し合って決める.
• 要求定義に時間がかかるケース
– 顧客の要求が漠然としている(例: 「業務を効率化した
い」)
– 複数の部署が使うソフトウェアの場合, 部署ごとで要
求が異なる
– 開発者が顧客の業務や専門用語をよく知らないため,
コミュニケーションの齟齬が生じる
開発工程: 外部設計
• ユーザから見える部分の設計を行う. 顧客
と開発者の打ち合わせによって決める.
–
–
–
–
画面のレイアウト
操作手順
入出力データのフォーマット
既存システムとのデータの受け渡し方法
開発工程: 内部設計
• 外部設計の仕様書をもとに, ユーザから見
えない, システム内部の設計を行う. 開発
者が行う.
– システムをモジュール(プログラムの最小単
位)に分割する
– モジュールの処理内容の設計
– モジュール間で受け渡しするデータの内容の
設計
開発工程: プログラム設計
• 外部設計の仕様書をもとに, プログラムの
仕様を決める
– モジュール内のアルゴリズムの設計
開発工程: プログラミング
• プログラム設計書をもとにプログラムを書く.
コーディングとも呼ぶ.
開発工程: テスト
• プログラムが仕様通り動くか確認する. い
わゆるバグつぶしはこの段階.
– 単体テスト
• モジュール単体のテストをする
– 結合テスト
• 複数のモジュールをつなぎ合わせてテストする
– システムテスト
• 全モジュールをつなぎ合わせてテストする
– 運用テスト
• 顧客によって本番さながらのテストを行う
ソフトウェア開発工程の全体像
上
流
要求定義
何をしたいか明文化
外部設計
内部設計
何を作るか明文化
プログラム設計
下
流
プログラミング
実際に作る
テスト
品質の確認
(納品)
(運用・保守)
プログラミング(コーディング)は開発の一部に過ぎない!
仕様書、設計書などの書類作成にも多くが費やされる
開発プロセスモデル
開発プロセスモデルとは
• 開発工程を作業順に並べた一式
開発モデル:
ウォーターフォールモデル
上流から下流へ一方向に進める. 基本的に逆行はしない.
• 利点
– 進捗の管理がしやすい
– 大規模かつ信頼性の高いソフトウェアを作り
やすい
• 欠点
– 大量の書類 (仕様書) が必要になる
– 途中からの新しい要求に対応しにくい
– 顧客がソフトウェアの実物を見るのは工程の
一番最後のため, 顧客の予想と異なったもの
が出来ることがある
開発モデル: 成長モデル
顧客の要求の変更があるたびに, 要求定義~テストを繰り返す
• 利点
– 顧客の要求が曖昧な場合でも開発に着手で
きる
– 顧客の満足の行くソフトウェアを開発しやすい
– 新しい要求に柔軟に対応できる
• 欠点
– 最終的な開発期間, コストが予測しにくく, 進捗
管理が難しい
開発モデル: プロトタイピングモデル
要求定義の段階でプロトタイプ(試作品)を作り,
顧客の評価を要求定義に反映させる.
• 利点
– 具体的なソフトウェアがあるので顧客と開発者
の行き違いが生じにくい
– 要求定義が明確になるので, 上流工程への手
戻りが生じにくい
• 欠点
– 進捗管理が困難
– 顧客の要望を取り入れすぎ, まとまりのないシ
ステムができることがある
開発モデル: その他のモデル
• スパイラルモデル
– システムをサブシステムに分割し, サブシステムごとにウォーター
フォールモデルやプロトタイピングモデルを採用する.
• 契約モデル
– 各工程ごとに契約する. 官公庁に多い.
• 発展的プロトタイピングモデル
– 顧客が満足するまで試作品作成と評価を繰り返す
• 段階的配布モデル
– 顧客の評価をもとに, サブシステムごとに内部設計~テストを繰
り返す
• 発展的配布モデル
– 顧客の評価をもとに, システム全体で内部設計~テストを繰り返
す.
どのモデルが最良か?
• 万能なモデルはない. 状況に応じて使い分
けられている.
問題提起
• 我々研究者はどのようにソフトウェア開発を
進めると効率良く研究を進められるだろう
か? 既存のモデルは参考になるだろうか?
– 研究用のソフトウェア開発の特徴
• 開発者がユーザでもある
• ソフトウェアの出力が予測しづらい
– どうなるか知りたいからソフトウェアを作る
• 仕様変更がよくある
– 得られた知見によって新しい機能を加えたりする
まとめ
• 開発工程とは, 効率よいソフトウェア開発を目的
として, 開発を複数の作業内容に分割, モデル化
したものである
• プログラミングだけでなく設計, テストも重要
• 開発工程を作業順に並べた一式を開発プロセス
モデルと呼び,様々なモデルが提案されている
• 開発プロセスモデルに万能なものはなく, 状況に
応じて使い分けられている
(おまけ)
アジャイルソフトウェア開発
について
アジャイル
ソフトウェア
開発
という
考え方が
あるらしい
アジャイル
って何?
agile
= 俊敏な, 素早い
どういう
考え方?
Manifesto for Agile Software Development
(アジャイルソフトウェア開発宣言)
• Individuals and interactions over processes and tools
– プロセスやツールより, 人と人の対話を重視する
• Working software over comprehensive documentation
– 分厚いドキュメントより, ちゃんと動くソフトウェアを作ることに専念
する
• Customer collaboration over contract negotiation
– 契約交渉より, 顧客の協力を得ることに力を入れる
• Responding to change over following a plan
– 計画を厳守することより, 変化に対応することを優先する
原文は http://agilemanifesto.org/ から引用.
日本語訳は 「Rails によるアジャイル Web アプリケーション開発」から引用.
何をすれば
「アジャイル」
なのか?
調べきれず
orz
調査継続
もしくは
誰か教えて
終わり
参考文献
• ソフトウェア開発工程 – Wikipedia
• 西川猛史「図解雑学 ソフトウェア開発」ナツメ社
• Steve McConnell 「CODE COMPLETE」 日経 BP ソフトプ
レス
• 日高哲郎 「「基本情報」かららくらく受かるソフトウェア開
発技術者」 日本経済新聞社
• Manifesto for Agile Software Development
– http://agilemanifesto.org/
• Dave Thomas ほか 「Rails によるアジャイル Web アプリ
ケーション開発」 オーム社
• アジャイルソフトウェア開発 - Wikipedia