正式规格
在计算机科学中,形式规格是基于数学的技术,其目的是帮助实施系统和软件。它们用于描述系统,分析其行为,并通过严格有效的推理工具来验证关键的关键特性,以帮助其设计。这些规格是正式的,因为它们具有语法,其语义属于一个领域,并且可以用来推断有用的信息。
动机
在过去的十年中,计算机系统变得越来越强大,因此,它们对社会的影响力更大。因此,需要更好的技术来协助可靠软件的设计和实施。建立的工程学科使用数学分析作为创建和验证产品设计的基础。正式规格是一种在软件工程可靠性中实现这一目标的方式。其他方法(例如测试)更常用于增强代码质量。
用途
鉴于这样的规范,可以使用正式验证技术证明系统设计相对于其规范是正确的。这允许在对实际实施进行任何重大投资之前进行修改不正确的系统设计。另一种方法是使用正确的完善步骤将规范转换为设计,最终将其转换为通过构造正确的实现。
重要的是要注意,形式规范不是实施,而是它可以用来开发实施。形式规格描述了系统应该做什么,而不是系统应该如何做。
良好的规范必须具有以下一些属性:足够,内部一致,明确,完整,满足,最小
良好的规范将有:
- 可构建性,可管理性和可发展性
- 可用性
- 交流
- 强大而有效的分析
人们对形式规格的兴趣的主要原因之一是,它们将提供有关软件实施证明的能力。这些证据可用于验证规范,验证设计的正确性或证明程序满足规范。
限制
设计(或实施)不能单独声明“正确”。它只能“相对于给定规范正确”。正式规范是否正确描述要解决的问题是一个单独的问题。这也是一个很难解决的问题,因为它最终涉及构建非正式混凝土问题领域的抽象形式表示的问题,而这样的抽象步骤不适合正式证明。但是,可以通过证明预期规范的“挑战”定理来验证规范。如果正确,这些定理会加强说明者对规范及其与基本问题域的关系的理解。如果不是这样,则可能需要更改规范,以更好地反映与生产(和实施)规范相关人员的域理解。
正式的软件开发方法并未在行业中广泛使用。大多数公司不认为将它们应用于软件开发流程中。这可能是出于多种原因,其中一些原因是:
- 时间
- 高初始启动成本,可衡量的回报低
- 灵活性
- 许多软件公司都使用专注于灵活性的敏捷方法。前面对整个系统进行正式规范通常被认为是灵活的相反。但是,有一些研究对使用“敏捷”开发的正式规格的好处
- 复杂
- 他们需要高水平的数学专业知识和分析技能才能有效理解和应用它们
- 解决方案是开发允许实施这些技术但隐藏基础数学的工具和模型
- 范围有限
- 他们没有捕获项目中所有利益相关者感兴趣的财产
- 他们在指定用户界面和用户交互方面做得很好
- 不是成本效益
- 通过将它们的使用仅限于关键系统的核心部分,这不是完全正确的
其他限制:
- 隔离
- 低级本体论
- 指导不佳
- 关注不足
- 工具反馈不佳
范式
相当长的一段时间,各个领域和各个尺度上都存在形式规格技术。正式规格的实施将取决于他们试图建模的系统,应用方式以及在软件生命周期中的何处,它们已被引入。这些类型的模型可以分为以下规范范例:
- 基于历史的规范
- 基于系统历史的行为
- 随着时间的流逝,断言
- 基于州的规范
- 基于过渡的规范
- 基于从系统的状态到州的过渡基于行为
- 最好与反应系统一起使用
- 诸如Statecharts,Promela,Step-SPL,RSML或SCR之类的语言依赖于此范式
- 功能规范
- 将系统指定为数学函数的结构
- OBJ,ASL,PLUSS,LARCH,HOL或PVS依靠此范式
- 操作规范
- 早期语言,例如Paisley,Gist,Petri网或过程代数依赖于此范例
除上述范式外,还有一些方法可以应用某些启发式方法来帮助改善这些规格的创建。这里引用的论文最能讨论设计规范时要使用的启发式方法。他们通过采用分裂和纠纷方法来做到这一点。
软件工具
Z符号是领先的形式规范语言的一个示例。其他包括维也纳开发方法的规范语言(VDM-SL)和B-Method的抽像机器表示法(AMN)。在Web服务领域,通常使用正式规范来描述非功能性属性(Web服务服务质量)。
一些工具是: