怎样做单元测试谁做才有效

    有一种说法:程序员测自己的代碼效果不好因为测试是找错,程序员不愿意去证明自己是错的别人测效果才好,对吗这种说法是根本错误的,误导了无数人正好楿反,单元测试谁做要自己测效果才好别人测则几乎没有效果,除非有函数级的详细文档

    单元测试谁做的三种方式:程序员编码同时測试、程序员编码后测试、由别人测试,成本的比例大概为1:3:5测试效果的比例大概为5:3:1。这是指一般的开发过程其特征是没有函数级的详細文档。

    我们先来看看大家耳熟能详的几个概念:需求、设计、实现需求是“要做什么”,设计是“具体怎么做”实现是“做出来”。写一个函数不管写不写文档,需求、设计、实现仍然是必经的过程只不过面对的目标很小而已。

    写一个函数程序员要想清楚“要莋什么”和“具体怎么做”,这是所想显然,所想的就是需求和设计把代码写出来则是实现,这是所做

    如果在写代码同时测试,测試用例一定是依据“所想”而设计的测试的结果是验证“所做”是否符合“所想”,也就是说测试的结果是:验证实现是否符合需求。这种方式需求是清晰的(虽然只是在程序员的脑子里),所以效果最好而用例只需根据“所想”直接设计就行,还可以利用测试来驅动开发所以成本最低。

    程序员编码后测试“所想”已经忘了一部分,要根据代码来“恢复”但是不可能全部“恢复”。测试的结果有可能是“验证实现是否符合需求”,也有可能不是所以效果会打折扣,由于要花时间来“恢复”所想且不能利用测试来驱动开發,所以成本也会高得多

    由别人测试,用例设计的依据是什么除非程序员在编码时把“所想”记录下来,形成函数级的详细文档否則,“别人”只能读代码来确定需求实际上,这个“需求”是实现本身测试的结果是:验证实现是否符合实现,俗称“跟着代码走”这样的测试有什么意义?成本方面需要读代码来确定需求,无疑很费时间所以成本最高。

    举个简单的例子来说明程序员要一个加法函数,结果写成了:

    编码时测试程序员一定知道自己要写的是加法函数,用例为a=1; b=2;ret==3当然能发现错误。

    编码后测试程序员有可能想起這是加法函数,测试能发现错误也有可能忘了,读代码后认为这是一个减法函数这样测试就没意义了。

    别人测试只能读代码,认为昰减法函数测试没意义。

    当然实际的情形不会那么单纯,代码可能有一些注释“别人”也许能了解代码的大致需求,所以“别人”測试也会有一些效果但是,单元测试谁做主要做的是找出实现与需求之间的细微偏差,例如一些输入下代码是正确的,一些输入下代码有问题(未分类处理这些输入或处理错误),“别人”即使能够了解代码的大致需求也难于了解全部需求,测试效果总是很有限嘚

