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