传统的软件生命期(software life cycle)是指软件产品从形成概念(构思)开始,经过定义、开发、使用和维护,直到最后被废弃(不能再使用)为止的全过程。按照传统的软件生命周期方法学,可以把软件生命期划分为软件定义、软件开发、软件运行与维护三个阶段。
软件定义时期
需求分析该过程是非常重要的,应该由系统分析员、软件开发人员与用户共同完成,反复讨论和协商,并且逐步细化、一致化、完全化等,直至建立一个完整的分析模型。需求分析工作完成后要提交软件需求规格说明(Sofware Requirements Specification,SRS)。
软件开发时期
软件开发时期就是软件的设计与实现,可分成:
软件运行和维护
软件运行就是把软件产品移交给用户使用。软件投入运行后的主要任务是使软件持久满足用户的要求。
软件维护是对软件产品进行修改或对软件需求变化做出响应的过程,也就是尽可能地延长软件的寿命。
软件生存周期模型又称软件开发模型(software develop model)或软件过程模型(software process mndel),它是从某一个特定角度提出的软件过程的简化描述。软件过程模型的基本概念;软件过程是制作款件产品的一组活动以及结果,这些活动主要由软件人员来完成,软件活动主要如下一些:
瀑布模型(waterfall model)可以说是最早使用的软件生存周期模型之一。由于这个模型描述了软件生命的一些基本过程活动,所以它称为软件生命周期模型。
瀑布模型的特点是因果关系紧密相连,前一个阶段工作的结果是后一个阶段工作的输入。或者说,每一个阶段都是建筑在前一个阶段正确结果之上,前一个阶段的错漏会隐鼓地带到后一个阶段。
主要缺点:
原型模型又称为快速模型。主要有以下两个阶段:
螺旋模型(Spiral Model)是在快速原型的基础上扩展而成。也有人把螺旋模型归到快速原型。实际上,它是生命周期模型与原型模率的一个结合,这种模型将软件开发流程分为多个阶段,每一个阶段由4部分组成:
开发过程就是上面4个部分的迭代,每迭代一次,软件系统生成一个新的版本,这个版本实际上是对目标系统的的一个逼近。具体的过程如图:
该模型支持大型软件开发,适用于面向规格说明、面向过程和面向对象的软件开发方法,也适用于集中开发方法的组合。
近几年来,出现了以组件为基础的软件工程方法,基于构件组装的软件过程模型也随之产生并被广泛使用。
显然,一个系统将依赖构件的健壮性。但是毫无疑问,构件组装模型使软件可以重用,而重用给软件工程师提供了大量的好处。构件组装模型具有极其广阔的实用性和深远的意义。
面向对象技术自从问世后,很快被人们所接受,并得到广泛的应用。面向对象技术确实有很多的优点,其中构件重用是非常重要的技术之一。对象技术强调了类的创肆与封装,一旦一个类创建与封装成功,就可以在不同的应用系统中被重用。在这个模型中,一个系统可以由重用构件组装而成,甚至通过组装可重用的子系统而创建更大的系统,模型结构如图所示:
四代语言(4th Generation Language,4GL)是在大型数据库管理系统的基础上发展起来的程序设计语言。程序设计语言可分成机器语言、汇编语言、高级语言和第四代语言,以及为人工智能领域应用而设计的语言——第五代语言。
四代语言的定义
四代语言主要特征描述
以4GL, 为核心的软件开发技术称为四代技术。使用四代技术可以给我们带来许多方便,在软件开发的时间、成本和质量等方面都会取得较好的效果,但它毕竟在系统开发全过程中应用有限。
敏捷方法和传统方法相比,敏捷方法比较适合需求变化比较大或者开发前期需求不是很清晰的项目,以它的灵活性来适应需求的变化,有效地控制项目进度和成本。另外,敏捷方法对设计者、开发者和客户之间的有效沟通和及时反馈要求比较高,所以不易在开发团队比较庞大的项目中实施,当然这也不是绝对的。
4个核心价值观分为:
依据敏捷方法的 4个核心价值观,提出 12 条过程实践规则,分别为:
Ratiomal 表示 RUP 是由 Rational 公司提出的,Unified表示 RUP 是最佳开发经验总结,而 Procsg 表示 RUP 是一个软件开发过程。
RUP吧软件声明周期划分为多个循环(cycle), 每个cycle生产产品的一个新的版本,依次分为四个阶段:
每一个阶段都由一个或多个连续的迭代(iteration)组成。迭代并不是重复地做相同的事,而是针对不同用例的细化和实现。每一个迭代都是一个完整的开发过程,它需要项目经理根据当前迭代所处的阶段以及上次迭代的结果,适当地对核心工作流中的行为进行裁剪。在每个阶段结束前有一个里程碑(milestone)评估该阶段的工作。如果未能通过该里程碑的评估,则决策者应该做出决定,是取消该项目还是继续做该阶段的工作。
即 RUP 是用例驱动的、以体系结构为中心的、迭代和增量的软件开发过程。
软件采用迭代和增量的方式有以下好处:
针对一个软件项目,RUP裁剪可以分为以下几步:
通常可以按软件过程活动将软件工具分为 :
编码工具和排错工具用以辅助程序员进行编码活动。编码工具辅助程序员用某种程序语言编制源程序,并对源程序进行翻译,最终转换成可执行的代码,因此编码工具通常与编码所使用的程序语言密切相关。
编码工具
主要有编辑程序、汇编程序、编译程序和生成程序
排错工具
已有的排错工具主要有源代码排错程序和排错程序生成程序两类。
软件维护工具
软件维护工具主要有:
软件管理和软件支持工具
常用的工具有:
软件开发工具的评价和选择的衡量标准
软件需求开发的最终文档经过评审批准后,则定义了开发工作的需求基线(baseline)。这个基线在客户和开发者之间构筑了计划产品功能需求和非功能需求的一个约定(agreement)。需求约定是需求开发和需求管理之间的桥梁。需求管理的主要活动如图所示:
需求管理强调:
过程能力成熟度模型(Capability Maturity Model,CMM)在软件开发机构中被广泛用来指导软件过程改进。该模型描述了软件处理能力的5 个成熟级别。为了达到过程能力成熟度模型的第二级,组织机构必须具有6个关键过程域(Key Process Area,KPA)。
在软件开发过程中,可能出现测试人员使用已过时的软件规格说明,结果发现了—大堆的错误,为了避免这种情况的发生,需求规格说明的版本暂理就翼得非常重要了。版本控制管理需求的一个必要方面,是必须要统一确定需求文档的每一个版本。
除了文本,每一个功能需求应该有一些相关的信息与它联系,我们把这些信息称为需求属性。对于一个大型的复杂项目来说,丰富的属牲类别显得尤为重要。在文档中,明确考虑和明确如下的属性:
软件需求文档应该精确地描述要交付的产品,这是一个基本的原则,为了能够使开发组织能够严格的控制软件项目,应该确保如下事项:
变更控制过程
我们可以参考以下的需求变更策略:
在实际中,人们总是希望使用自动工具来执行变更控制过程。问题跟踪工具也可以随时按照变更状态分类报告变更请求的数目,挑选工具可以考虑以下几个方面:
变更控制委员会
一个有效率的变更控制委员会定期地考虑每个变更请求,并且基于由此带来的影响和获益做出及时地决策。变更控制委员会只要能决定合适的人做正确的事就足够了,不必追求大而全。变更控制委员会可能包括如下方面的代表:
跟踪能力联系链记录了单个需求之间的父层、互相连接和依赖的关系。当某个需求变更(被删除或修改)后,这种信息能够确保正确的变更传播,并将相应的任务做出正确的调整。一个项目不必拥有所有种类的跟踪能力联系链,要根据具体的情况调整。
"变更是免费的"这种误解是造成项其范围延伸的主要原因之一。影响分析是需求管理的一个重要组成部分。影响分析可以提供对建议的变更的准确理解,帮助做出信息量充分的变更批准决策。
范围
范围定义的输入包括以下的内容:
时间
项目时间管理包括按时完成所必须的管理过程。项目提出后比较明确的一般只是项目的目标,为了使得项目目标得以实现并且制订出比较完善的项目进度计划,则在对项目进行分解的基础上还必须对分解出的目标进行定义,只有这样才能使目标更明确,因此对活动的定义是非常必要的。
成本
它包括在批准的预算内完成项目所需要的诸过程,主要有如下一些。
项目成本管理这种广义的观点常被称为“全生命周期成本计算”。为保证项目能够完成预定的目标,必须要加强对项目实际发生成本的控制,一旦项目成本失控,就很难在预算内完成项目,不良的成本控制常常会使项目处于超出预算的危险境地。可是在项目的实际实施过程中,项目超预算的现象还是屋见不鲜。
配置管理
配置管理在项目管理中具有重要的地位和作用。近年来,信息系统项目的规模越来越大,复杂性越来越高;管理上的失误给我们的教训也越来越深刻。这都使得人们不得不重视配置管理问题。配管理是过按术和行政手段对产品及其开发过程和生命周期进行控制、规范的一系列措施和过程。
文档管理
总的来说,软件文档应该满足下述要求:
用户文档
用户文档是用户了解系统的第一步,它可以让用户获得对系统的准确的初步印象。用户文档至少应该包括下述 5方面的内容:
系统文档
所谓系统文档指从向题定义、需求说明到验收测试计划这样一系列和系统实现有关的文档。描述系统设计、实现和测试的文档对于理解程序和维护程序来说是非常重要的。
ISO9000 对项目质量的定义是∶一组固有特性满足需求的程度。需求指明示的、通常隐含的或必须履行的需求或期望。特性是指可区分的特征,可以是固有的或赋予的、定性的或定量的、有各种类别(物理的、感官的、行为的、时间的、功能的等)。
质量与范围、成本和时间是项目成功的关键因素。
项目风险是一种不确定的事件或条件,一旦发生,会对项目目标产生某种正面或负面的影响。对项目风险进行管理,国际上已经成为项目管理的重要方面。如世界银行对每一个贷款项目都进行风险分析,制定风险管理计划,写在有关的文件之中,并付诸行动。
何谓结构程序设计,目前尚无定论,较流行的定义为;绪构程序设计是程序设计技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制构件。程序设计结构一般可以定义为:顺序结构、分支结构和循环结构。随着面向对象、软件重用等新的软件开发方法和技术的发展,更现实、更有效的开发途径可能是自顶向下和自底向上两种方法有机的结合。
面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成。面向对象的软件设计流程如下图所示:
软件元素包括需求分析文档、设计过程、设计文档、程序代码、测试用例和领域知识等。标准函数库是一种典型的、原始的横向重用机制。因为,在两个截然不同的应用领域之间实施软件重用的潜力不大,所以纵向重用才广受瞩目,并成为软件重用技术的真正希望所在。不难理解,纵向重用活动的主要关键点即是域分析,根据应用领域的特征及相似性预测软部件的可重用性。软件重用方法如图所示:
使用重用技术可以减少软件开发活动中大量的重复性工作,这样就能够提高软件生产率,降低开发成本,缩短开发周期。同时,由于软部件大都经过严格的质量认证,并在实际运行环境中得到检验,因此重用软部件有助于改善软件质置。此外,大量使用软部件,软件的软件逆工程灵活性和标准化程度也可望得到提高。
逆向工程与重构工程是目前预防性维护采用的主要技术。一般认为,凡是在软性生命周期内将软件某种形式的描述转换成更为抽象形式的活动都可称为逆向工程。
恢复信息的级别
逆向工程导出的信息可以分为如下4个层次:
恢复信息的方法
在逆向工程中用于恢复信息的方法有 4 类:
尽管每个软件组织都可能有数百万行代码可供重构,但由于缺乏时机和支持工具或者因为经济上得不偿失,往往只有那些决定或移植、或重新设计、或为重用而需验证正确性的程序才被选择实施逆向工程。