形式化验证在软件开发中的集成实践
形式化验证是通过自动证明程序来确保计算机程序按预期运行的过程。给定函数行为的数学规范以及代码执行环境的假设(如操作系统行为和合理输入),形式化验证能确定代码是否会在任何符合假设的输入下违反规范。
尽管形式化验证能产生更安全、更少错误的代码,但很少用于大型商业软件项目。开发人员缺乏时间编写详细的函数规范,而验证团队又不熟悉正在开发的软件。
集成方法
在某机构云服务的自动推理团队中,通过以下六个关键组件将形式化验证集成到软件开发流程中:
1. 使用熟悉编程语言的函数规范
- 使用代码编写语言(如C语言)进行函数规范编写
- 牺牲部分表达能力但大幅提高采用便利性
2. 声明式函数规范
- 提供函数库支持在命令式语言中编写声明式规范
- 开发者可以直接描述函数行为而非具体操作步骤
3. 代码嵌入式规范
- 允许开发者在代码块前后添加前置条件和后置条件
- 将规范直接嵌入到自包含的代码块中
4. 采用熟悉的单元测试语法
- 使用类似单元测试的语法指定输入范围
- 测试代码可自动转换为数学表达式供证明器评估
5. 错误修复
- 形式化验证不仅能识别错误还能指出修复方法
- 验证团队提供代码补丁来展示验证效用
6. 持续集成
- 提供后端系统自动对新提交代码重新运行验证
- 即时反馈代码修订是否违反函数规范
实际应用效果
在某机构C通用库的开发中,应用该方法取得了显著成效:
- 1名全职验证工程师和2名实习生与开发团队合作
- 在9个关键模块中指定并验证了171个程序入口点
- 验证代码行数、发现和修复的错误数量大幅增加
未来发展
正在扩展该方法的应用代码库和自动验证功能范围,同时评估可验证代码的长期维护最佳实践,以及如何让新开发者快速掌握现有可验证代码库。
该方法成功证明了形式化验证在大型商业软件开发中的可行性,为提升代码质量和安全性提供了有效途径。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码

公众号二维码


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



