ソフトウェア開発工程と 開発モデルの紹介 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
© Copyright 2024 ExpyDoc