6.面向对象(OO)生存期模型
随着OO技术的逐渐成熟,人们又提出了OO软件工程生存期开发模型。
OO开发与传统的结构化生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期。所以有人称OO生存期模型为喷泉模型(fountain model),就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。
实际应用中大多把OO技术与传统的结构化技术搀和或搭配起来,创造出多种混合开发生存期,这是考虑到当前在传统的结构化技术上大量投资、经验很多、人员比较熟悉而OO技术还不尽完善的现实。
7.基于构件的软件开发
基于构件的软件开发(CBD)方法是在软件重用技术和OO技术基础上发展起来的。前述六种开发模式都是面向过程的,而CBD则是第一个面向产品结构的。
二、 统一的软件开发过程
统一过程是基于构件的,它使用新的可视化建模标准和统一的建模语言(UML),并依靠3个关键思想——使用用例驱动(Use-Case Driver),以体系结构为中心(Architecture-Centric)和迭代与增量(Iterative and Incremental)开发。为了按这些思想工作,就要求构建多种过程,人们要考虑周期(cycles)、阶段(phases)、工作流程(work flows)、风险缓解(risk mitigation)、质量控制(quality control)、项目管理(project management)以及配置管理(configuration control)等各个项目。这样统一过程构造的框架才能把上述所有的不同方面集成起来。
这种框架的所有工作如同一张保护伞,在它的下面,工具商和开发者能够创造出各种不同的工具,以支持过程的自动化,支持各个工作流,建立所有不同的模型,并围绕生存期和所有模型一体化的工作。
1.使用用例驱动
使用用例驱动是Ivar Jacobson在他1994年出版的《Object-Oriented Software Engineering》一书中首先提出来的,这其中主要有三个理由:
能够提供一个系统和直觉捕捉功能需求的方法。也就是说可以捕捉有价值的用户需求,解决“做什么”,并成为弄清需求用户目标和系统交互功能的起点。引入使用用例的概念是OO技术进入第二代的标志。
能驱动整个开发过程。因为许多活动(如分析、设计和测试)的完成都是从使用用例开始,也就是说使用用例可以导出过程,一个开发项目是从使用用例中一系列的工作流着手的。使用用例可以帮助开发者找到类和开发出用户接口。
可以帮助开发者完成迭代开发。一个项目的每次迭代都是通过使用用例的工作流作为驱动的,在一次增量中完成从需求、设计到测试的一系列工作;另一方面,在每次迭代中一定数量的使用用例是不可缺少的。
另外,使用用例还可以帮助设计体系结构、书写用户手册等。
2.以体系结构为中心
这是在统一的软件开发过程的生存期模型中第一次提出来的,是过去所有生存期模型所没有的。那么,为什么要以体系结构为中心呢?
一个软件系统的开发只凭想像是困难的,因为它并不存在于人的三维世界中,是没有前例的或在一些方面是异乎寻常的。经常使用没有被验证过的方法或一种新提出的混合方法,有时虽可以扩展现有技术,但也是非常有限的,此外还必须建立一个能适应可进一步修改的庞大的类。由此可以看出,结构的设计问题已远远超出了计算的算法和数据结构,而定义和设计整个系统的体系结构将成为一个新的课题。
此外,通常现有的一些系统一般都完成了“建议系统”的某些功能,显示出系统能够做哪些工作,但只有很少的文档,甚至没有文档,所以开发者可以重用的仅仅是传统的代码,所有这些都将增加开发的复杂性。因此,开发一个软件系统,特别是一个庞大的和复杂的软件系统,需要一个体系结构,这样开发者才能朝着共同的目标去工作。这样做的目的是:懂得系统、组织开发、促进重用、发展系统。
3.迭代和增量开发
迭代和增量开发最早是在OO生存期模型中提出的,大家比较熟悉。我们之所以必须采用迭代和增量的开发方法,其主要目的是控制软件的开发,这种方法的好处包括:
早期致命的和重大的风险能得到控制。
得到一个健壮(robust)的体系结构,以指导软件开发。
提供一个框架,能较好地控制不可避免的需求和其他修改。
构建一个系统,多次增量接近比一次完成所带来的各种开销少,而且质量好。
提供一个开发过程,让技术人员工作更为有效。
让开发人员能获得早期学习的机会。
统一的软件开发过程是软件生存期模型发展迄今为止的里程碑,它集中了所有生存期模型的优点。当然,要把这种方法实施还需要开发大量的相应工具和环境,如果没有工具和环境的支持,只能说是纸上谈兵。
软件开发过程
软件工程是由硬件工程派生出来的,它包含四个关键元素:方法,提供了构造软件的技术;语言,用以支持软件的分析、设计和实现;工具,为方法和语言提供自动化或半自动化的支持;软件工程的过程,是粘结剂(glue),把方法、语言和工具结合在一起,它能使软件开发理性化和适时化。过程定义了方法使用的顺序、可交付产品(文档、报告和格式等)的要求、确保质量和修改的控制,并使软件管理人员能对它们的进展进行评价。
软件工程由一系列的方法、语言、工具和过程的步骤所组成,这些步骤通常叫做软件工程模式(paradigms),有的叫做软件生存期模型(life cycle model),也有的叫做软件开发过程(development process)。