是否有一个工具可以处理模型检查大型现实世界(主要是C ++),例如KDE?

(KDE是使用IPC的某种意义上的分布式系统,尽管通常所有过程都在同一机器上。是的,顺便说一句,这是对“分布式系统”的有效用法 - 检查Wikipedia。)

该工具将需要能够处理内部过程中的事件和过程间消息。

(让我们假设,如果该工具支持C ++,但不支持KDE使用的其他内容,例如MOC,我们可以将某些东西侵入解决方案。)

我会很乐意接受较少的一般性(例如,静态分析仪专门用于查找特定类别的错误类别)或更通用的静态分析替代方案,以代替实际的模型检查器。但是我只对可以的工具感兴趣 实际上 处理KDE规模和复杂性的项目。

有帮助吗?

解决方案

显然,您正在寻找一个静态分析工具,可以

  • 大规模分析C ++
  • 找到感兴趣的代码片段
  • 提取模型
  • 将该型号传递给模型检查器
  • 报告结果给您

一个重要的问题是,每个人都对他们要检查的模型有不同的想法。仅此一项就可能会杀死您确切想要的东西的机会,因为每个型号提取工具通常都可以选择它想要捕获的模型,以及它与您想要的完全匹配的机会与恕我直言不知。

您不清楚要建模的特定建模,但是我想您想找到通信原始图,并建模过程交互以检查诸如僵局之类的东西吗?

商业静态分析工具供应商似乎是一个合乎逻辑的地方,但我认为它们还不在那里。 掩护 似乎是最好的选择,但看来他们只对Java线程问题进行了某种动态分析。

本文声称这样做,但我没有详细研究: 使用Verisoft对C/C ++程序的组成分析. 。相关是 PDF]计算机辅助假设/保证推理Verisoft. 。看来您必须手工宣传源代码以指示感兴趣的建模元素。 VerifySoft工具本身似乎是Bell Labs的专有,很难获得。

同样,这个: 多线程C ++程序的分布式验证 .

本文也提出了有趣的主张,但尽管标题为标题,但没有处理C ++:多线程C/C ++程序的运行时模型检查.

尽管所有部分都很困难,但他们共享的一个问题是解析C ++(以前引用的论文为例),并找到为模型提供原始信息的代码模式。您还需要解析您正在使用的C ++的特定方言; C ++编译器都接受不同的语言并不好。而且,正如您所观察到的那样,必须处理大型C ++代码。模型检查器(旋转和朋友)相对容易找到。

我们的 DMS软件重新设计工具包 提供通用解析,具有可自定义的模式匹配和事实提取,并且具有强大的 C ++前端 这处理了C ++的许多方言(2019年2月:包括ANSI,GCC和MS Flavors中的C ++ 17)。它可能被配置为查找和提取与您关心的模型相对应的事实。但这并不能从架子上做到这一点。

DM与它的 C 前端已用于处理极大的C应用程序(19,000个编译单元!)。 C ++的前端已用于对各种大规模C ++项目的愤怒(2019年2月:包括在3000多个汇编单元中对API的大规模重构)。鉴于DMS的一般能力,我认为它可能能够处理相当大的代码。 YMMV。

其他提示

静态代码分析仪首次使用大型代码基础使用时,通常会产生如此多的警告和警报,以至于您将无法在合理的时间内分析所有警告。很难挑出从看起来可疑到工具的代码中的真实问题。

您可以尝试使用自动不变的发现工具,例如在运行时捕获感知不变的“ Daikon”。如果发现不变性(例如,“ A == B+1”的等效性),您可以稍后验证,然后将永久性断言插入您的代码中。这样,当您的变化导致不变时,您将被警告说您的变化可能会损坏某些东西。此方法有助于避免重组或更改代码以添加测试和模拟。

将形式技术应用于大型系统的通常方法是对它们进行模块化并为每个模块的接口编写规范。然后,您可以独立验证每个模块(在验证模块时,您调用的其他模块的规格(而不是代码))。这种方法使验证可扩展。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top