考试相关
知识点概述
软件危机
软件危机的概念
在计算机软件的开发和维护过程中所遇到的一系列严重问题
软件和程序的关系与区别
软件的概念:软件是包括程序,数据及其相关文档的完整集合
程序是能够完成预定功能和性能的可执行的指令序列
数据是使程序能够适当地处理信息的数据结构
文档是开发、使用和维护程序所需要的图文资料
软件工程
软件具有的本质特性
1.软件工程关注于大型程序的构造
2.软件工程的中心课题是控制复杂性
3.软件经常变化
4.开发软件的效率非常重要
5.和谐地合作是开发软件的关键
6.必须有效地支持它的用户
7.两种背景的人创造产品这个特性与前两个特性紧密相关
软件过程三要素:方法、工具、过程
软件工程方法学包括传统方法学和面向对象方法学
传统方法学:也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用
特点:传统方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。 每个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准
在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审。 审查的一条主要标准就是每个阶段都应该交出“最新式的”(即和所开发的软件完全一致的)高质量的文档资料,从而保证在软件开发工程结束时有一个完整准确的软件配置交付使用
面向对象方法学:与传统方法相反,面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法
四个要点
1.把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件
2.把所有对象都划分成类(class)
3.按照父类与子类的关系,把若干个相关类组成一个层次结构的系统
4.对象彼此间仅能通过发送消息互相联系
优点:降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。 面向对象方法特有的继承性和多态性,进一步提高了面向对象软件的可重用性
软件生命周期
软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段
软件定义时期的任务是: 确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又称为系统分析,由系统分析员负责完成
软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
软件开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现
软件维护时期的主要任务是使软件持久地满足用户的需要
八个阶段
每个阶段的参与角色
问题定义:用户、系统分析员
可行性研究:系统分析员
需求分析:用户、系统分析员
总体设计:软件工程师、用户
详细设计:软件工程师(不确定)
编码和单元测试:程序员
综合测试:程序员、用户
每个阶段的主要任务、主要工具、方法和技巧
问题定义
主要任务:确定要解决的问题(即回答要解决的问题是什么)
主要工具、方法和技巧:通过对用户的访问调查,设计关于问题性质、工程目标和工程规模的书面报告
可行性研究
主要任务:确定上一阶段的问题是否有行得通的解决办法
主要工具、方法和技巧:进行系统分析和设计过程
需求分析
主要任务:确定目标系统必须具备哪些功能,用正式文档记录对目标系统的需求(规格说明书)
主要工具、方法和技巧:与用户交流设计出系统逻辑模型(通常用数据流图、数据字典和简要的算法表示系统的逻辑模型)
总体设计
主要任务:确定如何实现目标系统,设计程序的体系结构(即确定程序由哪些模块组成及模块间的关系)
主要工具、方法和技巧:设计出实现目标系统的几种可能的方案,并推荐出最佳方案,制定实现关于该方案的详细计划
详细设计
主要任务:把解法具体化,设计出程序的详细规格说明(即应该怎样具体地实现这个系统),在该过程中会详细地设计每个模块
主要工具、方法和技巧:设计程序的详细规格说明(程序员可据此写出实际代码)
编码和单元测试
主要任务:写出正确易理解易维护的程序模块
主要工具、方法和技巧:选取高级编程语言(必要时用汇编语言)将详细设计的结果翻译为程序,并对模块进行仔细测试
综合测试
主要任务:通过各种类型的测试使软件达到预定的要求
主要工具、方法和技巧:进行集成测试和验收测试,集成测试是在模块装配过程中对程序进行必要的测试,验收测试是由用户对目标系统进行验收
每个阶段的文档与评审(质检环节)
软件过程
瀑布模型
瀑布模型一直是唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型
理想的瀑布模型 实际的瀑布模型(带有反馈环)
特点
1.阶段间具有顺序性和依赖性—>解释:两重含义①必须等前一阶段的工作完成之后,才能开始后一阶段的工作; ②前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果
2.推迟实现的观点—>解释:瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现
3.质量保证的观点—>解释:软件工程的基本目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法。 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误
优点
1.可强迫开发人员采用规范的方法(例如,结构化技术)
2.严格地规定了每个阶段必须提交的文档
3.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证
补充:是规范的、文档驱动的方法
缺点
1.瀑布模型是由文档驱动的,缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题,这是瀑布模型最突出的缺点
2. 模型的风险控制能力较弱。成品时间长;体系结构的风险和错误只有在测试阶段才能发现,返工导致项目延期
3.软件活动是文档驱动的,文档过多会增加工作量,文档完成情况会误导管理人员
适应场合:瀑布模型只适合于需求明确的软件项目
快速原型模型
快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集
优点
快速原型模型是不带反馈环的(主要优点)
有助于增进软件人员和用户对系统服务需求的理解
提供了一种有力的学习手段
容易确定系统的性能、服务的可应用性、设计的可行性和产品的结果
原型的最终版本可作为最终产品或最终系统的一部分
缺点
文档容易被忽略
建立原型的许多工作会被浪费掉
项目难以规划和管理
适应场合
适用于需求不明确的软件项目
增量模型
增量模型也称为渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能
优点
1.能在较短时间内向用户提交可完成部分工作的产品
2.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击
补充:可在软件开发的早期阶段使投资获得明显回报和较易维护
缺点(使用增量模型的困难)
1.在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品
2.必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的
适应场合
适用于需求经常改变的软件开发过程
螺旋模型
螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型
优点
灵活性,可以在项目的各个阶段进行变更,计算变得简单容易;客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性
缺点
需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失;会增加开发成本,延迟提交时间
适应场合
螺旋模型只适合于内部开发的大型软件项目
喷泉模型
“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。迭代是软件开发过程中普遍存在的一种内在属性。用面向对象方法学开发软件时,工作重点应该放在生命周期中的分析阶段
优点
其优点是可以提高软件项目开发效率,节省开发时间
补充:较好地体现了面向对象软件开发过程无缝迭代的特性
缺点
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况
适应场合:适应于面向对象的软件开发过程
Rational统一过程
Rational统一过程(Rational Unified Process,RUP)是由Rational软件公司推出的一种完整而且完美的软件过程。 RUP总结了经过多年商业化验证的6条最有效的软件开发经验,这些经验被称为“最佳实践”
最佳实践
1.迭代式开发:迭代式开发允许在每次迭代过程中需求都可以有变化,这种开发方法通过一系列细化来加深对问题的理解,因此能更容易地容纳需求的变更
2.管理需求:RUP描述了如何提取、组织系统的功能性需求和约束条件并把它们文档化
3.使用基于构件的体系结构:RUP提供了使用现有的或新开发的构件定义体系结构的系统化方法,从而有助于降低软件开发的复杂性,提高软件重用率
4.可视化建模:可视化建模语言UML紧密地联系在一起,在开发过程中建立起软件系统的可视化模型,可以帮助人们提高管理软件复杂性的能力
5.验证软件质量:软件质量评估不再是事后型的或由单独小组进行的孤立活动,而是内建在贯穿于整个开发过程的、由全体成员参与的所有活动中
6.控制软件变更:RUP描述了如何控制、跟踪和监控修改,以确保迭代开发的成功
RUP软件开发生命周期是一个二维的生命周期模型
图中纵轴代表核心工作流,横轴代表时间
RUP中有9个核心工作流,其中前6个为核心过程工作流程,后3个为核心支持工作流程
RUP把软件生命周期划分成4个连续的阶段。每个阶段都有明确的目标,并且定义了用来评估是否达到这些目标的里程碑。每个阶段的目标通过一次或多次迭代来完成
初始阶段: 建立业务模型,定义最终产品视图,并且确定项目的范围
精化阶段: 设计并确定系统的体系结构,制定项目计划,确定资源需求
构建阶段: 开发出所有构件和应用程序,把它们集成为客户需要的产品,并且详尽地测试所有功能
移交阶段: 把开发出的产品提交给用户使用
RUP迭代式开发:RUP重复一系列组成软件生命周期的循环。每次循环都经历一个完整的生命周期,每次循环结束都向用户交付产品的一个可运行的版本。 每个阶段又进一步细分为一次或多次迭代过程
优点
1. RUP是建立在非常优秀的软件工程原则基础上的,例如迭代,需求驱动,基于结构化的过程开发。
2. RUP提供了几个方法,例如每一次迭代产生一个工作原型,在每一个阶段的结束决定项目是否继续,这些方法提供了对开发过程的非常直观的管理。
3. rational公司已经并将继续对RUP进行开发,使这个基于html的软件工程能够被裁减以适合你的组织的实际需要
补充:提供了理想开发环境下软件过程的一种完整而且完美的模式,可以作为对一个项目进行软件开发的良好开端
缺点
1. RUP仅仅包含了开发过程。它没有完全覆盖软件过程,它丢失了维护和技术支持这两个重要的阶段
2. RUP不支持组织内的多项目开发,导致组织内的大范围的重用无法实现
3. RUP缺少开发商的支持。你能自动完成软件过程的每一个方面?rational提供了所有的工具供你选择,例如是否有rational help desk或者rational persistence modeling
4. RUP在度量管理,重用管理,人员管理和测试上有缺陷
适应场合:适应于面向对象的软件开发过程
敏捷过程和极限编程
敏捷过程为了使软件开发团队具有高效工作和快速响应变化的能力,17位著名的软件专家于2001年2月联合起草了敏捷软件开发宣言。敏捷软件开发宣言由下述4个简单的价值观声明组成
特点
1.个体和交互胜过过程和工具
2.可以工作的软件胜过面面俱到的文档
3.客户合作胜过合同谈判
4.响应变化胜过遵循计划
极限编程:极限编程(eXtreme Programming,XP)是敏捷过程中最富盛名的一个,其名称中“极限”二字的含义是指把好的开发实践运用到极致。 目前,极限编程已经成为一种典型的开发方法,广泛应用于需求模糊且经常改变的场合
极限编程的迭代过程
优点
具有对变化和不确定性的更快速、更敏捷的反应特性
缺点
作为软件过程模型,不如RUP全面和完整
适应场合:适应于面向对象的软件开发过程
微软过程
微软过程准则
项目计划应该兼顾未来的不确定因素
用有效的风险管理来减少不确定因素的影响
经常生成并快速地测试软件的过渡版本,从而提高产品的稳定性和可预测性
采用快速循环、递进的开发过程
用创造性的工作来平衡产品特性和产品成本
项目进度表应该具有较高稳定性和权威性
使用小型项目组并发地完成开发工作
在项目早期把软件配置项基线化,项目后期则冻结产品
使用原型验证概念,对项目进行早期论证
把零缺陷作为追求的目标
里程碑评审会的目的是改进工作,切忌相互指责
微软软件生命周期:规划阶段 设计阶段 开发阶段 稳定阶段 发布阶段
微软过程模型:微软过程的每一个生命周期发布一个递进的软件版本,各个生命周期持续、快速地迭代循环
特点
微软过程可以看作是RUP的一个精简配置版本,还可以看作是敏捷过程的一个扩充版本
适应场合:适应于面向对象的软件开发过程