在过去的十年中,计算机系统变得越来越强大,因此对社会的影响也越来越大。因而需要更好的技术来帮助设计和实现一些可靠的软件。已建立的工程学科使用数学分析作为创建和验证产品设计的基础。正如曾经预测的那样,形式规范是实现软件工程可靠性的一种方式。而测试等其他方法更常用于提高代码的质量。[1]
有了这样一个规范,就可以使用正式的验证技术来证明系统设计相对于其规范的正确性。这使得不正确的系统设计可以在任何重大投资投入实际实施之前进行修改。另一种方法是使用可能正确的细化步骤将规范转换成设计,最终通过构造转换成正确的实现。
需要注意的是,形式规范不是一个实现,而是可以用来开发一个实现。形式规范描述了系统应该做什么,而不是系统应该如何做。
一个好的规范必须具有以下一些属性:充分的、内部一致的、明确的、完整的、满意的、最小的[3]
一个好的规范应该有:[3]
人们对形式规范感兴趣的主要原因之一是,它们将提供软件实现的执行能力。[2]这些证明可以用来验证一个规范,验证设计的正确性,或者证明一个程序满足一个规范。[2]
一个设计(或实现)本身永远不能被声明为“正确的”。它只能是“相对于给定的规范是正确的”。形式规范是否正确描述了要解决的问题是一个独立的问题。这也是一个很难解决的问题,因为它最终涉及到的是构建非正式的具体问题域的抽象形式来表示的问题,并且这种抽象步骤不适合于形式证明。然而,通过证明规范所预期展示的相关特性的“挑战”定理来验证规范是可能的。如果正确,这些定理强化了说明符对规范及其与底层问题域之间关系的理解。如果没有,规范可能需要修改,以更好地反映那些涉及到生产(和实现)规范的领域理解。
软件开发的形式化方法在工业中没有被广泛使用。大多数公司认为在软件开发过程中应用它们不划算。[4]这可能有多种原因,其中一些原因是:
其他限制:[3]
形式规范技术已经存在于不同领域和不同规模相当长一段时间了。[6]正式规范的实现会有所不同,这取决于他们试图建模的系统类型、如何应用以及在软件生命周期的哪个阶段引入了它们。[2]这些类型的模型可以分为以下规范范例:
除了上述范例之外,还有一些方法可以应用某些启发式来帮助改进这些规范的创建。这里引用的文章很完善地讨论了设计规范时使用的启发式方法。[6]并采用分治的方法来实现这一目标。
^Hierons, R. M.; Krause, P.; Lüttgen, G.; Simons, A. J. H.; Vilkomir, S.; Woodward, M. R.; Zedan, H.; Bogdanov, K.; Bowen, J. P.; Cleaveland, R.; Derrick, J.; Dick, J.; Gheorghe, M.; Harman, M.; Kapoor, K. (2009). "Using formal specifications to support testing". ACM Computing Surveys. 41 (2): 1. CiteSeerX 10.1.1.144.3320. doi:10.1145/1459352.1459354..
^Gaudel, M. -C. (1994). "Formal specification techniques". Proceedings of 16th International Conference on Software Engineering. pp. 223–227. doi:10.1109/ICSE.1994.296781. ISBN 978-0-8186-5855-6..
^Lamsweerde, A. V. (2000). "Formal specification". Proceedings of the conference on the future of Software engineering - ICSE '00. pp. 147–159. doi:10.1145/336512.336546. ISBN 978-1581132533..
^Sommerville, Ian (2009). "Formal Specification" (PDF). Software Engineering. Retrieved 3 February 2013..
^Nummenmaa, Timo; Tiensuu, Aleksi; Berki, Eleni; Mikkonen, Tommi; Kuittinen, Jussi; Kultima, Annakaisa (4 August 2011). "Supporting agile development by facilitating natural user interaction with executable formal specifications". ACM SIGSOFT Software Engineering Notes. 36 (4): 1–10. doi:10.1145/1988997.2003643..
^van der Poll, John A.; Paula Kotze (2002). "What design heuristics may enhance the utility of a formal specification?". Proceedings of the 2002 Annual Research Conference of the South African Institute of Computer Scientists and Information Technologists on Enablement Through Technology. SAICSIT '02: 179–194..
^S-Cube Knowledge Model: Formal Specification.
暂无