对于上面那个程序,如果你测试到了Base.foo()和 Dervied.bar(),表面上看,你测试到了Base::helper()和Derived::helper()方法,达到了分支和语句,甚至路径覆盖100%。但是Base::foo()和Base::bar()他们跟Base::helper之间的接口还没有覆盖到,所以必须加强测试。
在面向对象中,上下文是设计比较多的,上下文覆盖是一种收集被测试软件如何执行数据的方法。可以应用于多态、继承和封装的特性,也可以扩展到多线程应用。
● 继承上下文覆盖(Inheritance Context Coverage):上下文内执行到的判定分支数据量占程序内判定的总数的百分比。
○ 基类的方法在其上下文空间中的执行是完全独立于基继承类的上下文空间;继承类的方法在其上下文空间中的执行也独立于其基类的上下文空间。
○ 继承上下文判定覆盖率=(累加每个上下文内执行到的判定分支数)/(上下文数+上下文内的判定分支总数)
● 基于状态的上下文覆盖(State-Base Context Coverage)
○ 基于状态的类:考虑有状态依赖行为的类。
◆ 有边界的栈:“空状态”、“半空状态”、“满状态”,“空状态”使用pop()方法就抛出异常,“满状态”使用push()方法也会抛出异常。
○ 入口点覆盖(Entry-Point Coverage)/接口点覆盖(Interface Coverage):如上面的有边界栈的类,只测试接口的话,是无法测试边界值的时候会不会抛出异常。
○ 白盒覆盖:如判定覆盖覆盖的接口不对应于公共接口的特性。而特定的处理是覆盖不了的。
○ 基于上下文状态转移图:描述状态及其迁移路线的图。
○ 基于状态的上下文覆盖:对应于被测类对象的潜在状态。
◆ 基于状态的上下文入口点覆盖率=(累加每个状态内执行到的方法数)/(状态数*类内方法总数)
● 已定义用户上下文覆盖(User-Defined Context Coverage)
○ 基于线程的上下文覆盖:应用到维护每个线程的独立的覆盖率。
其他覆盖率(着重了解)
● 函数覆盖:函数覆盖率=(至少被执行到一次的函数数量)/(系统中函数的总数)
● 指令块覆盖(Inheruction Blocks Coverage):指令快覆盖率=(至少被执行到一次的指令块数量)/(系统中指令块总数) 其中:指令块表示函数内部一系列语句。
文章来源于领测软件测试网 https://www.ltesting.net/