圖書信息
作 譯 者:田文洪
出版時間:2012-01
千 字 數:533
作者簡介
作者姓名:田文洪
學位:博士
任職:教授、博導
研究方向:雲計算、大數據資源調度;高性能並行處理;NP難問題近似算法
其他職業:電子科技大學客座脫口秀表演藝術家
內容簡介
本書由淺入深、循序漸進地介紹了規範化的軟體開發方法所涉及的概念和方法。內容包括過程模型、軟體需求、設計工程、生產率和工作量度量、軟體測試、軟體維護、質量管理、項目管理和風險管理等內容,最後介紹了一些常用的軟體開發工具,並給出編碼風格上的建議。
目 錄
Unit 1 Introduction to Software Engineering 1
軟體工程介紹
Learning Objectives 1
學習目標
1.1 A Brief Introduction to Software Engineering 1
軟體工程簡介
1.1.1 The Pioneering Era 2
開創時期
1.1.2 1945 to 1965: The Origins 2
1945到1965: 發起
1.1.3 1965 to 1985: The Software Crisis 2
1965到1985:軟體危機
1.1.4 1985 to 1989: No Silver Bullet 3
1985到1989:沒有銀彈
1.1.5 1990 to 1999: Prominence of the Internet 4
1990到1999:Internet盛行
1.1.6 2000 to Present: Lightweight Methodologies 4
2000年至今:輕量級方法
1.1.7 Current Trends in Software Engineering 4
軟體工程的發展趨勢
1.1.8 Software Engineering Today 5
今天的軟體工程
1.2 Software 5
軟體
1.2.1 A Formal Definition of Software 5
軟體的正式定義
1.2.2 Characteristics of Software 5
軟體的特徵
1.2.3 The Dual Roles of Software 7
軟體的雙重角色
1.2.4 Classification of Software 7
軟體分類
1.2.5 Why does Software Change Very Fast? 7
為什麼軟體變化快?
1.3 Why Do We Need Software Engineering? 8
為什麼需要軟體工程?
1.3.1 Software Crisis 8
軟體危機
1.3.2 An Economist’s View of Software and Software Engineering 8
一個經濟學家對軟體和軟體工程的看法
1.3.3 The Formal Definition of Software Engineering 9
軟體工程的正式定義
1.4 Major Concerns and Objectives of Software Engineering 9
軟體工程的目標和擔憂
1.5 Seven Principles for Software Engineering 9
軟體工程的七個原則
1.5.1 Manage Using a Phased Lifecycle Plan 9
使用階段性的生命周期管理計畫
1.5.2 Perform Continuous Validation 10
進行持續驗證
1.5.3 Maintain Disciplined Product Control 10
維持有效的產品控制
1.5.4 Use Modern Programming/Engineering Practices 10
運用現代編程/工程實踐
1.5.5 Maintain Clear Accountability for Results 10
維護清晰的問責機制
1.5.6 Use Better and Fewer People 10
用更好更少的人
1.5.7 Maintain a Commitment to Improve the Process 11
保持過程改進
1.6 Major Topics in Software Engineering 11
軟體工程中的主要課題
1.7 Relationship to Other Disciplines 13
其他相關學科
1.8 Some Misunderstandings about Software Engineering 14
一些對軟體工程的錯誤認識
1.9 Software Engineering Code of Professional and Ethical Responsibility 15
軟體工程的專業和道德責任
Summary 16
總結
Notes 16
重點注釋
Glossary of this unit 17
術語
Quiz 17
習題
References 18
參考文獻
Further Reading 18
擴展閱讀
Unit 2 Process Models 21
過程模型
Learning Objectives 21
學習目標
2.1 Introduction 21
簡介
2.2 What is Software Process? 22
什麼是軟體過程?
2.3 Maturity Models 23
成熟度模型
2.4 Software Process Models 24
軟體過程模型
2.4.1 The Waterfall Model 24
瀑布模型
2.4.2 The Evolutionary Model 26
演化模型
2.4.3 Component-based Model 28
基於組件的模型
2.4.4 Incremental Process Models 29
增量模型
2.4.5 Some New Process 33
一些新模型
2.5 How to Choose Process Models? 33
如何選擇過程模型?
2.6 The Relationship between Process and Product 33
過程和產品的關係
Summary 34
總結
Notes 34
重點注釋
Glossary of this unit 35
術語
Quiz 35
習題
References 36
參考文獻
Unit 3 Software Requirements 37
軟體需求
Learning Objectives 37
學習目標
3.1 Software Requirements Fundamentals 37
軟體需求基礎
3.1.1 Definition of a Software Requirement 38
軟體需求定義
3.1.2 Product and Process Requirements 38
產品和過程需求
3.1.3 Functional and Non-functional Requirements 39
功能和非功能需求
3.1.4 Quantifiable Requirements 39
可量化的需求
3.1.5 System and Software Requirements 39
系統需求和軟體需求
3.2 Requirements Process 40
需求過程
3.2.1 Process Models 40
過程模型
3.2.2 Process Actors 41
過程角色
3.3 Requirements Elicitation 41
需求獲取
3.3.1 Requirements Sources 42
需求來源
3.3.2 Elicitation Techniques 42
需求獲取方法
3.4 Requirements Analysis 43
需求分析
3.4.1 Requirements Classification 44
需求分類
3.4.2 Conceptual Modeling 45
概念建模
3.4.3 Architectural Design and Requirements Allocation 46
結構設計和需求配置
3.4.4 Requirements Negotiation 46
需求談判
3.5 Requirements Specification 47
需求規格
3.5.1 The System Definition Document 47
系統定義文檔
3.5.2 The Software Requirements Specification 48
需求規格說明書
3.6 Requirements Validation 52
需求驗證
3.6.1 Requirements Reviews 52
需求審查
3.6.2 Prototyping 53
原型
3.6.3 Model Validation 53
模型驗證
3.6.4 Acceptance Tests 54
驗收測試
3.7 Practical Considerations 54
實際考慮因素
3.7.1 Iterative Nature of the Requirements Process 54
需求過程的疊代
3.7.2 Change Management 55
變更管理
3.8 Example: Online Recruiting System Requirement Specification 55
例:網上招聘系統的需求規格說明書
3.8.1 Introduction 55
導言
3.8.2 System Definitions 55
系統定義
3.8.3 Running Environment 56
套用環境
3.8.4 Function Specifications 57
功能規格
3.8.5 Performance Requirements 59
性能需求
3.8.6 Products Submitting 59
產品提交
3.8.7 Implementation Constrains 59
實現約束
Summary 59
總結
Notes 59
重點注釋
Glossary of this unit 60
術語
Quiz 60
習題
References 60
參考文獻
Unit 4 Software Design Engineering 62
軟體設計工程
Learning Objectives 62
學習目標
4.1 Introduction to Design Engineering 62
設計工程簡介
4.2 Design Process and Quality 63
設計過程和質量
4.3 Design Technologies 64
設計技術
4.3.1 Abstraction 64
抽象
4.3.2 Design Patterns 65
設計模式
4.3.3 Modularization 65
模組化
4.3.4 Information Hiding 67
信息隱藏
4.3.5 Function Independence 67
功能獨立
4.3.6 Refinement 68
改進
4.3.7 Refactoring 68
重構
4.4 Design Models 68
設計模型
4.4.1 Data Design 70
數據結構設計
4.4.2 Architecture Design 72
架構設計
4.4.3 Interface Design 76
接口設計
4.4.4 Component Design 76
組件設計
4.4.5 Deploy Design 77
部署設計
4.5 Design Case Study 80
設計實例
Summary 82
總結
Notes 83
重點注釋
Glossary of this unit 84
術語
Quiz 84
習題
References 84
參考文獻
Unit 5 Software Productivity and Effort Metrics 86
軟體生產率和工作量度量
Learning Objectives 86
學習目標
5.1 Introduction to Software Productivity and Project Effort Estimation 86
簡介
5.2 Software Productivity Estimation 88
軟體生產率估計
5.2.1 Size-based Metrics—Direct Measurement 89
基於規模的度量——直接度量
5.2.2 Function-points Metrics—Indirect Measurement 90
功能點度量——間接度量
5.2.3 The Relationship Between LOC and FP Based Metrics 92
LOC和FP度量的關係
5.2.4 How to Use These Metrics for Productivity Estimation? 92
如何運用這些度量進行生產率估計?
5.3 Estimation for Project Effort 93
項目工作量估計
5.3.1 Algorithmic Cost Modeling —Empirical Measurement 93
算法成本模型——基於經驗的度量
5.3.2 The COCOMO Model 94
COCOMO模型
5.3.3 Estimation of Effort in Project Planning 95
項目計畫中的工作量度量
5.3.4 Estimation of Effort by Tasks Breakdown 95
通過任務分解來估算工作量
5.3.5 Estimation of Effort by Current Available Resources 96
通過目前可用的資源來估算工作量
Summary 96
總結
Notes 96
重點注釋
Glossary of this unit 98
術語
Quiz 98
習題
References 98
參考文獻
Unit 6 Software Quality Management 99
軟體質量管理
Learning Objectives 99
學習目標
6.1 An Introduction to Software Quality Management 99
簡介
6.2 Software Quality 100
軟體質量
6.2.1 Definition of Software Quality 100
軟體質量定義
6.2.2 Quality Control 101
質量控制
6.2.3 Quality Assurance 101
質量保證
6.2.4 Quality Costs 102
質量成本
6.3 Software Quality Assurance 102
軟體質量保證
6.3.1 Background Introduction 103
背景介紹
6.3.2 SQA Activities 104
SQA活動
6.4 Software Review 106
軟體審查
6.4.1 Impact of Software Bug Costs 106
軟體錯誤的代價
6.4.2 Software Defect Indicator and Removal 107
軟體缺陷的發現和消除
6.5 Formal Technique Review 107
正式技術審查
6.5.1 Review Report 107
審查報告
6.5.2 Review Tutorial 108
審查指南
6.6 Software Reliability 109
軟體可靠性
6.6.1 Measurement of Reliability and Availability 109
可靠性和可用性度量
6.6.2 Software Security 109
軟體安全
6.7 ISO 9000 Family of Standards 109
ISO 9000標準
Summary 113
總結
Notes 113
重點注釋
Glossary of this unit 114
術語
Quiz 114
習題
References 114
參考文獻
Unit 7 Testing Techniques 116
測試方法
Learning Objectives 116
學習目標
7.1 Testing Introduction 116
測試簡介
7.2 Testing Objective 117
測試目標
7.3 Testing Evaluation 117
測試評估
7.3.1 Coverage/Thoroughness Measures 117
覆蓋性/徹底性度量
7.3.2 Fault Seeding 117
故障植入
7.4 Testing Techniques 117
測試方法
7.4.1 White-box Testing 117
白盒測試
7.4.2 Black-box Testing 122
黑盒測試
7.5 Example: Testing Design of Online Recruiting System 123
例:網上招聘系統的測試設計
7.5.1 Introduction 123
簡介
7.5.2 Testing Design 124
測試設計
7.5.3 Testing Cases 124
測試用例
Summary 124
總結
Notes 125
重點注釋
Glossary of this unit 125
術語
Quiz 126
習題
References 126
參考文獻
Unit 8 Testing Strategies 127
測試策略
Learning Objectives 127
學習目標
8.1 Testing Strategies Introduction 127
測試策略簡介
8.2 Unit Testing 127
單元測試
8.2.1 Unit Testing Considerations 128
單元測試考慮因素
8.2.2 Unit Testing Procedures 129
單元測試過程
8.3 Integration Testing 130
集成測試
8.3.1 Top-down Integration 130
自頂向下集成
8.3.2 Bottom-up Integration 131
自底向上集成
8.3.3 Regression Testing 132
回歸測試
8.3.4 Smoke Testing 132
冒煙測試
8.4 Validation Testing 132
驗證測試
8.4.1 Validation Testing Criteria 133
驗證測試標準
8.4.2 Configuration Review 133
配置評審
8.4.3 Alpha and Beta Testing 133
Alpha和Beta測試
8.5 System Testing 134
系統測試
8.5.1 Recovery Testing 134
恢複測試
8.5.2 Security Testing 134
安全性測試
8.5.3 Stress Testing 134
壓力測試
8.5.4 Performance Testing 135
性能測試
8.6 Example: Testing Report of Online Recruiting System 135
例:網上招聘系統測試報告
8.6.1 Introduction 135
簡介
8.6.2 Testing Time, Place, and People 136
測試時間、地點和人員
8.6.3 Testing Environment 136
測試環境
8.6.4 Testing Execution 136
測試執行
8.6.5 Testing Result Analysis 137
測試結果分析
8.6.6 Testing Evaluation 138
測試評估
Summary 138
總結
Notes 138
重點注釋
Glossary of this unit 139
術語
Quiz 139
習題
References 139
參考文獻
Unit 9 Software Maintenance 141
軟體維護
Learning Objectives 141
學習目標
9.1 Software Maintenance Fundamentals 141
軟體維護基礎
9.1.1 Definitions and Terminology 142
定義和術語
9.1.2 Need for Maintenance 142
維護的必要性
9.1.3 Majority of Maintenance Costs 142
維護成本
9.2 Key Issues in Software Maintenance 143
軟體維護的關鍵問題
9.2.1 Technical Issues 143
技術問題
9.2.2 Management Issues 145
管理問題
9.2.3 Maintenance Cost Estimation 146
維護成本估計
9.3 Maintenance Process 146
維護過程
9.3.1 Maintenance Processes 146
維護過程
9.3.2 Maintenance Activities 148
維護活動
9.4 Techniques for Maintenance 150
維護技術
9.4.1 Program Comprehension 150
程式理解
9.4.2 Reengineering 150
再工程
9.4.3 Reverse Engineering 150
逆向工程
Summary 151
總結
Notes 151
重點注釋
Glossary of this unit 151
術語
Quiz 151
習題
References 151
參考文獻
Unit 10 Software Project Management 153
軟體項目管理
Learning Objectives 153
學習目標
10.1 Introduction to Project Management 153
項目管理簡介
10.2 Four Elements of Project Management 156
項目管理四要素
10.3 The People 157
人員
10.3.1 People Management Capability Maturity Model 158
人員管理能力成熟度模型
10.3.2 Team Building 160
團隊建設
10.3.3 Team Organization 161
團隊組織
10.3.4 Virtual Teams 162
虛擬團隊
10.4 The Product 163
產品
10.4.1 Software Scope 163
軟體範圍
10.4.2 Problem Decomposition 164
問題分解
10.5 The Process 164
過程
10.6 The Project 167
項目
10.6.1 Project Estimation 168
項目估算
10.6.2 Project Planning 169
項目規劃
Summary 170
總結
Notes 170
重點注釋
Glossary of this unit 172
術語
Quiz 172
習題
References 172
參考文獻
Unit 11 Software Risk Analysis and Management 174
軟體風險分析和管理
Learning Objectives 174
學習目標
11.1 An Introduction to Software Risk Management 174
軟體風險管理簡介
11.2 Software Risk Management Strategy 175
軟體風險管理策略
11.3 Software Risk Identification 176
軟體風險識別
11.3.1 Evaluate the Whole Project 176
評價整個項目
11.3.2 Risk Classification 177
風險分類
11.4 Software Risk Assessment 178
軟體風險評估
11.4.1 Building Risk List 178
制定風險清單
11.4.2 Assessing Risk Influence Factors 179
評估風險影響因素
11.4.3 Dynamic Ranking 183
動態排名
11.5 Software Risk Refinement 183
軟體風險改進
11.6 Software Risk Aversion, Monitoring and Management 184
軟體風險規避、監控和管理
Summary 187
總結
Notes 188
重點注釋
Glossary of this unit 188
術語
Quiz 189
習題
References 189
參考文獻
Unit 12 Software Engineering Development Tools 190
軟體工程開發工具
Learning Objectives 190
學習目標
12.1 Software Requirements Tools 190
軟體需求工具
12.2 Software Design Tools 191
軟體設計工具
12.2.1 IBM Rational Software Architect 191
IBM 軟體開發
12.2.2 PowerDesigner 191
PowerDesigner工具
12.3 Software Architecture Tools 192
軟體架構工具
12.3.1 Visual Studio.NET 192
Visual Studio .NET工具
12.3.2 Visual Borland JBuilder 193
Visual Borland JBuilder工具
12.3.3 Eclipse 194
Eclipse工具
12.4 Software Maintenance Tools 196
軟體維護工具
12.4.1 CASE Tool 196
CASE工具
12.4.2 Information Repository of CASE Environment 197
CASE環境的信息庫
12.4.3 CASE Environment Structure 197
CASE環境結構
12.5 Software Testing Tools 198
軟體測試工具
12.5.1 WinRunner 198
WinRunner工具
12.5.2 LoadRunner 199
LoadRunner工具
12.6 Software Configuration Management Tools 201
軟體配置管理工具
12.6.1 Software Configuration Manager 202
軟體配置管理
12.6.2 Source Code Management 203
軟體代碼管理
12.6.3 Version Management 204
版本管理
12.6.4 Operation Command 205
操作命令
12.7 Software Engineering Tools 211
軟體工程工具
Appendix A General Style and Coding Standards for Software Projects 214
軟體項目的一般風格和編碼標準
A.1 Introduction 214
簡介
A.1.1 Purpose 214
目的
A.1.2 Scope 215
範圍
A.1.3 Coding Standard Documents 215
編碼標準文檔
A.1.4 Other Related Project Documents 215
其他相關文檔
A.1.5 Terms Used in This Document 215
文檔中的術語
A.1.6 References 216
參考文獻
A.1.7 Our Limited Lifetime Warranty 216
有限的使用期限保證
A.1.8 The Emotional Topic of Coding Standards 216
編碼標準的情緒問題
A.2 Project Dependent Standards 217
項目依賴標準
A.3 File And Module Guidelines 217
檔案和模組指南
A.3.1 Module Design Guidelines 217
模組設計指南
A.3.2 Header (Include) Files 218
Header (Include) 檔案
A.3.3 Source File Layout Guideline 218
源檔案布局指南
A.3.4 File Naming Guideline 219
檔案命名指南
A.3.5 File Informational Headers 219
檔案頭
A.3.6 Subroutine Header 220
子程式頭
A.4 Constants and Macros 221
常量和宏
A.4.1 Use Constants and Macros Instead of Hard Coded Literal Values 221
用常量和宏代替硬編碼
A.4.2 Only Define Constants and Macros Once 221
常量和宏只定義一次
A.4.3 Place Parenthesis around Each Macro Parameters 221
為每個宏參數加小括弧
A.4.4 Notes about Style 221
記錄風格
A.5 Global Data Guidelines 222
全局數據指南
A.6 Subroutines 222
子程式
A.6.1 Subroutine Scope Guidelines 222
子程式範圍指南
A.6.2 Subroutine Declaration Guidelines 222
子程式聲明指南
A.6.3 Subroutine Layout Guidelines 222
子程式布局指南
A.6.4 Subroutine Size Guidelines 222
子程式規模指南
A.6.5 Parameter List Guidelines 223
參數列表指南
A.6.6 Variable Declaration Guidelines 223
變數聲明指南
A.7 Comments 223
注釋
A.7.1 Distributed Code Description 223
分散式代碼描述
A.7.2 Comment Block Standard 224
注釋標準
A.7.3 In line Comments 224
行內注釋
A.7.4 Commenting Control Constructs 224
注釋控制結構
A.8 Code Layout 224
代碼布局
A.8.1 One Statement per Line 224
每行一個語句
A.8.2 Indentation Guidelines 225
縮進指南
A.8.3 Brackets, Begin...End, and Delimiting Control Blocks 225
括弧、Begin...End和邊界控制塊
A.8.4 Error Handling 225
錯誤處理
A.9 Naming Convention for Identifiers (Variables, Constants, and Subroutines) 226
標識符(變數、常量和子程式)的命名約定
A.9.1 Select Clear and Meaningful Names 226
選擇清晰和有意義的名字
A.9.2 Naming Subroutines (verb and object) 226
命名子程式(動詞和對象)
A.9.3 Naming Constants, Variables (noun) 226
命名常量和變數(名詞)
A.9.4 Naming Boolean Identifiers 226
命名Boolean標誌符(動詞、對象或形容詞)
A.9.5 Naming Types 226
命名類型
A.9.6 Use of Upper/lower Case and Underscores to Differentiate Subroutines, Variables,
and Constants 227
用大小寫來區別子程式、變數和常量
A.9.7 Subroutines and Program Units 227
子程式和程式單元
A.9.8 Variables 227
變數
A.9.9 Macros and Constants 227
宏和常量
A.9.10 Use of Prefix (Hungarian) Notations to Differentiate the Scope and Type of a Data Variable 227
用前綴來區別變數的範圍和類型
A.9.11 Abbreviations 230
縮寫
A.9.12 Summary Table for Naming Convention: 230
命名約定的總結
A.10 Misc. Rules for Coding 231
編碼規範
A.10.1 Conditionals and Comparisons 231
條件和比較
A.10.2 Program Flow 231
程式流
A.10.3 Binding Time of Variables and Values 231
變數和值的綁定時間
A.10.4 Go-tos, Pointers, and Issues of Clarity 232
Go-to語句、指針和二義性問題
A.10.5 Strive to Develop Clear Code 232
開發清晰的代碼
A.10.6 Use Libraries When Available 232
使用庫
A.10.7 Type Casting Integer and Float Variables Makes Code More Portable 232
整型變數和浮點型變數的轉換使編碼更容易
A.10.8 Compiler Dependent Code Should Include Tests 232
依賴編譯器的代碼應該包含測試
A.10.9 Use ASCII Files for Runtime or Machine Dependent Constants and Macros 233
使用執行時ASCII檔案或依賴機器的常量和宏
A.10.10 Error Handling 233
錯誤處理
A.10.11 Debugging 233
調試
A.10.12 Using Structures and Enumerators is Recommended 233
推薦使用結構和枚舉
A.11 Modularization and Information Hiding 233
模組化和信息隱藏
A.11.1 Information Hiding, Domain, and Scope of Variables 233
信息隱藏、域、變數的範圍
A.11.2 Low Coupling, High Cohesion, and Clean Interfaces 233
低耦合,高內聚,清晰的接口
A.11.3 Cohesion 233
內聚
A.11.4 Coupling 233
耦合
A.11.5 Clean Interface 234
清晰的接口
A.11.6 Minimize Scope of Variables 234
最小化變數範圍