Comments
Description
Transcript
ソフトウェア 学
ソフトウェア⼯学 ( (part 1)) 情報メディアシステム分野 情報メデ アシステム分野 手塚太郎 この資料は以下の場所にあります。 http://xi.kc.tsukuba.ac.jp/lec/SE1.pdf ソフトウェア(Software) z データ処理システムを機能させるための,プログラム,⼿順, 規制,関連⽂書などを含む知的な創作 規制 関連⽂書などを含む知的な創作 プログラム 要求定義書,外部設計書,内部設計書,データベース定義 要求定義書 外部設計書 内部設計書 デ タベ ス定義 書,コーディング規約,取扱説明書,運⽤マニュアル プログラム,プログラムを作成する過程で得られるシステ プログラム プログラムを作成する過程で得られるシステ ム設計書,フローチャートをはじめとする設計書,および, プログラム説明書などの関連資料 z cf. ハードウェア(hardware) コンピュータ装置 コンピュ タ装置 応⽤ソフトウェア システム ソフトウェア ミドルウェア 基本ソフトウェア ワードプロセッサ,メーラーなど GUI,データベース管理ソフトウェアなど OS, コンパイラなど 1 ソフトウェアとハードウェアの違い z ソフトウェア 経年劣化なし 導⼊後に修正可能 製品の量産コスト,配布・流通コストは低い 製品の量産コスト 配布・流通コストは低い 機能拡張,性能改善,環境適合に関する要求 機能拡張,性能改善,環境適合 関 る要求 ソフトウェア進化が前提 z ハードウェア 経年変化あり (磨耗,部品の寿命) 導⼊後の修正はほぼ不可能 製品の量産および配布コストあり 機能や性能を維持することに対する要求 2 ソフトウェア開発(Software Development) z 顧客の要求をソフトウェア製品に変換する作業 良いソフトウェアを効率的に構築 品質(良さ)とコスト(時間/お⾦)のバランスが重要 要求 ソフトウェア開発 プログラム 顧客 ソフトウェア 開発者 コンピュ タ装置 コンピュータ装置 (ハードウェア) 3 ソフトウェア開発技術の歴史 1960 機能の時代: 既存業務の情報システム化 1970 スケジュールの時代: スケジ ルの時代 開発計画やライフサイクルの登場 1980 コストの時代: 開発における⽣産性が重要視 1990 2000 現在 品質の時代: 社会の依存度が増⼤ 使い勝⼿の良さに対する要求 複雑さへの挑戦 IBM OS/360 (1964): 500万⾏(推測) ⾦融システム(1980半ば): 500万⾏ DVDレコーダ(2000): 20万⾏ ⾦融システム: 6400万⾏ DVDレコーダ(2000): 100万⾏ ⾃動⾞: 500〜1000万⾏ 携帯電話: 500万⾏ ⾃動⾞(2000): 100万⾏ 携帯電話(2001): 100万⾏ WindowsXP(2002): 4000〜7000万⾏(推測) 4 ソフトウェア⼯学(Software Engineering) z コンピュータソフトウェアを対象として,その構築,運⽤, 保守における⽣産性と品質の向上を実現するための技術体系 や学問体系 ⽅法論(methodology) ( gy) 技法(technique) / 道具(tool) プロジェクト管理(project management) z ソフトウェア危機(software crisis)を打開するためのソフト ウェア開発の技術体系および学問体系 z ソフトウェア⼯学の⽬的 学 的 良いソフトウェアを開発すること – ソフトウェアの品質特性 ソフトウ アの品質特性 (国際規格 ISO 9126) z ソフトウェア⼯学の実践 ソフトウェアを開発するための理論,原理,技術に基づく ソフトウ アを開発するための理論 原理 技術に基づく ⽅法論や,表記法,ツールを活⽤して,ソフトウェアを構 築,運⽤,保守する活動 ⼤規模・⾼信頼ソフトウェアの開発 ≠ プログラミング 5 ソフトウェア危機 z 技術者不⾜,納期遅れ,品質低下,開発費増⼤ NATO会議(1968年)で指摘 ⽣産物の側⾯ ハードウェアの⼤型化に伴うソフトウェアの規模の拡⼤ コンピュータの普及に伴う開発ソフトウェアの数の増⼤ ⼈の側⾯ ステークホルダー(stakeholder)の多様化 – ソフトウェア開発とのその成果物に対する利害関係者 時間の側⾯ 開発時間および利⽤時間の増⼤ 動作環境や社会的要求が変動 役割の側⾯ コンピュータで扱う分野の拡⼤ 社会的に重要なコンピュータシステムに対する信頼性の向上 ソフトウェアの⼤衆化に伴う使い勝⼿の向上 z z z z 6 ソフトウェアの開発⼯程 ソフトウェア開発⼯程とは z ソフトウェアの開発をどのように進めるかを規定したもの 開発における作業: 開発プロセス(process) 各作業において,プロダクト(product)を⽣成 – ⽂書,図表,プログラム,マニュアルなど ⽂書 図表 プログラム マニュアルなど z ソフトウェアプロセスモデル(process model),ライフサイ クル(life cycle)ともいう クル( y )とも う 要求分析 (requirements analysis) 基本設計 (basic design) 運⽤・保守 (maintenance) 詳細設計 (detail design) テスト (testing) 実装 (implementation) 8 ソフトウェア開発プロセス 要求仕様書 要求記述 求 述 顧客 顧 基本 設計 要求 仕様化 要求 獲得 要求分析 3 3 3 3 3 3 3 3 3 設計 3 3 3 運⽤・保守 納⼊ テスト 報告書 基本設計 仕様書 テスト a = 0; … while ( ) { if ( ) … else … } … ソース プログラム 詳細 設計 実装 詳細設計 仕様書 9 ソフトウェア開発プロセス(要求分析) z 要求獲得 利⽤者(ユーザ) 利⽤者(ユ ザ) が要求するシステムを整理し,⾃然⾔語 が要求するシステムを整理し ⾃然⾔語 で⽂書化 – 要求記述を作成 z 要求定義 どのようなシステムを作成するのかを決定 システム要求書を分析し,開発するシステムを形式的に⽂ , 書化 – 要求仕様書(requirements specification) 分析者(analyst)が実施 10 ソフトウェア開発プロセス(設計) z 基本設計 システム設計(system design) design),外部設計(external 外部設計(external design)ともいう 外部から⾒たシステム全体をどのように作成するのかを決定 ソフトウェアアーキテクチャやユーザインタフェースを決定 – 基本設計仕様書 設計者(designer)が実施 z 詳細設計 プログラム設計(program design),内部設計(internal design)ともいう 個々のモジュールのアルゴリズムやデータ構造を決定 – 詳細設計仕様書 詳細 計仕様書 プログラマ(programmer)が実施 11 ソフトウェア開発プロセス(実装,テスト) z 実装 コーディング(coding)ともいう コ ディング(coding)ともいう プログラム設計仕様をプログラムに変換 具体的なプログラミング⾔語(program language)による 記述 – ソ ソースプログラム(source スプ グラム( p program) g ) プログラマが実施 z テスト 仕様書どおりにプログラムが動作するかどうかを検査 – テスト報告書(test report) 試験者(tester)が実施 – ソフトウェア作成と独⽴の組織を⽤意 デバック(debug) – エラー(error)の修正は設計者やプログラマが実施) 12 ソフトウェア開発プロセス(運⽤・保守) z 運⽤・保守 納⼊後のソフトウェアを維持・管理 納⼊後のソフトウェアを維持 管理 運⽤段階で検出された故障(残存エラー)の修正 変更要求への対応 – 新機能の追加 – 既存機能の変更 – 新しい環境への適合 保守者(customer engineer)が実施 13 ウォーターフォールモデル z トップダウンな開発プロセス: 滝(waterfall) 引継ぎに関するレビュー 要求分析 各段階での正しさに 関するレビュー 基本設計 詳細設計 実装 困難 ⼿戻りを想定 していない テスト 保守 利点: ⼯数⾒積もりや進捗管理が容易 ⽋点: 仕様変更に弱い,誤り発⾒の遅れ,修正コストの増⼤ 14 V字モデル z ウォーターフォールモデルはV字モデルとして捉え直せる。 要求分析 統 統合テスト 基本設計 結合テスト 詳細設計 単体テスト 実装 15 ソフトウェア開発モデルの推移 z 1960年代: 流れ図(flowchart)を利⽤ ウォーターフォールモデル 要求分析 開発⽅法論なし 基本設計 z 1970年代: 構造的なソフトウェア開発 詳細設計 ウォータフォールモデル 実装 z 1980年代: ソフトウェアライフサイクル有害説 テスト 新しいソフトウェア開発モデルの必要性 z 進化型(成⻑型,発展型)プロセスモデルの登場 1) 開発の初期段階から実⾏可能なプログラムを部分的に作成 2) プログラムを実際に動作させて機能を確認 3)) プ プログラムの改善 グラムの改善 4) (2)と(3)を繰り返し 使い捨て型プロトタイピング(throwaway ( yp prototyping) yp g) スパイラルモデル(spiral model) 進化型プロトタイピング(evolutionary prototyping) アジャイルプロセスモデル(agile process model) 保守 16 新しいソフトウェア開発モデル 1) ソフトウェアプロトタイピング(software prototyping) 9 システム設計時に試作品(プロトタイプ; prototype)を構築 2) 操作的アプローチ(operational 操作的アプロ チ(operational approach) 9 実行可能な仕様(executable specification)の作成 ソース プログラム 要求分析 プロトタイプ作成 要求仕様 基本設計 詳細設計 プロトタイプ評価 実装 テスト 保守 17 新しいソフトウェア開発モデル(cont’d.) 3) オブジェクト指向ソフトウェア開発(object-oriented software development) 9 オブジェクトを単位としてソフトウェアを構築 オブジェクト: 実世界の「もの」や「役割」などを抽象化したもの 9 スパイラルモデル(spiral model) インクリメンタル(incremental) + イテラティブ(iterative) 4) アジャイルソフトウェア開発(Agile software development) 例) XP(extreme programming) アジャイルアライアンス宣言(manifesto) プロセスやツールよりも,個人や人同士の交流を重視 プ 9 包括的なドキュメントよりも,動作するソフトウェアを重視 9 契約上の交渉よりも,顧客との協調を重視 契約上の交渉よりも 顧客との協調を重視 9 計画に従うことよりも,変化に対応することを重視 9 注) 左側の項目を軽視するという意味ではない 目標の 決定 計画 リスク分析 プロトタイプ 開発 テスト Boehm (1988) 18 使い捨てプロトタイピング z システム設計時にプロトタイプ(試供品: prototype)を構築 問題点の早期発⾒と要求のあいまいさの解消 – プロトタイプに基づき要求仕様書を作成 ⼤幅な⼿戻りを減少 プロトタイプ作成 要求分析 要求仕様書 基本設計 プロトタイプ評価 詳細設計 実装 テスト 保守 19 スパイラルモデル z プロトタイプを作成し,利⽤者からのフィードバックに対応 しながら,徐々にシステムを作成 しながら 徐々にシステムを作成 リスク(開発の失敗)を分析することで,リスクを軽減 リスク分析 プロトタイピング ⽬標の決定 要求分析 設計 実装 次のフェーズ ズ の計画 テスト ウォーターフォール モデルへの適⽤例 プロダクトの開発 プ ダ 評価 20 進化型プロトタイピング z プロトタイプを徐々に修正し,そのまま完成品として利⽤ 機能が明確な部分から構築 反復型開発モデル – イテラティブ(iterative) – インクリメンタル(incremental) インクリメンタル 実装 テスト 実装・テスト イテラティブ 設計 要求分析 21 アジャイルプロセスモデル z 変化に迅速に対応 軽量(lightweight)プロセス 軽量(li ht i ht)プロセス XP(extreme programming), Scrumなど z 開発対象を多数の⼩さな機能に分割して,各機能を短期間で開発 開発対象を多数 ⼩さな機能 分割 各機能を短期間 開発 1つの反復(iteration)で1機能を実現 実⾏可能なソフトウェアを随時提供 究極の反復型開発(進化型プロトタイピング) – 変更コスト 従来 変更コスト アジャイル 時間 時間 分析 設計 実装 テスト 分析 設計 実装 テスト 22 XP(エクストリームプログラミング) z アジャイル開発の代表例のひとつ z 開発時における具体的なプラクティス(⾏動指針)の集まり 当初のXPにおける12のプラクティス(前半) 計画ゲーム The planning game 次回リリースの範囲を早急に決める 小規模リリース Small releases リリースサイクルを短めに 比喩 Metaphor システムの動きを表すメタファー(比喩)を導入 シンプルデザイン Simple design 余分な複雑さを減らす テスティング Testing プログラマが継続的にテストを書く リファクタリング Refactoring g コードの見直しを積極的に行う 23 XP(エクストリームプログラミング) 当初のXPにおける12のプラクティス(後半) ペアプログラミング Pair p programming g g 2人のプログラマが組になってコードを書く 共同所有権 Collective ownership すべてのプログラマがすべてのコードにアクセス可能 継続的インテグレーション Continuous integration 常にテストを実行し、動作する状態におく 週40時間 40 hour week 働き過ぎは良い結果を生まない。 顧客 オンサイト顧客 On site customer ユ ザをチ ムに加える ユーザをチームに加える コーディング標準 C di standards Coding t d d 全プログラマがコーディング標準に従う 全プ グラ が ディング標準に従う z 現在では19のプラクティスまで増えている。 24 ソフトウェアライフサイクルプロセス SLCP(ソフトウェアライフサイクルプロセス) z ソフトウェア開発とその周辺の業務⼿順におけ る作業項⽬を定義し 標準化したも る作業項⽬を定義し、標準化したもの。 z 他社に開発依頼する場合、作業⼿順に関する⽤ 語や定義が異なると、トラブルが⽣じうるため、 語や定義が異なると トラブルが⽣じうるため 統⼀が必要。 z 「ソフトウェア開発モデル」と異なり、開発の 「ソフトウェア開発モデル」と異なり 開発の 周辺業務も含まれている。 z プロジェクト管理において、管理の対象となる。 26 SLCPの要素 プ プロセス群 プ プロセス 主ライフサイクルプ 主ライフサイクルプロ セス 取得、供給、契約の変更管理、企画、 要件定義、開発、運用、保守 支援ライフサイクルプ プ ロセス 文書化、構成管理、品質保証、検証、 文書化 構成管理 品質保証 検証 妥当性確認、共同レビュー、監査、問 題解決、ユ ザビリティ(使用性向上) 題解決、ユーザビリティ(使用性向上) 管理、環境整備、改善、人的資源、資 組織に関するライフサ 産管理 再利用プログラム ドメイン技 産管理、再利用プログラム、ドメイン技 イクルプロセス 術 システム監査プロセス 27 開発プロセス 1. プロセス開始の準備 2. システム要件定義 シ ム要件定義 3. システム⽅式設計 4. ソフトウェア要件定義 5. ソフトウェア⽅針設計 6. ソフトウェア詳細設計 7 ソフトウェアコード作成およびテスト 7. ソフトウェアコ ド作成およびテスト 8. ソフトウェア結合 9. ソフトウェア的確性確認テスト 10. システム結合 11. システム適合性確認テスト 12 ソフトウェア導⼊ 12. 13. ソフトウェア受け⼊れ⽀援 28 運⽤プロセス 1. プロセス開始の準備 2. 運⽤テスト 3 業務およびシステムの移⾏ 3. 4. システム運⽤ 5. 利⽤者教育 6 業務運⽤と利⽤者⽀援 6. 7. システム運⽤の評価 8. 業務運⽤の評価 9 投資効果および業務効果の評価 9. 29 保守プロセス 1. プロセス開始の準備 2. 問題把握および修正分析 3 修正の実施 3. 4. 保守レビューおよび受け⼊れ 5. 移⾏ 6 ソフトウェア廃棄 6. 30