软件开发方法演变的几个主要因素

2018-05-17 09:21:42

软件开发方法一直在不断地发生着演变。自从 1968 年提出软件工程的概念后 , 人们就开始重视软件 开发方法的研究, 先后推出了许多软件开发方法, 例如 :被人们广泛采用的结构化软件开发方法和面向对 象软件开发方法, 以软件复用为特征的基于构件的软件开发方法〔1〕 , 强调适应变化、强调以人为中心的敏 捷软件开发方法〔2, 3〕 ,以体系结构为中心 、用例驱动、迭代与增量结合为特点的基于 RUP 的软件开发方 法〔4〕 ,基于数学的形式化软件开发方法〔5〕 , 针对嵌入式系统的软件开发方法〔6〕 , 代表未来发展方向的面向 Agent 的软件开发方法〔7〕 , 等等 。

哪些因素在促使软件开发方法演变呢 ?

从人的主观因素来看 :起初人们研究软件开发方法的目的是为了解决软件危机 ,软件危机得到缓解之 后, 人们研究软件开发方法的目的是为了提高软件开发的效率、降低软件开发和维护的成本 、保证软件的 质量和可靠性 。为了实现以上目的 ,在研究软件开发方法时 ,需要人们改变传统的观念和采用新的思维方 式, 需要人们借鉴其它工程领域的成功经验和有效方法。而当人们改变了传统的观念、采用了新的思维方 式、借鉴了其它工程领域的成功经验和有效方法之后 ,势必导致软件开发方法发生演变 。

从外界的客观因素来看 :随着计算机应用的普及和深入, 不断出现需要计算机处理的新问题和新领 域, 例如 :软件规模增大、软件复杂性增强、软件可靠性要求提高 、新系统(如嵌入式系统)的出现、开发工具 的更新 、互联网的快速发展, 等等 。对于解决新问题和应用于新领域所需要的计算机软件 , 原有的软件开 发方法无法胜任, 迫使人们改进原有的软件开发方法 、推出新的软件开发方法 。

下面对促使软件开发方法演变的几种主观因素和客观因素进行分析, 然后根据分析的结果, 对构建新 的软件开发方法的思路进行研究 。

、对促使软件开发方法演变的主要因素的分析

(一)观念转变和思维创新促使软件开发方法演变

软件工程概念提出之前 ,人们认为软件开发就是编写程序, 这种观念导致将软件开发方法的研究局限 于编写程序方法的研究范围内。我们将软件工程概念提出之前出现的软件开发方法称为初级的软件开发 方法 ,将软件工程概念提出之后出现的软件开发方法称为高级的软件开发方法 。显然初级的软件开发方 法考虑问题过于简单化(这与早期的软件规模比较小 、复杂度比较低有关系), 没有重视编写程序之外的其 它软件开发环节 ,这是产生软件危机的一个重要原因 。软件生命周期理论提出后, 人们的观念发生了转 变, 人们意识到 :任何一个软件从开始计划 、到开发设计和运行、到最后被废弃为止, 有一个完整的生命周 期。软件生命周期可以划分为这样几个阶段:问题定义、可行性研究 、需求分析 、设计、编写程序 、测试 、维 护。编写程序只是软件生命周期中的一个阶段 , 作为一种软件开发方法 , 应该全面地、系统化地考虑软件 开发的全过程 ,不能只考虑编写程序这个阶段 ,而忽视其它阶段 。这种观念的转变 ,促使瀑布模型在 1970 年出现 。瀑布模型也称为生命周期模型 ,瀑布模型按照软件生命周期划分的阶段次序, 依次顺序进行各个 阶段的软件开发活动每个阶段的工作完成后, 经审查合格 ,才能进行下一阶段的工作 。基于瀑布模型的软 件开发方法得到广泛应用 ,并且产生了深远的影响。从那以后的任何一种软件开发方法都考虑到了软件 生命周期的所有阶段 ,以瀑布模型为基础的其它一些高级的软件开发方法陆续问世 。因此可以说:观念转 变导致软件开发方法从初级向高级发展 ,促使软件开发方法发生演变。

思维创新是促使软件开发方法演变的一个重要因素 ,从结构化软件开发方法向面向对象软件开发方 法的演变正是思维创新的结果。结构化方法是九十年代之前占主导地位的软件开发方法 , 这种软件开发 方法的核心是结构化程序设计, 认为“程序 =数据结构 +算法” , 它的思维方式是将数据和处理数据的方法 分离成两个独立的部分, 分别考虑。而客观世界中的实体却是由静态的属性(即数据)和动态的行为(即处 理数据的方法)两者完美地综合起来的统一体 ,实际人们在思考问题时也是习惯将实体的静态属性和动态 行为综合在一起考虑 。按照人类这种习惯的思维方式 ,将数据和处理数据的方法合在一起考虑, 将两者封 装成一个统一体 ,就构建出了现在我们熟知的面向对象方法中的类和对象的概念 。与传统的结构化程序 设计的思维方式相对比, 类和对象概念的提出是一次思维创新。这个思维创新改变了传统的思维方式 , 带 来了新的程序设计理念———“程序=对象+消息” ,这个理念构成了面向对象程序设计的核心 ,之后经过进 一步的发展完善, 逐渐形成了面向对象分析 、面向对象设计、面向对象实现等内容 ,即现在我们看到的面向 对象软件开发方法 。这种思维创新所带来的变化是巨大的, 它有效地解决了结构化方法维护困难、可复用 性差等问题 ,更加客观地反映了自然界的实际情况 ,使描述问题的问题空间和实现解法的解空间在结构上 更加接近。面向对象方法目前是人们喜爱的占主导地位的软件开发方法。

敏捷软件开发方法的出现 ,可以认为是观念转变和思维创新促使软件开发方法演变的一个例子 。传 统软件开发方法对开发过程做了严格而详尽的规定 , 使得过程复杂烦琐 , 要产生并且维护大量文档 , 规定 要做的事情太多 ;同时 , 传统软件开发方法排斥变化 , 缺乏对开发过程中各种变化的有效的及时的反应 。 所以传统软件开发方法被称为“烦琐滞重型”方法 。敏捷软件开发联盟的成员们转变观念、进行思维创新 、 向传统挑战 ,在轻型方法的探索和实践方面做了大量工作, 针对传统软件开发方法的问题 , 提出了一类新 的软件开发方法———敏捷软件开发方法 ,其中发展最好的一种方法是“极限编程”(XP)。传统软件开发方 法重视软件过程和工具、文档 、合同 、计划, 而敏捷方法却认为 :(1)重视个人的创造力和相互沟通甚于软件 过程和工具 ,(2)重视当前软件甚于理解文档 ,(3)重视用户合作甚于仅仅依赖合同 ,(4)重视对变动的响应 甚于一味遵循计划 。极限编程(XP)作为敏捷方法的典型代表, 强调 4 条核心价值 :(1)沟通———与客户以 及开发团队内部持续的交流 ,(2)反馈 ———通过单元测试和功能测试获得快速反馈,(3)简单 ———总是将焦 点放在最小限度的解决方案上 ,(4)勇气 ———积极寻找更简单的方法 ,勇于改进代码的设计和质量 。并且 极限编程(XP)发展出了一些有特色的实践准则 ,如 :不断重构 、持续整合 、代码集体所有 、结对开发 、开放的 工作空间, 等等 。由于敏捷方法在开发中小规模的项目时实用性很强, 因此得到越来越多的开发人员和客 户的认可。