Academic_Blog

软件工程与形式化方法相关前沿工作阅读与分享

一、引言

在快速发展的软件工程和形式化方法领域,确保软件系统的可信性一直都是不可忽视的关键问题。本简报旨在提供一个较为全面的软件测试验证方法概览,并洞悉当前国际上的最新研究动态。在此,我们汇聚课题组师生之智,共同细品国际顶级会议论文的字里行间,在思维的碰撞中激发新的火花,让灵感在交流与思辨中璀璨绽放。

我们重点关注以下会议的最新研究工作:

二、程序测试验证基本概念

程序验证,作为确保软件质量与安全的核心环节,广义上的概念就是根据既定的标准(又被称之为规范–Specification),对被检查事物(通常是程序–Program),进行严谨的属性审查与确认的过程。程序验证的主要输入是规范和程序,下图描述了一个基本的程序验证过程。这一过程不仅仰赖于计算资源的支持,更离不开工程师的智慧投入。

Alt

程序–Program:作为验证活动的核心对象,其形态万千,不仅涵盖了C/C++、Java、Rust等传统或新兴编程语言编写的软件,还延伸至多线程程序、中断驱动系统、智能合约、深度神经网络,乃至硬件设计、并行与分布式软件,以及协议、进程演算、自动机、物理信息融合系统等更为抽象的计算模型。

规范–Specification:作为检查程序是否满足标准的准则集合,承载着对程序应展现行为的精确描述与期望。这些规范可能涉及功能正确性、安全性、鲁棒性、性能等多维度的性质,是验证工作据以评判程序是否达标的准绳。从形式化规约语言到自然语言描述,规范的多样性与灵活性为验证工作带来了既丰富又复杂的挑战。

验证结果–Result:理想的结果是系统验证通过(Pass),但也有可能检测到一个或多个缺陷(Fail),或者验证没有定论,最终结果未知(Unknown)。从实际的角度来看,未知可能是最糟糕的结果,因为它意味着辛勤付出的努力却未能收获确凿的结论。然而,正如我们将看到的,可靠地避免未知的结果是非常具有挑战性的。

金字塔上的策略、权衡与攀登之路:一个理想的验证过程应该能够自动进行,无需人工干预;能够准确无误地识别出所有不符合规范的问题,即不遗漏任何错误;同时,也能避免误报,只在系统确实满足规范时给出“验证通过”的结论。然而,现实世界中并不存在这样一种万能的验证方法和工具,它能在有限时间内对所有程序和规格进行完美验证,既无遗漏又无误判。

为了直观地理解这一挑战,我们可以将验证方法的特性构想为一个三棱金字塔模型(从顶部俯瞰),如下图所示。金字塔的三个底边分别代表了自动性(Automatic)、无遗漏错误(No Missed Bugs,即完全正确性)和无误报(No False Alarms,即精确性)这三个核心属性。金字塔的顶点,则是我们梦寐以求的理想验证系统,它集自动性、完全正确性和精确性于一身。

Alt

金字塔的底面,则分布着三种不同的策略,它们分别对应着三个属性的极端表现:

攀登这座金字塔,即是在追求验证方法的不断完善和优化。不同的验证技术和工具,如同不同的攀登路线,它们根据自身的特点和优势,在自动性、完全正确性和精确性这三个维度上做出不同的权衡和取舍。计算资源的投入,就像攀登过程中的体力消耗,是推动我们不断接近理想顶点的动力。

这个金字塔模型虽然并非面面俱到,除了上述三个核心属性外,软件验证技术还可以根据其他多个维度进行分类和比较。例如,属性的指定方式、被分析系统的类型、验证系统和规范语言的易用性等,都是影响验证方法选择和效果的重要因素。但这个金字塔模型为我们提供了一个有用的起点,帮助我们在面对验证问题做出初步的决策和规划,在阅读前沿论文的时候了解方法的定位和局限性。在攀登金字塔的过程中,我们需要不断探索和尝试新的验证技术和方法,以找到最适合当前问题和资源的解决方案。同时,我们也需要保持对验证目标的清晰认识和对验证过程的严格控制,以确保我们的每一步都朝着理想状态迈进。

三、程序测试验证六大类方法

程序测试验证存在着多种不同的学术传统和方法,它们各自形成了独特的思想体系、方法和社区。尽管这些方法之间存在互动、重叠和相互启发,但每一种都拥有独特的理论基础、技术手段和应用场景。以下表格对程序验证的六大类方法进行了简要概述,它们共同构成了软件验证的丰富体系。

Alt

这六大类方法各有优劣,适用于不同的验证场景和需求。在实际应用中,开发者通常会根据项目的具体情况和目标来选择合适的方法或组合多种方法进行综合验证。同时,随着技术的不断进步和研究的深入,新的验证方法和技术也在不断涌现,为软件验证领域带来了更多的可能性和挑战。

四、每月简报

五、最新前沿论文分享

2025
2024

五、结语

程序测试验证作为软件工程和形式化方法领域的前沿技术,正不断向着更高效、更自动化、更智能的方向发展。通过持续关注国际顶级会议的研究成果,我们可以及时把握技术脉搏,推动形式化验证技术在实践中的广泛应用。期待在每一次的简报中,我们能够不断深入剖析更多创新技术与成功案例,共同推动程序测试验证领域的进步。