软件(程序、数据、文档)与编程、程序的关系和区别
阐述你对软件生命周期的时期阶段以及各个阶段任务的认识
软件具有的本质特性
1.软件工程关注于大型程序的构造
2.软件工程的中心课题是控制复杂性
3.软件经常变化
4.开发软件的效率非常重要
5.和谐地合作是开发软件的关键
6.必须有效地支持它的用户
7.两种背景的人创造产品这个特性与前两个特性紧密相关
软件过程三要素:方法、工具、过程
软件工程方法学包括传统方法学和面向对象方法学
传统方法学:也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用
特点:传统方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。 每个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准
在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审。 审查的一条主要标准就是每个阶段都应该交出“最新式的”(即和所开发的软件完全一致的)高质量的文档资料,从而保证在软件开发工程结束时有一个完整准确的软件配置交付使用
面向对象方法学:与传统方法相反,面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法
四个要点
1.把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件
2.把所有对象都划分成类(class)
3.按照父类与子类的关系,把若干个相关类组成一个层次结构的系统
4.对象彼此间仅能通过发送消息互相联系
优点:降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。 面向对象方法特有的继承性和多态性,进一步提高了面向对象软件的可重用性
软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段
软件定义时期的任务是: 确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又称为系统分析,由系统分析员负责完成
软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
软件开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现
软件维护时期的主要任务是使软件持久地满足用户的需要
瀑布模型一直是唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型
理想的瀑布模型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?实际的瀑布模型(带有反馈环)
特点
1.阶段间具有顺序性和依赖性--->解释:两重含义①必须等前一阶段的工作完成之后,才能开始后一阶段的工作; ②前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果
2.推迟实现的观点--->解释:瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现
3.质量保证的观点--->解释:软件工程的基本目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法。 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误
优点
1.可强迫开发人员采用规范的方法(例如,结构化技术)
2.严格地规定了每个阶段必须提交的文档
3.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证
快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集
优点:快速原型模型是不带反馈环的
增量模型也称为渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能
优点
1.能在较短时间内向用户提交可完成部分工作的产品
2.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击
缺点(使用增量模型的困难)
1.在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品
2.必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的
螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型
“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。迭代是软件开发过程中普遍存在的一种内在属性。用面向对象方法学开发软件时,工作重点应该放在生命周期中的分析阶段
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重复一系列组成软件生命周期的循环。每次循环都经历一个完整的生命周期,每次循环结束都向用户交付产品的一个可运行的版本。 每个阶段又进一步细分为一次或多次迭代过程
敏捷过程为了使软件开发团队具有高效工作和快速响应变化的能力,17位著名的软件专家于2001年2月联合起草了敏捷软件开发宣言。敏捷软件开发宣言由下述4个简单的价值观声明组成
1.个体和交互胜过过程和工具
2.可以工作的软件胜过面面俱到的文档
3.客户合作胜过合同谈判
4.响应变化胜过遵循计划
极限编程:极限编程(eXtreme Programming,XP)是敏捷过程中最富盛名的一个,其名称中“极限”二字的含义是指把好的开发实践运用到极致。 目前,极限编程已经成为一种典型的开发方法,广泛应用于需求模糊且经常改变的场合
极限编程的迭代过程
微软过程准则
项目计划应该兼顾未来的不确定因素
用有效的风险管理来减少不确定因素的影响
经常生成并快速地测试软件的过渡版本,从而提高产品的稳定性和可预测性
采用快速循环、递进的开发过程
用创造性的工作来平衡产品特性和产品成本
项目进度表应该具有较高稳定性和权威性
使用小型项目组并发地完成开发工作
在项目早期把软件配置项基线化,项目后期则冻结产品
使用原型验证概念,对项目进行早期论证
把零缺陷作为追求的目标
里程碑评审会的目的是改进工作,切忌相互指责
微软软件生命周期:规划阶段 设计阶段 开发阶段 稳定阶段 发布阶段
微软过程模型:微软过程的每一个生命周期发布一个递进的软件版本,各个生命周期持续、快速地迭代循环