软件演变

软件演变是在最初发布后不断开发软件,以解决不断变化的利益相关者和/或市场要求。软件演变很重要,因为组织在其软件中投资了大量资金,并且完全依赖于此软件。软件Evolution有助于软件适应不断变化的业务需求,修复缺陷,并与软件系统环境中其他变化的系统集成。

总体介绍

弗雷德·布鲁克斯(Fred Brooks )在他的关键著作《神话人物》中指出,在维护阶段出现了超过90%的典型系统成本,并且不可避免地要维护任何成功的软件。

实际上,敏捷方法源于基于Web的技术及其周围的维护式活动,其中大部分功能来自框架和标准。

软件维护解决了错误修复和较小的增强功能,而软件演变则集中在适应迁移上。

软件技术将继续开发。这些更改将需要创建和合理的新法律和理论。一些模型还需要在制定未来计划的其他方面。创新和改进确实会增加软件开发的意外形式。维护问题也可能会改变以适应未来软件的演变。软件流程本身正在发展,经过学习和改进后,它总是会提高其效率和有效性。

基本概念

对软件演变的需求来自以下事实:没有人能够预测用户需求将如何发展。换句话说,现有系统永远不会完成并继续发展。随着它们的发展,除非有更好的解决方案来解决这些问题,否则系统的复杂性将会增长。软件演化的主要目标是确保系统的功能相关性,可靠性和灵活性。软件演化可以是完全手动的(基于软件工程师的更改),部分自动化(例如使用重构工具)或完全自动化。

互联网已经极大地影响了软件的发展:

  • 万维网和互联网资源的快速增长使用户和工程师更容易找到相关信息。
  • 开源开发,任何人都可以下载源代码,因此修改它已启用了快速和并行进化(通过叉子)。

软件维护的类型

EB Swanson最初确定了三类维护:纠正,适应性和完美。然后,Lientz和Swanson(1980)将四类软件分类。此后,这些已在ISO/IEC 14764:2006中对国际进行了更新和规范化。

  • 纠正性维护:交付后执行的软件产品的反应性修改以纠正发现的问题;
  • 自适应维护:修改交付后执行的软件产品,以使软件产品可在变化或变化的环境中使用;
  • 完美维护:交付后修改软件产品以提高性能或可维护性;
  • 预防性维护:交付后的软件产品修改,以检测并纠正软件产品中的潜在故障,然后才能有效故障。

当有已知的变更要求时,所有前面都会发生。

尽管这些类别是由Warren等人等许多作者补充的。 (1999)和Chapin(2001),ISO/IEC 14764:2006 International Standard保留了基本的四个类别。

最近,已经使用本体论( Kitchenham等(1999),Deridder(2002),Vizcaíno(2003),Dias(2003)和Ruiz(2004))对软件维护和进化的描述进行了描述,这丰富了描述的描述。许多进化活动。

舞台模型

当前的趋势和实践是使用称为“分阶段模型”的软件演化模型向前投影的。引入了分阶段模型来替换常规分析,该分析不太适合现代软件开发,因为它难以在软件演化中贡献它。简单的阶段模型(初始发展,进化,维修,淘汰和关闭)有五个不同的阶段。

  • 根据Khbennett和VT Rajlich的说法,关键的贡献是将“维护”阶段分为进化阶段,然后进行维修和淘汰阶段。缺乏某些功能的第一个版本的软件系统将在初始开发期间开发或称为alpha阶段。但是,在此阶段已经拥有该架构将带来任何未来的更改或修正案。此阶段的大多数参考文献将基于方案或案例研究。知识已定义为最初发展的另一个重要结果。此类知识在内,包括应用程序领域,用户需求,业务规则,政策,解决方案,算法等知识。知识似乎也是后续发展阶段的重要因素。
  • 一旦上一个阶段成功完成(必须在进入下一阶段之前成功完成),下一阶段将是进化。用户倾向于改变自己的需求,并希望看到一些改进或更改。由于这个因素,软件行业面临着快速变化环境的挑战。因此,进化的目的是使应用程序适应不断变化的用户需求和操作环境。在上一个阶段,创建的第一个版本的应用程序可能包含许多故障,并且由于案例研究或场景,这些故障将在进化阶段固定在进化阶段。
  • 该软件将不断发展,直到不再可发展,然后进入维修阶段(也称为软件成熟度)。在此阶段,只会进行较小的更改。
  • 下一个阶段是逐步淘汰,该特定软件不再可用。但是,该软件仍在生产中。
  • 最后,关闭。软件使用已断开或停用,用户将针对替换。

雷曼的软件进化定律

梅尔·雷曼(Meir M.这些行为(或观察)被称为雷曼定律。他将E型系统称为为执行一些现实世界活动而编写的系统。此类系统的行为与其运行的环境密切相关,这种系统需要适应该环境中的不同需求和环境。八个法律是:

  1. (1974年)“持续变化” - 必须不断适应电子型系统,否则它变得越来越不满意
  2. (1974)“增加复杂性” - 随着电子型系统的发展,除非完成维护或减少的工作,否则其复杂性会增加
  3. (1980)“自我调节” - E型系统的演变过程是自我调节的,产品和过程指标的分布接近正常
  4. (1978)“组织稳定性的保护(不变的工作率)” - 不断发展的电子型系统中的平均有效全球活动率在产品的寿命中不变
  5. (1978年)“熟悉的保护” - 例如,E型系统的发展,与之相关的所有相关,开发人员,销售人员和用户必须保持掌握其内容和行为的掌握,以实现令人满意的演变。过度的增长减少了精通。因此,随着系统的发展,平均增量增长仍然不变。
  6. (1991)“持续增长” - 必须不断提高E型系统的功能内容,以在其一生中保持用户满意度
  7. (1996年)“质量下降” - 除非严格维护并适应操作环境变化,否则电子型系统的质量似乎正在下降
  8. (1996年)“反馈系统”(1974年首次陈述,正式为1996年法律) - 电子型进化过程构成了多层次,多环,多机构反馈系统,并且必须被视为对任何合理的改进进行重大改进根据

值得一提的是,所有这些法律对所有类型的软件系统的适用性都已由几位研究人员研究。例如,请参阅Nanjangud C Narendra的演讲,他描述了企业敏捷项目的案例研究,这是根据Lehman的软件进化定律。一些来自开源软件开发研究的经验观察似乎挑战了一些法律。

法律预测,软件系统中功能变化的需求是不可避免的,而不是对要求或不良编程的不完整或不正确分析的结果。他们指出,软件开发团队在安全实施更改和新功能方面所能取得的成就是有限制的。

已经开发了针对软件演变的成熟度模型来改善流程,并有助于确保软件迭代发展时的持续再生。

许多利益相关者(例如开发人员,用户,经理)制定的“全球流程”具有许多反馈循环。进化速度是反馈回路结构和全球系统其他特征的函数。过程仿真技术(例如系统动态)对于理解和管理此类全球过程可能很有用。

软件的进化不太可能是达尔文人拉马克人鲍德维尼亚人,而是一个重要的现象。鉴于在社会和经济各个层面上对软件的依赖越来越大,软件的成功发展变得越来越重要。这是一个重要的研究主题,没有得到太多关注。

雷曼将软件的演变与其他人造实体相比,因为它的快速路径被视为人工系统进化研究的“果蝇”。

也可以看看

可用工具

  • libvcs4j一个Java库,允许现有工具通过为不同版本控制系统和问题跟踪器提供通用API来分析软件系统的演变。