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 SoftwareEngineering
一个经济学家对软件和软件工程的看法
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 EthicalResponsibility
软件工程的专业和道德责任
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 RequirementSpecification
例:网上招聘系统的需求规格说明书
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 EffortEstimation
简介
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 SoftwareProjects
软件项目的一般风格和编码标准
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 LiteralValues
用常量和宏代替硬编码
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, andSubroutines)
标识符(变量、常量和子程序)的命名约定
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 DifferentiateSubroutines, 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 theScope 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 MorePortable
整型变量和浮点型变量的转换使编码更容易
A.10.8 Compiler Dependent Code Should Include Tests
依赖编译器的代码应该包含测试
A.10.9 Use ASCII Files for Runtime or Machine Dependent Constantsand 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
最小化变量范围