VRML虚拟现实应用技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1.3 软件渐进式开发模型

渐进式软件项目开发模型吸收了瀑布开发模型和原型开发模型的优点,但剔除了瀑布和原型开发模型的不足。瀑布开发模型开发到中后期时关键技术和需求缺陷才暴露出来,从而造成软件项目开发延期、重做或失败。在软件项目开发的测试阶段发现错误或重大错误而导致开发项目失败的事例屡见不鲜。在3万个失败项目中,统计结果表明该软件项目有45%的需求分析是无用的。

原型开发模型虽然能够解决瀑布开发模型中的不足,但它本身也存在着缺陷,那就是创建原型样板产品时要抽入一定的开发成本。当原型样本产品使用完后,该原型样板产品就作废,不能直接应用到软件项目的开发中,从而造成了原型样板产品开发的浪费。

渐进式软件项目开发模型的特点是,在每一个开发阶段的软件产品,既是与用户交流和沟通的演示产品,又是软件开发项目的目标产品,因此,可在交流中不断完善目标软件产品,直到用户满意为止。按照这种策略,像“滚雪球”一样,在分析、沟通和交流中开发软件项目,循序渐进,循环开发,一直到完成整个软件项目的全部开发工作。渐进式软件项目开发模型如图2-3所示。

图2-3 渐进式软件项目开发模型

渐进式软件项目开发模型是目前最先进、最优秀的软件工程项目开发模型。它的开发分为两个阶段:第一阶段是开发者与用户(客户)初期合作,随时与用户沟通和交流,需用4~5个周期(一个周期为2~3 周)的时间来进行从需求分析到编码,再到测试的全过程,以完成初步项目开发任务;第二阶段是在第一阶段的基础上,如果双方不能继续合作,则可以取消该项目的开发工作,如果双方能够继续合作,则可以把该项目按此开发方式循序渐进地开发完成。

在渐进式软件项目开发模型开发过程的第一阶段中,软件开发人员根据用户初步需求对一个或多个模块进行设计、编码和测试,产生目标软件产品(初始版本),将该产品交与用户演示并反复交流和沟通,以提出新的补充需求,并对初级软件产品进行修改、补充和完善,直到用户满意为止,形成最终软件产品(一个或多个模块)。

在第一阶段规定的时间内,解决软件项目开发的关键技术并使用户满意而双方达成一致,签好软件项目开发合同,再进行第二阶段的真正实质性的软件项目开发工作。这样,第一阶段的软件开发工作投入就没有白做,可在第一阶段工作的基础上继续进行该项目的软件开发工作。随着软件项目开发的不断进展及软件产品的不断生产、测试和集成,就会像“滚雪球”一样,将软件产品逐渐生产积累起来,最终完成全部软件项目的开发工作。

软件项目渐进式开发模型的策略如下所述。

1)完成软件开发的范围(Scope)

在每次提出新的需求过程中,要确定在每个周期内完成多少任务,根据实际开发进度完成情况进一步调整所要完成任务的多少。

2)软件开发的质量(Quality)

每个周期内根据需求所完成的软件开发一定是正确的。

3)软件开发的成本及资源(Cost/Resource)

软件项目开发中使用的硬件、软件、人力资源的合理分配。

4)软件项目开发时间(Time)

如何在有效的4~5个周期的时间内完成90%的任务,而且完成的任务一定是正确的。

5)软件项目自动测试(Automatic Test)

这是最终完成项目开发的技术保证,利用测试工具软件或将用户需求写在测试程序中,来检验所开发的每一个程序中的每一条语句代码的正确性,以确保开发出来的全部程序的正确性。

在软件项目开发初期,双方在完成软件项目开发任务的同时,还要保证软件的开发质量、成本及交货期。在软件项目开发初期,既不能延误软件项目的开发时间,也不能降低软件开发质量,更不能增加软件项目开发成本,只能减少在软件开发范围中的任务数量,以保证软件项目的开发质量、成本和开发时间。

在运用渐进式开发模型对大、中型软件项目进行开发时,开发者与用户要签证合同。开发过程一般分为两个阶段。第一阶段为4~5个周期的(一个周期为2~3周)时间,开发时间和费用是固定不变,开发的时间较短,投资费用较少,并且开发的产品不是演示demo产品,而是实际产品。第二阶段双方再提出该软件项目下一步开发的造价、费用、成本及时间,如果双方不能达成共识,则该项目的开发到此结束;如果双方能够达成共识,该项目可以签署第二阶段合同,继续开发,一直到完成整个项目的全部开发任务。这样做的目的是减少双方的投资风险,使双方在第一阶段结束时,对该项目的成败又多提供了一次决策的机会。因为第一阶段用户投入较少费用和时间,所以,如果不成功,双方损失都不大,如果成功可以继续合作,前期工作又不浪费。

