一、软件工程概述
计算机软件
计算机软件分为十类:系统软件、应用软件、工程/科学软件、嵌入式软件、产品线软件、Web应用、人工智能软件、开放计算、网络资源、开源软件。
软件工程基本原理
7条基本原理:用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代程序设计技术、结果应能清楚地审查、开发小组的人员应少而精、承认不断改进软件工程实践的必要性。
软件生存周期
软件生存周期包括可行性分析与项目开发计划、需求分析、设计(概要设计和详细设计)、编码、测试、维护。
软件过程
能力成熟度模型(CMM)分为5个级别:初始级、可重复级、已定义级、已管理级、优化级。
能力成熟度模型集成(CMMI)分为阶段式模型和连续模式模型。
阶段式模型类似CMM,有5个等级:初始的、已管理的、已定义的、定量管理的、优化的。
连续式模型有6个等级:未完成的、已执行的、已管理的、已定义级的、定量管理的、优化的。
二、软件过程模型
瀑布模型
优点:容易理解、管理成本低;强调开发的阶段性早期计划及需求调查和产品测试。
缺点:客户必须能够完整、正确和清晰地表达他们的需要。需求或设计中的错误往往只有到了项目后期才能够被发现,对于项目的风险的控制能力较弱,从而导致项目常常延期完成,开发费用超出预算。
增量模型
优点:具有瀑布模型的所有优点。此外,第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大;由于很快发布了第一个版本,因此可以减少用户需求的变更;运行增量投资,即在项目开始时,可以仅对一个或两个增量投资。
缺点:如果没有对用户的变更需求进行规划,那么产生的初始增量可能会造成后来的增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;管理发生的成本、进度和配置的复杂性可能会超出组织的能力。
演化模型
典型的演化模型有原型模型和螺旋模型。
原型模型
原型可以分为3种:探索型原型、实验型原型、演化型原型。
探索型原型:弄清目标的要求、确实希望的特性、并探讨多种方案的可行性。
实验型原型:验证方案或算法的合理性,是在大规模开发和实现前,用于考查方案是否合适、规格说明是否可靠等。
演化型原型:将原型作为目标系统的一部分,通过对原型的多次改进,逐步将原型演化成最终的目标系统。
螺旋模型
螺旋周期分为4个步骤:制订计划、风险分析、实施工程、用户评估。
喷泉模型
优点:提高软件项目的开发效率,节省开发时间。
缺点:需要大量的开发人员,不利于项目的管理,要求严格管理文档,审核难度加大。
基于构件的开发模型
基于构件的开发模型本质上是演化模型,需要以迭代方式构建软件。不同之处在于,基于构件的开发模型采用预先打包的软件构件开发应用系统。
形式化方法模型
统一过程模型
统一过程模型是一种“用例和风险驱动、以架构为中心、迭代并且增量”的开发过程,由UML方法和工具支持。
统一过程定义了4个技术阶段及其制品:
起始阶段:生命周期目标。
精化阶段:生命周期架构。
构建阶段:初始运作功能。
移交阶段:产品发布。
敏捷方法
敏捷方法有5种:极限编程、水晶法、并列争求法、自适应软件开发、敏捷统一过程。
极限编程由价值观、原则、实践和行为4个部分组成。
敏捷统一过程(AUP)迭代执行以下活动:建模、实现、测试、部署、配置及项目管理、环境管理。
三、需求分析
软件需求
软件需求包括:功能需求、性能需求、用户或人的因素、环境需求、界面需求、文档需求、数据需求、资源使用需求、安全保密需求、可靠性需求、软件成本消耗与开发进度需求、其他非功能性需求。
需求分析原则
必须能够表示和理解问题的信息域。
必须能够定义软件将完成的任务。
必须能够表示软件的行为
必须划分描述数据、功能和行为的模型,从而可以分层次地揭示细节。
分析过程应该从要素信息移向细节信息。
需求工程
需求工程可以分为6个阶段:需求获取、需求分析与协商、系统建模、需求规约、需求验证、需求管理。
四、系统设计
系统设计的基本任务分为概要设计、详细设计两个步骤。
概要设计
设计软件系统总体结构、数据结构及数据库设计、编写概要设计文档、评审。
详细设计
对每个模块进行详细的算法设计、对模块内的数据结构进行设计、对数据库进行物理设计、其他设计、编写详细设计说明书、评审。
五、系统测试
系统测试与调试
系统测试遵循的原则:
应尽早并不断地进行测试。
测试工作应该避免由原开发软件的人员或小组承担。
在设计测试方案时要确定输入数据和预期输出结果。
在测试程序时不仅要检验程序,还要检验程序是否做了不该做的事。
严格按照测试计划来进行。
妥善保存测试计划、测试用例。
测试例子都是精心设计出来的。
测试过程包括以下基本测试活动:
制订测试计划。
编制测试大纲。
根据测试大纲设计和生成测试用例。
实施测试。
生成测试报告。
传统软件的测试策略
有效的软件测试分为4步:单元测试、集成测试、确认测试、系统测试。
测试面向对象软件
测试面向对象软件:单元测试、集成测试。
测试web应用
质量维度有:内容、功能、结构、可用性、导航性、性能、兼容性、安全性。
WebApp测试策略有:
测试方法
测试方法分为静态测试、动态测试。
静态测试有:人工检测、计算机辅助静态分析。
动态测试有:黑盒测试、白盒测试。
调试
调试方法有:试探法、回溯法、对分查找法、归纳法、演绎法。
六、运行和维护知识
系统转换
新旧系统转换的方式有:直接转换、并行转换、分段转换。
系统维护概述
系统可维护性的评价指标:可理解性、可测试性、可修改性。
系统维护主要包括:硬件维护、软件维护、数据维护。
系统评价
系统评价分成立项评价、中期评价、结项评价。
七、软件项目管理
软件项目管理涉及的范围
软件项目管理集中在:人员、产品、过程和项目。
软件项目估算
常用的估算方法有:
基于已完成的类似项目进行估算。
基于分解技术进行估算。
基于经验估算模型的估算。
进度管理
进度管理的基本原则:划分、相互依赖性、时间分配、工作量确认、确定责任、明确输出结果、确定里程碑。
软件项目的组织
软件项目的组织原则有:尽早落实责任、减少交流接口、责权均衡。
软件配置管理(SCM)
软件配置管理主要目标有:标识变更、控制变更、确保变更正确地实现、报告有关变更。
风险管理
项目风险威胁到项目计划。
技术风险威胁到要开发软件的质量及交付时间。
商业风险威胁到要开发软件的生存能力。
八、软件质量
软件质量特性
ISO/IEC 9126软件质量模型
Mc Call软件质量模型
软件质量保证
软件质量保证包括7个主要活动:应用技术方法、进行正式的技术评审、测试软件、标准的实施、控制变更、度量、记录保存和报告。
软件评审
设计质量的评审内容
程序质量的评审内容
与运行环境的接口
软件容错技术
容错软件的定义有4种:屏蔽自身错误、出错能恢复正常、出错仍完成预期功能、具有容错能力。
容错的方法有4类:结构冗余、混合冗余、时间冗余、冗余附加技术。
结构冗余有3种:静态冗余、动态冗余、混合冗余。
九、软件度量
软件度量分类
软件度量有2种分类方法。
第1种分类是:面向规模的度量、面向功能的度量、面向人的度量。
第2种分类是:生产率度量、质量度量、技术度量。
面向规模的度量
软件规模通常用代码行数来衡量。
面向规模的度量方便、直观,但是对于一些良好设计而代码量小的软件来说,这种度量不够客观。
面向功能的度量
信息域的值用下列方式来定义:外部输入数、外部输出数、外部查询数、内部逻辑文件数、外部接口文件数。
软件复杂性度量
软件复杂性的度量参数主要有:规模、难度、结构、智能度。
十、软件工具与软件开发环境
软件工具
软件开发工具有:需求分析工具、设计工具、编码与排错工具、测试工具等。
软件开发环境
软件开发环境的特征:
环境的服务是集成的。
环境应支持小组工作方式,并为其提供配置管理。
环境的服务可用于支持各种软件开发活动。
十一、软件工程标准化
基础标准
信息处理——程序构造及其表示法的约定 GB/T 13502-92
信息处理系统——计算机系统配置图符号及其约定 GB/T 14085-93
软件工程术语标准 GB/T 11457-89
软件工程标准分类法 GB/T 15538-95
开发标准
软件开发规范 GB8566-88
计算机软件单元测试 GB/T 15532-95
软件维护指南 GB/T 14079-93
文档标准
计算机软件产品开发文件编制指南 GB8567-88
计算机软件需求说明编制指南 GB/T 9385-88
计算机软件测试文件编制指南 GB/T 9386-88
管理标准
计算机软件配置管理计划规范 GB/T 12505-90
计算机软件质量保证计划规范 GB/T 12504-90
计算机软件可靠性和可维护性管理 GB/T 14394-93
信息技术、软件产品评价、质量特性及其使用指南 GB/T 16260-96
ISO9000:2000
ISO9000:2000族标准有14项标准,由4个核心标准、1个支持标准、6个技术报告、3个小册子组成。
ISO/IEC 15504过程评估标准
ISO/IEC 15504主要包括:概念和绪论指南、过程和过程能力参考模型、实施评估、评估实施指南、评估模型和标志指南、评估师能力指南、过程改进应用指南、确定供方能力应用指南、词汇。