点击上方?“汽车知识共享空间”关注订阅号,设为星标⭐获取更多实时内容更新。。。
功能安全标准ISO 26262-6的第9部分是关于软件单元验证的的,总共三个Table(7、8、9),其中Table 7的1j要求是 Requirements-based test,无论什么功能安全级别的软件都需要进行此类测试。而在Table 9中要求ASIL B及以上等级的软件需要满足1a statement coverage即语句覆盖(又可以理解为行覆盖,只要每行代码执行过了就可以,不需要关心具体逻辑内容)。而对于ASIL D级别的软件则需要执行1b(branch coverage分支覆盖)与1c(MC/DC判定覆盖)。软件的存在的意义就是为了满足需求,所以需求测试是基础,而结构覆盖是对代码数据与控制流分析的进一步验证,保证代码除了满足需求之外没有任何意外的跳转。
说完上面这些,你就会发现功能安全标准中,并没有明确提到我们平常说的黑盒测试与白盒测试这样的术语。我们首先从字面意思来理解黑盒与白盒,我们可以将黑盒理解为验收型测试,就好比你在某宝上买了一个储物箱希望用它来存放冬天的衣服。你对箱子的体积和打开方式提出了明确的要求,你在收到箱子之后除了必要的外观检查外,最重要的是看这个箱子的体积是不是满足你的要求,盖子开闭是否和你想象的一样,如果没有问题你就可以收货了,这个过程中我们完全不需要关心,箱子里面的衣服怎么放的问题。这个过程我们可以将它理解为基于需求的验证或者说功能验证,也就是我们所说的黑盒测试。确认收货之后,我们在向箱子中放衣服的时候,我们就需要考虑衣服的摆放方式(可以横向放也可以纵向放),假如放衣服的事情是你请别人帮你做的(请不要纠结为什么不自己来这个不是重点),那么这个人放好衣服后,你过来检查衣服是否是按照你希望的层次摆放,有没有充分利用箱子的空间,这个检查过程是就可以理解为白盒测试即对内部结构的验证。
所以,我们可以将功能安全标准中对软件结构测试(table9的1bc与1c)的要求理解为我们平时所说的白盒测试,而Table7中1j提到的需求测试则可以理解为我们所说的黑盒测试。也有说法将黑盒归类为为功能测试,将白盒归类为非功能测试。所以,对于软件单元Unit来说,为了说明它是按照我们期望设计并运行的,我既需要基于需求的黑盒测试也需要基于结构的白盒测试,两者是一个不可分割的整体。
由于测试的重点不同,黑盒测试与白盒测试本身有它的局限性,黑盒测试中满足需求的同时可能会漏掉对软件内部分支的考察,而白盒即便是满足MC/DC 达到百分之百也有可能遗漏对功能的测试。所以,我们在进行单元测试时两者需要同时考虑,才能确保测试的完整与合理。而我们此处提到的白盒与黑盒都属于软件动态测试(即语义测试)的一部分。