実践ソフトウェアエンジニアリング(第9版)
オーム社
著者:Roger S.Pressman、Bruce R.Maxim
訳者:SEPA翻訳プロジェクト
著者について
まえがき
訳者まえがき
第1章 ソフトウェアとソフトウェアエンジニアリング
1.1 ソフトウェアの本質
1.1.1 ソフトウェアの定義
1.1.2 ソフトウェアアプリケーションのドメイン
1.1.3 レガシーソフトウェア
1.2 ソフトウェアエンジニアリングと規律
1.3 ソフトウェアプロセス
1.3.1 プロセスフレームワークとフレームワークアクティビティ
1.3.2 包括的なアクティビティ
1.3.3 プロセス適合
1.4 ソフトウェアエンジニアリングプラクティス
1.4.1 プラクティスの本質
1.4.2 一般原則
1.5 どのようにはじまるか
1.6 まとめ
Special Training
第1部 ソフトウェアプロセス
第2章 プロセスモデル
2.1 プロセスの構造とプロセスフロー
2.2 フレームワークアクティビティとソフトウェアエンジニアリングアクション
2.3 タスクセットの特定
2.4 プロセス評価と改善
2.5 規範的なプロセスモデル
2.5.1 ウォーターフォールモデル
2.5.2 プロトタイピング
2.5.3 進化型プロセスモデル
2.5.4 統一プロセス
2.6 プロダクトとプロセス
2.7 まとめ
Special Training
第3章 アジャイルとプロセス
3.1 アジャイルとは何か
3.2 アジャイルと変更コスト
3.3 アジャイルプロセスとは何か
3.3.1 アジャイルの原則
3.3.2 アジャイル開発のポリシー
3.4 スクラム
3.4.1 スクラムチームと作成物
3.4.2 スプリントプランニング
3.4.3 デイリースクラム
3.4.4 スプリントレビュー
3.4.5 スプリントレトロプラクティス
3.5 その他のアジャイルフレームワーク
3.5.1 XP
3.5.2 カンバン
3.5.3 DevOps
3.6 まとめ
Special Training
第4章 推奨のプロセスモデル
4.1 要求エンジニアリング
4.2 初期アーキテクチャ設計
4.3 リソースの見積り
4.4 1st プロトタイプ構築
4.5 プロトタイプ評価
4.6 継続可否の判断
4.7 プロトタイプ洗練
4.7.1 新プロトタイプのスコープ
4.7.2 新プロトタイプの構築
4.7.3 新プロトタイプのテスト
4.8 プロトタイプのリリース
4.9 リリースしたソフトウェアのメンテナンス
4.1 まとめ
Special Training
第5章 ソフトウェアエンジニアリングの人間的側面
5.1 ソフトウェアエンジニアの特徴
5.2 ソフトウェアエンジニアリングの心理学
5.3 ソフトウェアチーム
5.4 チーム体制
5.5 ソーシャルメディアによる影響
5.6 グローバルチーム
5.7 まとめ
Special Training
第2部 モデリング
第6章 プラクティスの指針となる原則
6.1 コア原則
6.1.1 プロセスの指針となる原則
6.1.2 プラクティスの指針となる原則
6.2 フレームワークアクティビティの指針となる原則
6.2.1 コミュニケーションの原則
6.2.2 計画の原則
6.2.3 モデリングの原則
6.2.4 構築の原則
6.2.4.1 コーディングの原則
6.2.4.2 テストの原則
6.2.5 デプロイの原則
6.3 まとめ
Special Training 74
第7章 要求エンジニアリング
7.1 要求エンジニアリングとは
7.1.1 方向付け
7.1.2 要求獲得
7.1.3 精緻化
7.1.4 交渉
7.1.5 仕様化
7.1.6 妥当性確認
7.1.7 要求マネジメント
7.2 土台の整備
7.2.1 ステークホルダの特定
7.2.2 複数の視点の理解
7.2.3 コラボレーションを意識した取り組み
7.2.4 最初の質問
7.2.5 非機能要件
7.2.6 トレーサビリティ
7.3 要求収集
7.3.1 協調的な要求収集
7.3.2 利用シナリオ
7.3.3 要求獲得の成果物
7.4 ユースケースの作成
7.5 分析モデルの構築
7.5.1 分析モデルの構成要素
7.5.2 アナリシスパターン
7.6 要求に関する交渉
7.7 要求の監視
7.8 要求の妥当性確認
7.9 まとめ
Special Training
第8章 要求モデリングの推奨手法
8.1 要求分析
8.1.1 全体的な目的と考え方
8.1.2 分析のための経験則
8.1.3 要求モデリングの原則
8.2 シナリオに基づくモデリング
8.2.1 アクターとプロファイル
8.2.2 ユースケースの作成
8.2.3 ユースケースのドキュメント化
8.3 クラスに基づくモデリング
8.3.1 分析クラスの特定
8.3.2 属性と操作の定義
8.3.3 UMLのクラスモデル
8.3.4 クラス・責務・協調クラスによるモデリング
8.4 機能のモデリング
8.4.1 処理手続きの観点
8.4.2 シーケンス図
8.5 振る舞いのモデリング
8.5.1 ユースケースを用いたイベントの特定
8.5.2 ステートマシン図
8.5.3 アクティビティ図
8.6 まとめ
Special Training
第9章 設計の概念
9.1 ソフトウェアエンジニアリングにおける設計
9.2 設計プロセス
9.2.1 ソフトウェアの品質ガイドラインと品質特性
9.2.2 ソフトウェア設計の進化
9.3 設計の概念
9.3.1 抽象
9.3.2 アーキテクチャ
9.3.3 パターン
9.3.4 関心事の分離
9.3.5 モジュール性
9.3.6 情報隠蔽
9.3.7 機能独立性
9.3.8 段階的な詳細化
9.3.9 リファクタリング
9.3.10 設計クラス
9.4 設計モデル
9.4.1 設計モデリングの原則
9.4.2 データ設計
9.4.3 アーキテクチャ設計の構成要素
9.4.4 インタフェース設計
9.4.5 コンポーネント設計の構成要素
9.4.6 デプロイメント設計
9.5 まとめ
Special Training
第10章 アーキテクチャ設計の推奨手法
10.1 ソフトウェアのアーキテクチャ
10.1.1 アーキテクチャとは何か
10.1.2 なぜアーキテクチャは重要なのか
10.1.3 アーキテクチャ記述
10.1.4 アーキテクチャ上の決定
10.2 アジリティとアーキテクチャ
10.3 アーキテクチャスタイル
10.3.1 アーキテクチャスタイルの分類
10.3.1.1 データ中心アーキテクチャ
10.3.1.2 データフローアーキテクチャ
10.3.1.3 呼び出し返却型アーキテクチャ
10.3.1.4 オブジェクト指向アーキテクチャ
10.3.1.5 レイヤアーキテクチャ
10.3.1.6 MVCアーキテクチャ
10.3.1.7 アーキテクチャスタイルの選択
10.3.2 アーキテクチャパターン
10.3.3 組織化と洗練
10.4 アーキテクチャ上の検討事項
10.5 アーキテクチャ上の決定
10.6 アーキテクチャ設計
10.6.1 システムを文脈の中で表現する
10.6.2 原型を定義する
10.6.3 アーキテクチャをコンポーネントへ洗練する
10.6.4 システムをどのようにインスタンス化するか説明する
10.7 アーキテクチャ設計の選択肢の評価
10.7.1 アーキテクチャレビュー
10.7.2 パターンに基づくアーキテクチャレビュー
10.7.3 アーキテクチャの適合性検査
10.8 まとめ
Special Training
第11章 コンポーネント設計
11.1 コンポーネントとは何か
11.1.1 オブジェクト指向の視点
11.1.2 伝統的なソフトウェアエンジニアリングの視点
11.1.3 プロセスに関連する視点
11.2 クラスに基づくコンポーネントの設計
11.2.1 基本的な設計の原則
11.2.1.1 4 種類の基本的な設計の原則
11.2.1.2 Robert C.Martinの提案するパッケージングに関する追加の原則
11.2.2 コンポーネント設計の指針
11.2.3 凝集
11.2.4 結合
11.3 コンポーネント設計の実施
11.4 システムの種類に応じたコンポーネント設計
11.4.1 Webアプリケーションのコンポーネント設計
11.4.2 モバイルアプリケーションのコンポーネント設計
11.4.3 伝統的なコンポーネントの設計
11.4.4 コンポーネントに基づく開発
11.5 コンポーネントのリファクタリング
11.6 まとめ
Special Training
第12章 ユーザエクスペリエンス設計
12.1 UX設計の要素
12.1.1 情報アーキテクチャ
12.1.2 ユーザ相互作用設計
12.1.3 ユーザビリティエンジニアリング
12.1.4 視覚デザイン
12.2 黄金律
12.2.1 ユーザが制御できるようにしなさい
12.2.2 ユーザの記憶負荷を減らしなさい
12.2.3 インタフェースに一貫性を持たせなさい
12.3 ユーザインタフェースの分析と設計
12.3.1 インタフェースの分析と設計のモデル
12.3.2 プロセス
12.4 UX分析
12.4.1 ユーザ調査
12.4.2 ユーザモデリング
12.4.3 タスク分析
12.4.4 作業環境の分析
12.5 UX設計
12.6 ユーザインタフェース設計
12.6.1 インタフェース設計のステップの適用
12.6.2 ユーザインタフェースデザインパターン
12.7 設計の評価
12.7.1 プロトタイプレビュー
12.7.2 ユーザテスト
12.8 ユーザビリティとアクセシビリティ
12.8.1 ユーザビリティガイドライン
12.8.2 アクセシビリティガイドライン
12.9 従来のソフトウェアのUXと移動体端末
12.1 まとめ
Special Training
第13章 移動体端末におけるソフトウェアの設計
13.1 モバイルアプリケーションに関する課題
13.1.1 開発上の懸念
13.1.2 技術上の懸念
13.2 モバイル開発のライフサイクル
13.2.1 ユーザインタフェース設計
13.2.2 学んだこと
13.3 モバイルアーキテクチャ
13.4 コンテキストアウェアアプリケーション
13.5 Webアプリケーションの設計ピラミッド
13.5.1 Webアプリケーションのユーザインタフェース設計
13.5.2 審美性の設計
13.5.3 コンテンツ設計
13.5.4 アーキテクチャ設計
13.5.5 ナビゲーション設計
13.6 コンポーネント設計
13.7 移動体端末と設計の品質
13.8 移動体端末の設計におけるベストプラクティス
13.9 まとめ
Special Training
第14章 パターンに基づく設計
14.1 デザインパターン
14.1.1 パターンの種類
14.1.2 フレームワーク
14.1.3 パターンを記述する
14.1.4 機械学習とパターンの発見
14.2 パターンに基づくソフトウェア設計
14.2.1 パターンに基づく設計のコンテキスト
14.2.2 パターンで考える
14.2.3 設計タスク
14.2.4 パターン整理表を作成する
14.2.5 一般的な設計の誤り
14.3 アーキテクチャパターン
14.4 コンポーネントレベルのデザインパターン
14.5 アンチパターン
14.6 ユーザインタフェース・デザインパターン
14.7 モバイルアプリケーションのデザインパターン
14.8 まとめ
Special Training
第3部 品質とセキュリティ
第15章 品質の概念
15.1 品質とは何か
15.2 ソフトウェアの品質
15.2.1 品質の要素
15.2.2 定量的な品質評価
15.2.3 定性的な品質評価
15.3 ソフトウェア品質のジレンマ
15.3.1 「ほどほどに良い」ソフトウェア
15.3.2 品質コスト
15.3.3 リスク
15.3.4 過失と法的責任
15.3.5 品質とセキュリティ
15.3.6 プロジェクトマネジメント活動の影響
15.4 ソフトウェアの品質を達成する
15.4.1 ソフトウェアエンジニアリングの手法
15.4.2 プロジェクトマネジメントの技術
15.4.3 機械学習と欠陥予測
15.4.4 品質コントロール
15.4.5 品質保証
15.5 まとめ
Special Training
第16章 レビューの推奨手法
16.1 ソフトウェア欠陥のコストインパクト
16.2 欠陥増幅と除去
16.3 レビューのメトリクスと使い方
16.4 レビュー種別ごとの基準
16.5 非形式的レビュー
16.6 形式的テクニカルレビュー
16.6.1 レビューミーティング
16.6.2 レビューの報告と記録の保管
16.6.3 レビューガイドライン
16.7 ポストモーテム評価
16.8 アジャイルレビュー
16.9 まとめ
Special Training
第17章 ソフトウェア品質保証
17.1 問題の背景
17.2 ソフトウェア品質保証の要素
17.3 SQAのプロセスと製品の特性
17.4 SQAのタスク、目標、メトリクス
17.4.1 SQAのタスク
17.4.2 目標、属性、メトリクス
17.5 SQAの形式的なアプローチ
17.6 ソフトウェアの統計的品質保証
17.6.1 一般的な例
17.6.2 ソフトウェアエンジニアリングにおけるシックスシグマ
17.7 ソフトウェアの信頼性
17.7.1 信頼性と可用性の測定
17.7.2 AIを用いた信頼性のモデル化
17.7.3 ソフトウェアの安全性
17.8 ISO 9000品質規格
17.9 SQA計画
17.1 まとめ
Special Training
第18章 ソフトウェアセキュリティエンジニアリング
18.1 なぜソフトウェアセキュリティエンジニアリングが重要か
18.2 セキュリティライフサイクルモデル
18.3 セキュアな開発ライフサイクルのアクティビティ
18.4 セキュリティ要求エンジニアリング
18.4.1 SQUARE
18.4.2 SQUARE のプロセス
18.5 ミスユースケース(またはアビューズケース)と攻撃のパターン
18.6 セキュリティリスク分析
18.7 脅威モデリング、優先度付け、緩和策
18.8 攻撃対象領域
18.9 セキュアコーディング
18.1 測定
18.11 セキュリティプロセス改善と成熟度モデル
18.12 まとめ
Special Training
第19章 ソフトウェアテスト―コンポーネントレベル
19.1 ソフトウェアテストに対する戦略的アプローチ
19.1.1 検証と妥当性確認
19.1.2 ソフトウェアテストのための組織編成
19.1.3 概観図
19.1.4 「完了」の条件
19.2 計画と記録保持
19.2.1 足場の役割
19.2.2 投資対効果の高いテスト
19.3 テストケース設計
19.3.1 要求とユースケース
19.3.2 トレーサビリティ
19.4 ホワイトボックステスト
19.4.1 制御フローテスト
19.4.2 制御構造テスト
19.5 ブラックボックステスト
19.5.1 インタフェーステスト
19.5.2 同値分割
19.5.3 境界値分析
19.6 オブジェクト指向テスト
19.6.1 クラステスト
19.6.2 振る舞いテスト
19.7 まとめ
Special Training
第20章 ソフトウェアテスト―統合レベル
20.1 ソフトウェアテストの基礎
20.1.1 ブラックボックステスト
20.1.2 ホワイトボックステスト
20.2 統合テスト
20.2.1 トップダウン統合
20.2.2 ボトムアップ統合
20.2.3 継続的インテグレーション
20.2.4 統合テストの成果物
20.3 人工知能とリグレッションテスト
20.4 オブジェクト指向コンテキスト内の統合テスト
20.4.1 フォールトベースのテストケース設計
20.4.2 シナリオに基づくテストケース設計
20.5 妥当性確認
20.6 テストパターン
まとめ
Special Training
第21章 ソフトウェアテスト―移動体端末と特定ドメインに対するテスト
21.1 モバイルアプリにおけるテストのガイドライン
21.2 モバイルアプリにおけるテスト戦略
21.3 UXを考慮したテストの課題
21.3.1 ジェスチャーテスト
21.3.2 スクリーンキーボード入力
21.3.3 音声入力と音声認識
21.3.4 アラートと特別条件
21.4 Webアプリのテスト
21.5 Webアプリにおけるテスト戦略
21.5.1 コンテンツテスト
21.5.2 インタフェーステスト
21.5.3 ナビゲーションテスト
21.6 国際化
21.7 セキュリティテスト
21.8 性能テスト
21.9 リアルタイムテスト
21.1 AIシステムのテスト
21.10.1 静的テストと動的テスト
21.10.2 モデルベーステスト
21.11 ゲームとシミュレーションのテスト
21.11.1 ユーザビリティテスト
21.11.2 アクセシビリティテスト
21.11.3 プレイアビリティテスト
21.12 ドキュメントとヘルプ機能のテスト
21.13 まとめ
Special Training
第22章 ソフトウェア構成マネジメント
22.1 ソフトウェア構成マネジメント
22.1.1 ソフトウェア構成マネジメントのシナリオ例
22.1.2 構成マネジメントシステムの要素
22.1.3 ベースライン
22.1.4 ソフトウェア構成項目
22.1.5 依存関係と変更のマネジメント
22.2 ソフトウェア構成マネジメントリポジトリ
22.2.1 一般的な特徴と内容
22.2.2 ソフトウェア構成マネジメント機能
22.3 バージョン管理システム
22.4 継続的インテグレーション
22.5 ソフトウェア変更マネジメントプロセス
22.5.1 変更マネジメント
22.5.2 影響マネジメント
22.5.3 構成監査
22.5.4 構成状況報告
22.6 モバイルとアジャイルの変更マネジメント
22.6.1 軽量な変更コントロール
22.6.2 コンテンツマネジメント
22.6.3 インテグレーションと配信
22.6.4 バージョン管理
22.6.5 監査とレポート
22.7 まとめ
Special Training
第23章 ソフトウェアメトリクスと分析
23.1 ソフトウェアの測定
23.1.1 測定値、測定、メトリクス、指標
23.1.2 効果的なソフトウェアメトリクスがもつ特性
23.2 ソフトウェア分析
23.3 プロダクトメトリクス
23.3.1 要求モデルにおけるメトリクス
23.3.2 従来のソフトウェアにおける設計メトリクス
23.3.3 オブジェクト指向ソフトウェアにおける設計メトリクス
23.3.4 ユーザインタフェースにおける設計メトリクス
23.3.5 ソースコードにおけるメトリクス
23.4 テストにおけるメトリクス
23.5 メンテナンスにおけるメトリクス
23.6 プロセスメトリクスとプロジェクトメトリクス
23.7 ソフトウェアの直接的測定と間接的測定
23.8 ソフトウェア品質におけるメトリクス
23.9 ソフトウェアメトリクスプログラムの確立
23.1 まとめ
Special Training
第4部 ソフトウェアプロジェクトのマネジメント
第24章 プロジェクトマネジメントの概念
24.1 マネジメントの要素(4つのP)
24.1.1 人材
24.1.2 プロダクト(製品)
24.1.3 プロセス
24.1.4 プロジェクト
24.2 人材
24.2.1 ステークホルダ
24.2.2 チームリーダー
24.2.3 ソフトウェアチーム
24.2.4 コミュニケーションや調整に関わる問題
24.3 プロダクト(製品)
24.3.1 ソフトウェアスコープ
24.3.2 問題の分割
24.4 プロセス
24.4.1 プロダクトとプロセスの融合
24.4.2 プロセスの分割
24.5 プロジェクト
24.6 W5HH原則
24.7 プロジェクトの成否を決めるプラクティス
24.8 まとめ
Special Training
第25章 実行可能で役立つソフトウェア計画
25.1 見積りに対する所感
25.2 プロジェクト計画のプロセス
25.3 スコープとフィージビリティ(実現可能性)
25.4 リソース
25.4.1 人的(人材)リソース
25.4.2 再利用可能ソフトウェアリソース
25.4.3 開発環境リソース
25.5 データ分析とソフトウェアプロジェクトの見積り
25.6 分割および見積り技法
25.6.1 ソフトウェアの規模
25.6.2 問題ベースの見積り
25.6.3 LOCベース見積りの例
25.6.4 FPベース見積りの例
25.6.5 プロセスベース見積りの例
25.6.6 ユースケースポイント見積りの例
25.6.7 見積りの照合
25.6.8 アジャイル開発における見積り
25.7 プロジェクトのスケジュール作成
25.7.1 スケジュール作成の基本原則
25.7.2 人員と工数の関係
25.8 プロジェクトのタスクセットの定義
25.8.1 タスクセットの例
25.8.2 重要なタスクを精緻化する
25.9 タスクネットワークを設定する
25.1 スケジュール作成
25.10.1 タイムラインチャート
25.10.2 スケジュールの管理
25.11 まとめ
Special Training
第26章 リスクマネジメント
26.1 受動的リスク戦略と能動的リスク戦略
26.2 ソフトウェアリスク
26.3 リスク特定
26.3.1 全体のプロジェクトリスクを評価する
26.3.2 リスク事象とリスクドライバー
26.4 リスク計画
26.4.1 リスク管理表の作成
26.4.2 リスク影響度の評価
26.5 リスクの精緻化
26.6 リスクの軽減・監視・管理
26.7 RMMM計画
26.8 まとめ
Special Training
第27章 ソフトウェアサポート戦略
27.1 ソフトウェアサポート
27.2 ソフトウェアメンテナンス
27.2.1 メンテナンスの分類
27.2.2 メンテナンスタスク
27.2.3 リバースエンジニアリング
27.3 能動的ソフトウェアサポート
27.3.1 ソフトウェア分析の利用
27.3.2 ソーシャルメディアの役割
27.3.3 サポートにかかるコスト
27.4 リファクタリング
27.4.1 データリファクタリング
27.4.2 コードリファクタリング
27.4.3 アーキテクチャリファクタリング
27.5 ソフトウェアの進化
27.5.1 インベントリ分析
27.5.2 ドキュメントの再構成
27.5.3 リバースエンジニアリング
27.5.4 コードリファクタリング
27.5.5 データリファクタリング
27.5.6 フォワードエンジニアリング
27.6 まとめ
Special Training
第5部 先端的な話題
第28章 ソフトウェアプロセス改善
28.1 SPIとは何か
28.1.1 SPIのアプローチ
28.1.2 成熟度モデル
28.1.3 あらゆる人や組織にSPIは役立つか
28.2 SPIプロセス
28.2.1 アセスメントおよびギャップ分析
28.2.2 教育とトレーニング
28.2.3 適切な選択
28.2.4 導入もしくは移行
28.2.5 評価
28.2.6 SPIにおけるリスクマネジメント
28.3 CMMI
28.4 その他のSPIフレームワーク
28.4.1 SPICE
28.4.2 TickIT Plus
28.5 SPIの投資対効果
28.6 SPIのトレンド
28.7 まとめ
Special Training
第29章 ソフトウェアエンジニアリングの新興トレンド
29.1 技術の進化
29.2 規律としてのソフトウェアエンジニアリング
29.3 ソフトウェアエンジニアリングにおけるトレンドの観測
29.4 ソフトなトレンドの認識
29.4.1 複雑さの克服
29.4.2 オープンワールドソフトウェア
29.4.3 創発的要求
29.4.4 人材構成
29.4.5 ソフトウェア構築部品
29.4.6 価値に対する認識の変化
29.4.7 オープンソース
29.5 技術の羅針盤
29.5.1 プロセスのトレンド
29.5.2 壮大な挑戦
29.5.3 協働型開発
29.5.4 要求エンジニアリング
29.5.5 モデル駆動開発
29.5.6 サーチベースのソフトウェアエンジニアリング
29.5.7 テスト駆動開発
29.6 ツール関連のトレンド
29.7 まとめ
Special Training
第30章 おわりに
30.1 ソフトウェアの重要性を再考する
30.2 人間、そしてシステムを開発する方法
30.3 知識の発見
30.4 長期的展望
30.5 ソフトウェアエンジニアの責任
30.6 Roger S.Pressmanより結びの言葉
付録1 UML入門
付録2 ソフトウェアエンジニアのためのデータサイエンス
参考文献
索引
訳者プロフィール