软件演化笔记

第一讲

识别和分类不同种的软件工程,并能识别其位于的软件周期中。

分析软件演化背后的驱动因素。

描述软件成品演变的一些模型和过程。

 

 

维护似乎更与这些独立进行,而不是像这张图上这样的。

从瀑布模型中我们可以看出,需求、设计(架构)、实施(数据、代码、文档、技术)和验证(测试和证明)都在不断发展。

演化是某种物质的或抽象的、自然的或人工的实体或系统的属性、特征和行为随时间逐步变化的阶段性过程。

软件演化则是人工的软件的属性、特征和行为随时间逐步变化的阶段性过程。

Phase-out(停止维护)

Close-down(终止使用)

软件工件的演进应保持一致。然而,这在现在实际上是一个问题。

1. 纠正性维护:针对任何类型的失效(如漏洞、系统错误)而进行的维护。

2. 适应性维护:针对数据或处理环境的变化(如需求变化)进行维护。

3. 完善性维护:为消除缺陷、优化质量属性或提高可维护性而进行的维护。

程序的稳定性是关键(稳定性:程序变化放大的阻力)。
程序是某种事物的抽象表示。程序建立在一个理论框架/模型之上(例如编程范式、数学、逻辑)。这一理论框架/模型考虑对正在解决的现实世界问题或特定环境或领域进行抽象。

S型程序:

其功能由规范正式定义并可由规范派生的程序

所解决的问题都有明确的话语定义。

 

程序的正确性是可以证明的。

例子:一些专门的数学、算法程序。

E(A)型程序(不断发展的、应用的):在现实世界中运行的程序(或针对现实世界的程序)。它们应该不断发展,因为现实世界也在发展。

解决的问题是以不断发展的现实世界为框架的。

由此产生的程序在概念上并不是静态的。

程序的正确性无法证明,只能测试。

 E-program的八条定律:

1. 持续变化——E型系统必须不断调整,否则就会越来越不尽如人意。

2. 复杂性逐步增加——随着E型系统的发展,其复杂性也会增加,除非进行维护或降低复杂性。

3. 自我调节——E型系统的演化过程是自我调节的,其产品和过程测量值随时间的分布接近正常。

4. 组织稳定性的保持——在一个不断演化的E型系统中,总体平均有效活动率在产品的整个生命周期内保持不变。

 

5. 熟悉度的保持——在不断演化的E型系统的有效寿命期间,连续发布的平均内容是不变的,每次更改的内容大致上应该一样。

6. 功能持续增长——E型系统的功能内容必须不断增加,以保持用户在使用期内对系统的满意度(如何定义功能内容的增加?)。

7. 质量下降——除非对E型系统进行严格维护并使其适应不断变化的运行环境,否则利益相关者会认为E型系统的质量在下降(如何定义质量?)。

8. 反馈系统——E型系统中的演化过程构成了多层次、多轮次、多代理反馈系统,必须将其作为多层次、多轮次、多代理反馈系统来处理,才能在任何合理的基线上取得显著的改进。

2013年前,只有两条定律还能用(1和4)。

第二讲

software requirements定义:“描述系统应提供的服务及其运行限制。”

requirement specification:“描述系统应做什么的文件。它通常是客户与供应商之间合同的一部分。”

用户需求vs系统需求

用户:对系统功能和服务的整体要求。常常是非常口语化的。

系统:详细描述软件系统的功能、服务和操作限制。确定要实施的具体内容。常常是非常准确的。

功能性需求与非功能性需求

功能性需求:说明系统应提供的服务、系统应如何对特定输入做出反应,以及系统在特定情况下应如何运行。

非功能性需求:对系统提供的服务或功能的限制。它们包括时间限制、开发过程限制和标准限制。

影响演变的需求

当发生下列情况时,软件演化的难度会很大:

  • 糟糕的需求(如模糊、主观、过于复杂等)
  • 需求不稳定(系统中存在依赖关系)
  • 缺失的需求
  • 不一致的需求

糟糕的需求

需求应可衡量。例如,应遵循SMART标准。Specific(具体)、Measurable(可衡量)、A(Achievable, Actionable, Appropriate)、R(Realistic, Relevant)、T(Time-bound, Traceable)。

 

posted @ 2025-02-11 21:06  redwind  阅读(13)  评论(0编辑  收藏  举报