下一步是设计和建立合适的测试用例。为了彻底地测试类的结构和功能性,你应该设计两中类型的测试用例:黑盒和白盒。
  黑盒测试用例基于说明和规格文档。特别地,至少应该为规格文档的每个入口建立一个测试用例;更好的是这些测试用例能够测试每个入口的各种边界条件。还需要为发现的每一个错误增加另外的测试用例,以及任何你认为必要的其它测试。
  白盒测试用例通过各种不同的输入充分地执行类的所有方法以发现缺陷。对于手工测试来说这是非常困难的。为了建立有效的白盒测试用例,你必须研究类的内部结构,然后编写测试用例尽可能完全地覆盖类的所有方法,以及覆盖所有可能引起类崩溃的输入。要达到较高的测试覆盖性,需要有效的白盒测试用例它们能够执行相当多数的路径。例如,一个典型的1万行的程序,大约有1亿条可能的路径;手工建立能够执行所有这些路径的输入几乎是不可行的。
  在建立这些测试用例以后,你将要执行整个测试用例并分析结果,确定在那里出现了错误、崩溃和薄弱环节。你还需测量这些测试的覆盖性,以确定类被测试的程度以及需要追加的测试用例。
  任何时候一个类被修改后,你应该执行回归测试,保证没有引入新的错误和/或原来的错误已经被更正了。回归测试包括白盒和黑盒测试用例,并且分析结果以确定类的质量是否得到的改善。
  C++Test:一个自动化的单元测试解决方案
  ParaSoft认识到了C/C++单元测试内在的的价值和难度,开发了C++Test,一个自动的C/C++单元测试工具,增强了ParaSoft的自动错误防止和错误检测产品线。C++Test自动执行所有可能的单元测试过程。特别地,它能够自动:
  建立每个被测类的测试驱动程序。
  建立任何必要的桩函数,并允许你定制这些桩函数的返回值或加入自己的桩函数。
  单键执行白盒测试的所有步骤。
  生成黑盒测试用例的基础集合。
  运行黑盒测试用例。
  生成黑盒测试的输出结果。
  执行回归测试。
  跟踪测试覆盖性。
  C++Test能够测试所有类型的C/C++项目;C++Test甚至能够支持COM对象,允许你对调用COM对象方法的类和方法执行自动的单元测试。
  C++Test还是高度可定制的;例如,你可以改变测试用例的生成参数,过滤一定的文件、类或方法,在任何层次上(从这个项目到单个方法或测试用例)进行测试。
  另外,C++Test很容易与你目前的开发过程合作。C++Test直接安装在DevStudio环境中,因此你能够立即测试任何正在开发中的类。只要在Developer Studio的工具栏上按下Test File或Test Project按钮,那么C++Test会自动在C++Test图形用户界面中打开你的文件,为每个类建立一个测试驱动程序并自动测试每个类。


  图3:C++Test图形用户界面

  通过自动化单元测试过程,C++Test使得单元测试切实可行,即使对时间非常紧张的项目和开发人员也是如此,并且比手工单元测试具有更好的精确行和正确行。这一切将转化成更高质量的应用,并且以更短的时间以及更低的开发、支持和维护成本。