上海西门子PLC模块授权一级代理商
捷方法的人(铸就了“敏捷”这一术语)为寻求共识汇聚一
尽管迭代开发有很多优点,但也不是没有问题。从管理的角度来看,增量方法存在两个问题:
(1)过程不可见。管理者需要通过经常性的可交付文档来把握进度,如果系统开发速度太快,要产生反映系统每个版本的文档就很不划算。
(2)伴随着新的增量的添加,系统结构在逐步退化。除非投入时间和金钱用在重构系统结构上以改善软件,否则定期的变更会损坏系统的结构。随着时间的推移,越往后变更系统越困难,而且成本也将逐步上升。瀑布开发的主早期迭代过程的思想是螺旋式开发和进化式开发。螺旋模型将瀑布模型与原型法模型结合起来,并且加入风险分析,构成具有特色的模式,弥补了前两种模型的不足。螺旋模型将工程划分为制定计划、风险分析、实施工程、用户评价四个主要活动。这四个活动螺旋式地重复执行,直到终得到用户认可的产品要不同点。增量式,系统是一次一段地增量构造,与演化式原型的大区别在于增量式开发是在软件总体设计基础上进行的。很显对于大型系统及软件的开发,螺旋模型是一种很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。但需要相当的风险分析评估的专门技术,且成功与否依赖于这种技术。很明显,一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化的方法失去控制。然,增量式对付变化比演化式差。
2.2.3 迭代式开发
在早期的软件开发中,客户愿意为软件系统的后完成等待很长时间。有时,从编写需求文档到系统交付使用会经过若干年,这段时间称为循环周期(cycle time)。但
的商业环境不会再容许长时间的拖延。软件使产品在市场上引人注目,而客户总是期待着更好的质量和新的功能。
一种缩短循环周期的方法是使用迭代式开发。在这种生命周期方法中,开发被组织成一系列固定的短期(如三个星期)小项目,称为一次迭代(iteration);每次迭代都产生经过测试、集成并可执行的局部系统。每次迭代都包括各自的需求分析、设计、实现和测试活限分明的独立阶段,这些活动以线性的方式顺序执行。这是一种计划驱动的软件过程,有利于规范软件开发活动。
(2)原型法模型主要用于解决需求不确定等问题。原型是一个部分开发的产品,通过原型实现对系统的理解,有助于明确需求和选择可行的设计策略。
(3)迭代式开发是将描述、开发和验证等不同活动交织在一起,通过在开发过程中建立一系列版本,将系统进行逐步的交付和演化,从而实现软件的快速交付。
(4)可转换模型是利用自动化的手段,通过一系列的转换将需求规格说明转化为一个可交付使用的系统。
这些模型相互并不排斥,而且经常一起使用,尤其是对大型系统的开发。对于大型系统,综合瀑布和迭代开发模型的优点是有意义的。系统核心需求的获取以及设计系统的软件体系结构以支持需求,这些是不能迭代式开发的。在更大的系统中,子系统的开发可以使用不同的开发方法。对于那些理解得很好的系统部分可以用基于瀑布模型的过程来描述与开发;而对于那些很难提取描述清楚的系统部分,如用户界面,就总是会用迭代式开发方法。
再次,在项目实施过程中,要检查和评价项目的总体进
个项目范围的变更,监控项目进展过程中出现的问题,并及时地纠正这些问题。
(2)软件配置管理
是通过版本的控制、变更的控制并使用合适的配置管理软件,来保证整个开发过程的所有产品配置项(例如代码、文档等)的完整性和可跟踪性。它主要包括四个基本活动。
① 版本管理是跟踪系统中每一个组件的多个版本,来保证开发者对组件的修改不会产生混乱。
② 系统的构建是把不同的组件进行编译、链接,组成了一个可执行的系统。
③ 变更管理是对开发过程中来自用户和开发者的开发请求进行分析和评估,做出适当的决策,决定是否变更和何时变更。
④ 当整个开发完成之后,发布版本管理。需要准备发布的软件,并对用户使用的软件进行持续的跟踪。
在设计完成之后,还需要通过编码活动把设计转换成为程序代码。这就要求程序员根据目标系统的性质和实际环境,选取一种适当的程序设计语言,把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。因此程序员需在理解系统模型的基础上编写代码,进行代码的审查和单元的测试。此外,还要进行代码优化,终要构建系统并且集成连接。这是一个复杂而迭代的过程。
(3)软件测试
在软件构造完成之后,还要对软件产品进行测试。软件测试主要是通过各种类型的测试及相应的调试,发现功能、逻辑和实现上的缺陷,使软件达到预定的要求,检查和验证所开发的系统是否符合客户期望。测试是有不同层次的,包括单元测试、子系统测试、系统的集期的每个阶段都采用科学的管理技术和良好的
方法,而且在每个阶段结束之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,这就使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。
软件过程是指软件生存周期中的一系列相关过程,是为了获得高质量软件而实施的一系列活动。它包括问题定义、需求开发、软件设计、软件构造、软件测试等一系列软件开发的实现活动,而每一项活动都会产生相应的中间制品。
1.定义阶段
任何一个软件产品,都起源于一个实际问题或者一个创意。当问题或创意提出之后,人们通过开展技术探索和市场调查等活动,来研究系统的可行性和可能的解决方案,从而确定待开发系统的总体目标和范围。因此,软件定义阶段主要是确定待开发的软件系统要做什件必须遵从人为的惯例并适应已有的技术和系统,随着接口的不同而改变。
(3)软件的可变性。软件经常会遭受到持续的变更压力。相对于建筑和飞机等工程制品来说,软件的变更似乎更加频繁,这也许是由于建筑和飞机修改成本太高所致。人们总是以为软件很容易修改,但是却忽视了修改带来的副作用。软件不断变化,每一次的修改都会造成故障率的升高,同时也可能给软件的结构带来破坏。尽管如此,成功的软件都是会发生演化的。软件的可变性,给开发带来了很多难题,但同时也给软件本身带来了生命力。
(4)软件的不可见性。软件是一种逻辑产品,看不见摸不着,它的客观存在不具有空间的形体特征,因此缺少合适的几何表达方式。这种不可见性,不制了软件的设计过程,同时严重地阻碍了人与人之间的相互交流,从而对开发过程的管理造成很大困难。