也许有人会说,边编码边测试虽然依据的是代码的需求(小需求),但是这个需求是否符合系统的整体需求(大需求)呢换几句話说,本来这个函数要做的是A功能但程序员所想的是B功能,那测试不是没有意义吗一、由别人测试,跟着代码走这个问题同样存在;二、这种错误在集成后很容易发现;三、这种错误很少。用小需求不一定符合大需求来否定程序员测试自己的代码那就是因噎废食了。

    总之一般情形下,程序员编码同时测试、程序员编码后测试、由别人测试三种方式的成本的比例大概为1:3:5,测试效果的比例大概为5:3:1這个比例只是定性,我无法精确证明信不信由你,反正经过十多年的实践我是信的。

  单元测试谁做是对软件基本組成单元进行的测试是属于白盒测试的范畴,它主要通过对代码的逻辑结构进行分析来设计测试用例在动态测试手段中,单元测试谁莋是一种非常高效的测试方法并且是软件测试周期中第一个进行的测试。从成本角度考虑缺陷发现越早越好,加强单元测试谁做力度囿利于降低缺陷定位和修复难度从而降低缺陷解决成本,同时加强单元测试谁做也减轻了后续集成测试和系统测试的负担根据业界的統计,一个 BUG 在单元测试谁做阶段发现花费是 1 的话到集成测试就变为 10 ,到系统测试就高达 100 到实际推向市场量产后就高达 1000 。但单元测试谁莋在目前国内软件企业中开展得并不好一方面是由于对单元测试谁做重视程度不够,测试投入不足另一方面是由于在单元测试谁做实踐方面积累得也不够,单元测试谁做处于一种摸索状态

  软件的质量由组织、流程和技术三个维度来决定,任何一个维度都不能单独決定软件的质量好的组织结构可以保证流程的顺利实施,好的流程能提高软件开发的规范性和可控性从而提高软件开发的效率和质量,而采用了好的技术和有好的技术的载体 —— 人则从根本上保证了软件的质量。

  总而言之组织、流程和技术是软件质量三角,本攵将从这三个方面对如何做好单元测试谁做进行论述

  ? 组织结构应该保证测试组参与单元测试谁做

  目前无论是工业界还是学术堺都认为单元测试谁做应该由开发人员开展,这是因为从单元测试谁做的过程看单元测试谁做普遍采用白盒测试的方法,离不开深入被測对象的代码同时还需要构造驱动模块、桩函数,因此开展单元测试谁做需要较好的开发知识从人员的知识结构、对代码的熟悉程度栲虑,开发人员具有一定的优势

  单元测试谁做由开发人员进行能带来一些特别的收益。我们知道在实践中开发人员进行单元测试誰做一般推荐采用交叉测试的方法,例如由被测单元的调用方进行该单元的测试即尽量避免对自己的代码进行单元测试谁做。这种交叉嘚测试安排可以避免测试受开发思路影响太大局限于原来的思路不容易发现开发过程中制造的问题;二来也达到一个技术备份或充分交鋶的目的,这对组织非常有利即使不采用交叉测试的方法,而安排单元的生产者自行开展单元测试谁做也是有很大的优越性的,其最夶的优点是快速且能更好的实现 “ 预防错误 ” 。在人员紧张的情况下这种自行测试的安排也是不错的选择

  从经验值来看,单元测試谁做投入和编码投入相比基本上是一比一如果由专职测试队伍来进行单元测试谁做,维持这样庞大的单一任务队伍显然是不合适的

  以上谈的是由开发人员进行单元测试谁做的优点,其中主要是从单元测试谁做的效率角度来考虑但是从单元测试谁做效果的角度考慮,必须从组织结构上保证测试组参与单元测试谁做这是因为:

  首先,从目前国内企业普遍现状来看测试人员质量意识要高于开發人员,测试人员参与单元测试谁做能够提高测试质量

  其次,对被测系统越了解测试才有可能越深入,测试人员参与单元测试谁莋将使得测试人员能够从代码级熟悉被测系统,这对测试组后期集成测试和系统测试活动非常有帮助会很大的提升集成测试和系统测試质量。

  测试组以何种方式参与单元测试谁做应该结合软件组织的实际情况来定。如果软件组织测试资源充分测试人员对开发人員的比例较高,那么可以由测试人员独立承担部分重要模块的单元测试谁做工作;如果测试资源不足测试人员对开发人员的比例较低,那么可以采取由测试人员进行单元测试谁做计划、单元测试谁做设计的工作而单元测试谁做的实现和执行由开发人员来完成;而如果测試资源非常缺乏,连单元测试谁做计划、单元测试谁做设计都无法承担那么测试组至少应该参与开发组的各相关单元测试谁做文档、单え测试谁做报告的评审,保证单元测试谁做的质量

  ? 加强单元测试谁做流程规范性

  ? 制订单元测试谁做的过程定义

  软件质量的提高需要规范的流程,对软件开发过程进行管理也需要依据规范的过程定义过程定义包含阶段的划分、阶段的入口 / 出口准则、阶段嘚输入 / 输出、角色和职责、模板和查检表等等。将单元测试谁做划分为几个阶段便于对单元测试谁做过程进行控制体现软件测试可控性。要提高单元测试谁做的质量首先要制定规范的单元测试谁做过程,开发组、测试组、 SCM 组、 SQA 组等可以依据单元测试谁做过程定义开展各洎的工作共同保证单元测试谁做的质量。

  单元测试谁做过程的定义需要参照企业的实际情况例如阶段划分可以分为四个阶段:计劃、设计、实现、执行。其中计划阶段应当考虑整个单元测试谁做过程的时间表工作量,任务的划分情况人员和资源的安排情况,需偠的测试工具和测试方法单元测试谁做结束的标准及验收的标准等,同时还应当考虑可能存在的风险以及针对这些风险的具体处理办法,并输出《单元测试谁做计划》文档作为整个单元测试谁做过程的指导。设计阶段需要具体考虑对哪些单元进行测试被测单元之间嘚关系以及同其他模块之间单元的关系,具体测试的策略采用哪一种、如何进行单元测试谁做用例的设计、如何进行单元测试谁做代码设計、采用何种工具等并输出《单元测试谁做方案》文档,用来指导具体的单元测试谁做操作实现阶段需要完成单元测试谁做用例设计、脚本的编写,测试驱动模块的编写测试桩模块的编写工作,输出《单元测试谁做用例》文档、相关测试代码执行阶段的主要工作是搭建单元测试谁做环境,执行测试脚本记录测试结果,如果发现错误开发人员需要负责错误的修改,同时进行回归测试该阶段结束需要提交《单元测试谁做报告》。

  具体进行单元测试谁做过程定义的时候可以进行一定的裁减,例如可以裁减为设计和执行两个阶段将《单元测试谁做方案》和《单元测试谁做用例》合二为一。

  ? 单元测试谁做工作产品必须纳入配置管理

  单元测试谁做工作產品指单元测试谁做完成后应交付的测试文档、测试代码及测试工具等一般包括但不限于如下工作产品,可以根据实际情况进行适当裁剪:

  ? 单元测试谁做问题单

  ? 单元测试谁做输入及输出数据

  ? 单元测试谁做代码及设计文档

  为了保证单元测试谁做工作產品的准确性需要对测试代码和脚本进行走读或检视,对测试文档进行评审这些工作产品应该纳入到配置管理,对于其修改要走配置變更流程并及时发布其配置状态,这样可以保持单元测试谁做工作产品的一致性和可回溯性

  ? 必须制订覆盖率指标和质量目标来指导和验收单元测试谁做

  单元测试谁做必须制订一定的覆盖率指标和质量目标,来指导单元测试谁做设计和执行同时作为单元测试誰做验收的标准。设计用例时可针对要达到的覆盖率指标来设计用例,而在测试执行时可以依据覆盖率分析工具分析测试是否达到了覆盖率指标,如果没达到需要分析哪些部分没有覆盖到,从而补充用例来达到覆盖率指标而单元测试谁做质量目标的制订,需要符合軟件企业的实际过程能力这依赖于软件企业以前单元测试谁做过程度量数据的积累,不能凭空制造出来有了以前度量数据的积累,完铨可以了解当前组织的单元测试谁做能力例如单元测试谁做每千行代码发现的缺陷数是多少。如果单元测试谁做统计结果没有落到这个質量目标范围内说明单元测试谁做过程中某些方面存在一些问题,需要对过程进行审计后找出问题原因进行改进

  这些指标确定下來后,一定要严格推行会有一些测试人员找出各种理由证明覆盖率指标达不到等等,这需要 QA 根据实际情况分析指标是否合理实际证明囿一个相对简单的标准也比没有标准要好得多,我们的实践发现通过推行硬性指标,单元测试谁做发现的问题数目比没有标准前至少增加了 2 倍

  下面是印度 SASKEN 公司的质量目标:

  印度 SASKEN公司质量目标

我要回帖

更多关于 单元测试谁做 的文章

 

随机推荐