给定软件在哪里...
该系统由几个子系统组成
每个子系统都包含一些组件
每个组件都使用许多类来实现
...我喜欢为每个子系统或组件编写自动化测试。
我没有为组件的每个内部类编写测试(除非每个类都有助于组件的公共功能,因此可以通过组件的公共API从外部进行测试/测试)。
当我重构组件的实现时(作为添加新功能的一部分,我经常这样做),因此,我不需要更改任何现有的自动化测试:因为这些测试仅取决于组件的公共API和公共API。通常是扩展而不是更改。
我认为该政策与诸如Retesting Test Code这样的文档形成了鲜明对比,该文档表示...
“ ...单元测试...”
“ ...系统中每个类的测试类...”
“ ...测试代码/生产代码的比率...理想地被认为接近1:1的比率...”
……我想所有这些我都不同意(或者至少不练习)。
我的问题是,如果您不同意我的政策,您能解释一下原因吗?在什么情况下这种测试程度不够?
综上所述:
公共接口经过测试(和重新测试),并且很少更改(它们被添加但很少更改)
内部API隐藏在公共API的后面,可以更改而无需重写测试公共API的测试用例。
脚注:我的一些“测试案例”实际上是作为数据实现的。例如,UI的测试用例由包含各种用户输入和相应的预期系统输出的数据文件组成。测试系统意味着具有测试代码,该代码读取每个数据文件,将输入重放到系统中,并断言它获得了相应的预期输出。
尽管我很少需要更改测试代码(因为通常添加而不是更改公共API),但我确实发现有时(例如每周两次)需要更改一些现有数据文件。当我更好地更改系统输出时(即新功能改进了现有输出),可能会发生这种情况,这可能会导致现有测试“失败”(因为测试代码仅尝试断言输出未更改)。要处理这些情况,请执行以下操作:
重新运行自动测试套件,该套件带有一个特殊的运行时标志,该标志指示它不声明输出,而是将新输出捕获到新目录中
使用可视化差异工具查看哪些输出数据文件(即哪些测试用例)已更改,并验证这些更改是否良好以及新功能的预期效果
通过将新的输出文件从新目录复制到运行测试用例的目录中来更新现有测试(覆盖旧测试)
脚注:“组件”是指“一个DLL”或“一个程序集”之类的东西,其大小足以在体系结构或系统的部署图上可见,通常使用数十个或100个类来实现,并且因此与公共API只包含约1或接口少数......一些可能被分配到的开发商之一的团队(其中不同的组件被分配到不同的团队),并且将根据康威定律有相对稳定的公共API。
脚注:文章《面向对象的测试:神话与现实》说:
误解:黑匣子测试就足够了。 如果您使用类接口或规范仔细地进行了测试用例设计,则可以确信该类已被充分利用。白盒测试(查看方法的设计测试实现)违反了封装的概念。
现实:OO结构很重要,第二部分。许多研究表明,开发人员认为非常难以理解的黑盒测试套件仅在被测实现中使用了三分之一至一半的语句(更不用说路径或状态)。这有三个原因。首先,选择的输入或状态通常使用正常路径,但不强制所有可能的路径/状态。其次,仅凭黑盒测试无法揭示惊喜。假设我们已经测试了被测系统的所有指定行为。为了确信没有未指明的行为,我们需要知道黑盒测试套件是否未行使系统的任何部分。可以通过代码检测来获取此信息的唯一方法。第三,
我应该补充一点,我正在做白盒功能测试:我看到了代码(在实现中),并且编写了功能测试(驱动公共API)以行使各种代码分支(功能实现的详细信息)。
烙印99
猛跑小猪
汪汪一只猫