渐进式(“滚雪球”式)软件项目开发模型如图2-4所示。

在渐进式软件项目开发的全过程中,为保证软件项目开发质量,常采用以下技术手段。

图2-4 渐进式软件项目开发模型

1)绝对编程技术

利用两个一组进行编程的开发方法,一个人编程,另一个人监督检查,以提高编程质量,减少差错和故障率。每一个程序员在编写自己的软件程序时,对自己编写的软件程序是有“感情”的,总是认为自己编写的程序是“正确”的。因此,要对源程序进行换人校对、检查,才能更有效地查出程序错误和故障点。

2)自动测试技术

利用测试工具软件将用户需求写在测试程序中,来检验所开发的每一个程序中的每一条语句代码的正确性,以确保软件项目开发出来的全部程序的正确性。

3)先测试后设计

在软件项目开发前,先编写测试程序,后开发应用程序。要把用户的需求写到测试程序中,测试程序要求简单、明了、不出错。测试程序与实际程序一一对应,形成完善的自动调试机制,从而使测试编程自动化。

4)简单编程

在软件项目开发过程中,少用或不用编程技巧,即用最简单、最直接的方法编程和设计,以减少编程的复杂度,提高编程的质量和效率。

5)组件技术

这是指将软件“硬件”化,把软件模块(组件)看成各自独立“集成模块”,不管内部设计、结构如何,只关心“组件”的功能和接口。这样在使用软件组件时,先考虑软件组件的功能及接口,然后再将其集成到所开发的系统中。

软件开发团队可以自己开发一些通用的软件组件,并通过实践验证其是否为正确的软件组件;也可以购买一些商用的通用软件组件,以减少开发量,提高软件项目开发速度。但在购买商用的通用软件组件时,要注意选择一家资质比较好的公司来购买通用软件组件。购买商用的通用软件的优点是:商用的通用软件组件维护、升级都由卖方公司负责,从而减少商用的通用软件的维护和管理费用。在购买商用的通用软件组件时,不要贪图便宜而到多家软件公司购买不同的商用通用软件组件,一旦购买的商用通用软件组件出现故障或错误,会出现各家公司“扯皮”现象,互相推诿,推卸责任,而造成不必要的麻烦。

6)软件重用技术

这是提高软件开发质量、效率的有效手段。软件重用主要指它的易用性、有用性(可用性)和广泛性。可重用技术产品包括可执行代码重用、源代码重用、设计重用、需求规范重用、测试数据重用、文档重用、软件架构重用等。

在现在软件项目开发中,软件组件、特定领域组件及编写代码的比例为:通用成分组件占20%,特定领域组件占65%,应用特定代码占15%。通过分析可知,在软件项目开发中利用软件重用技术可以减少软件开发的工作量,降低成本和提高软件项目的开发效益。

保证软件项目开发质量需着重考虑的因素包括功能性、可靠性、易用性、效率、可维护性及可移植性等。

1)功能性(Functionality)

在软件项目开发中,首先要保证用户提出的功能需求,其次要按功能需求划分为各种功能模块、组件进行分析、设计和编程,最后将各种模块和组件进行集成测试。

2)可靠性(Reliability)

这是指软件产品使用中的故障率,故障率低说明开发的软件产品质量优异;反之,软件质量次之。

3)易用性(Usability)

这是指为了方便用户使用,在软件项目开发过程中为用户设计良好的用户界面,采用可视化、三维立体场景进行编程设计,以便于用户使用和操作。

4)效率(Efficiency)

这是指计算机资源利用率,包括人力、硬件、软件及网络资源利用效率。在软件设计方面,效率的提高可能会影响其他一些性能指标,例如,影响到可移植性、可靠性和维护性等。

5)可维护性(Maintainability)

这是指软件在运行和使用期间的可修改性,以及对运行环境的适应能力,主要表现为该软件系统可以方便地维护、修改和扩充,有很强的适应性。可维护性能力的增强会影响到效率。

6)可移植性(Portability)

这是指软件产品在不同环境平台上所具有的适应能力,对不同计算机硬件的适应能力及对软件操作系统的适应能力。软件产品不加任何修改就可以移植到不同机器和操作系统中,便是移植性最好的软件项目系统。