形式化方法在软件开发中的实用视角
1. 用户界面与程序正确性
在软件开发中,简单直观的用户界面往往至关重要。例如,飞行员屏幕或空中交通管制员控制台上过于复杂的显示可能导致危险的人为错误。曾有一次火星任务失败,原因是输入的测量单位错误,这并非程序本身的错误,但更清晰的界面本可避免此类问题。然而,如何从形式上明确界定用户界面的直观性,是一个极具挑战性的问题。
当我们谈论证明程序相对于其规范的正确性时,通常指的是证明部分正确性。从功能角度来看,这意味着如果程序或特定逻辑片段终止,那么它将以正确的结果终止。证明程序终止往往更加困难,但在某些情况下,这并非至关重要。例如,若能证明编译器部分正确,我们就知道如果编译器终止,它会生成正确的程序。即使编译器在某些情况下无法终止,这只是一个恼人的问题,但不会导致生成错误的程序。
但在实时系统中,程序终止通常至关重要。当飞行员移动操纵杆时,我们必须确保相应系统能够做出响应。在硬实时系统中,关键组件不仅要终止,还必须在指定时间内完成。虽然在这方面已经做了很多工作来证明实时性能,但这无疑会使过程变得复杂。在实践中,我们通常依靠测试和安全余量来确保程序的时间行为。
2. 编程语言规范
编写形式化规范时,我们会使用具有完整形式定义的语言,但最终的程序可能使用缺乏形式规范的语言编写。虽然有人尝试为实际语言(如 ANSI PL/I 标准和 Algol - 68 定义)使用形式定义技术,但这些定义通常难以阅读,这导致很少有人阅读它们,进而更容易包含错误。常见的编程语言(如 C、C++、Ada、Java 等)都没有形式定义,并且存在大量歧义,一些看似合理的代码实际上可能是错误的。
不同编程语言的情况有所
形式化方法在软件开发中的应用
超级会员免费看
订阅专栏 解锁全文
1140

被折叠的 条评论
为什么被折叠?



