技术开发 频道

通信软件白盒测试的三种境界

    【IT168技术文章】通信软件被普遍认为是白盒测试最难实施的领域,一方面,通信软件以C语言为主体语言,先进的白盒测试技术尚未有效渗透到这个区域,另一方面,通信软件通常是嵌入式实时系统,搭建测试环境非常复杂,又加上通信软件通常体积庞大、结构复杂,把通信软件的单元测试或集成测试做好确非易事。

    笔者有幸在通讯领域工作多年,近些年又因为咨询的关系与国内众多企业打交道,感触颇多。国内企业普遍对白盒测试没感觉也不重视,少数比较注重质量的公司努力尝试了,但处处碰壁,不是缺少方法就是缺少合适的测试工具,或者因为管理不善白盒测试最终做不起来。当然,想做没做成,找不着道的企业不在少数,许多公司一开始就走错方向了,在叉路上徘徊很久而混然不觉。

    国内通信企业在单元测试与集成测试方面做得好与不好的,差别很大,我们划分三种境界:混沌、有序、自发,这三种境界指的就是三种发展阶段。当然,这里分门别类的意义并不在于区分出高低上下,而在于尝试指出白盒测试的发展方向,另外,对历史经验作一次总结,通信软件因其复杂性,白盒测试无法一蹴而就,某些特定阶段必须要亲身经历,我们划分三种发展境界同时,也尝试说明在各种境界下如何实施白盒测试?重点在哪?要规避哪些问题?

境界之一:混沌状态
    混沌状态是刚实施或从未实施白盒测试的发展阶段,在这个阶段,一个企业内只有零星的单元测试或集成测试实践,缺少成功案例,该阶段最典型的特征是:每一个人都很忙,整天忙于市场救火。

    企业上上下下谁都在忙,本该在实验室做测试的测试人员被赶到市场一线,在客户的机房上跳下蹿,低头忙于调测,抬头忙于跟客户掩饰问题。本该呆在家编码的开发骨干也时不时被逮到现场,架调试环境,使出混身解数来定位问题,遇到棘手些问题通常要耗上数天才能定位,也有许多时候现场定位不了,就偷偷地复位一下设备,谎称问题解决了,然后赶紧溜回公司,一行行翻阅代码通宵达旦的继续定位。

    混沌状态最大的特点是大家都忙于救火,系统测试的投入尚无保障,更别说代码级的测试投入了。该阶段会造就众多“救火英雄”,而“纵火犯”的责任难以追究,按照通信业界的通行规律,一个产品60%的BUG应在白盒阶段曝露,当公司尚充斥着众多“救火英雄”时,白盒阶段发现的BUG通常不到20%,甚至个别公司是零。

    混沌状态还有一个重要特点,公司成员普遍对白盒测试缺少概念,大致知道代码审查、单元测试、集成测试该怎么去做,但一涉及具体场景,对某模块实施单元测试或跨模块、跨子系统实施集成测试时,通常茫无头绪,不知从何下手。处于混沌状态的组织,还可能流行一种观点:产品不稳定是测试人员的责任。因为许多人认为,尽管单元测试与集成测试没做,或做少了,只要系统测试做好总能发现所有问题的。其实这种观点早已谬之千里了,令人费解的是,持这种观点不在少数,为什么会这样?就像该阶段出现的特有现象,明明某个开发人员水平很差,写的代码老出问题,但他在市场上救过几次大火,其兢兢业业的态度、忘我的投入,又为公司挽回多少多少损失,所以领导们毫不犹豫的将他评为“功臣”。

境界之二:有序状态
    一个企业实施过多次单元测试或集成测试,数次成功后进入到有序状态。这个阶段尽管个别项目的白盒活动不成功,但多数项目稍见成效,也有个别项目效果显著。此时,企业内会有特定的组织负责推动白盒测试,白盒测试过程也逐渐融入研发流程,典型的例如:将白盒测试发现的问题纳入统计,研发过程中会以缺陷密度(每千行代码发现多少BUG)作为衡量白盒测试是否充分的指标,另外还会以覆盖率指标作为检查个人是否充分测试的依据。将白盒测试纳入流程监控,主要控制一个项目是否做白盒测试,实施过程是否规范,实施结果是否合乎预期,对于不符合流程要求的行为QA有权要求返工。

    进入有序状态须满足两个条件:一是白盒测试在少数项目获得成功,成为可拷贝的活动;二是实施白盒测试有组织与流程保证。如果这两个条件无法同时满足,说明单元测试或集成测试在这个企业中仍缺少保障,即使有人偶尔做成功了,也是不可靠的,个体行为难以转化为组织行为。

    有序状态是通信企业白盒测试必经历阶段,多数比较漫长,快则一、两年,慢则十余年,要有长时间技术积累,以及组织与流程的优化。另外,从有序状态转向自发状态,会涉及白盒测试理念的大幅转型,从现实操作角度考虑,这些是很难在一两个项目周期就能跨越过去的。

境界之三:自发状态
    自发状态是白盒测试的共产主义境界,此时生产力高度发达,设计用例的效率提高了,做测试不再是沉重负担。所谓自发,就像共产主义社会里劳动是个人意愿而非生存手段,开发人员自测也上升到个人意愿,即使领导不强制,流程也不限定白盒测试必须要做,开发人员仍自愿去做测试。自发状态是白盒测试的最高境界,它的典型表现特征是:白盒测试已成员工的普遍行为与自发行为。

    白盒测试进入自发状态,必须经历两大转变,一是测试效率要有数倍提高,这是基础,二是测试实践能够深入,能有效发现各种问题。目前已有一些公司经历过这两种转变,前者测试效率提高主要依赖于在线测试、持续测试、黑盒调测等理念(详情请见《第4代白盒测试方法概述》中拉通测试小循环、拉通研发大循环、调试转化为测试等章节),而后者有效发现问题,测试先行(TDD)已接受广泛的实践检验。当上述两大转变完成了,白盒测试就成为每位员工的必须行为,就像调试操作,每位员工写完代码,正常都要“调一调”,在自发境界下,随时“测一测”是每位员工自然而然要做的事。自发境界下的一个组织,实际操作中“测一测”很大程度上代替了“调一调”,这时,员工数月不开调试器是常见的现象,因为“测一测”对开发人员来说是让程序跑起来最经济实惠的手段,也是查错、检错最便利的方式,使用调试器并非必需。
   
    在自发境界下,时时测试、持续测试已成一种风气。另一方面,员工从领导层到基层,都普遍对白盒测试有着深入认识,知道白盒测试应该“有所为有所不为”,企业培养了一批白盒测试专家,他们很清楚哪些被测对象是可以做白盒测试的,哪些不大容易做。即使处于白盒测试最高境界,也并非所有系统都适合完整的做测试,尤其那些严重依赖特定硬件环境的软件层,当白盒专家识别出哪些模块不宜做单元测试或集成测试后,他会考虑替代方案,比如加强代码审查、加强同行评审、为特定接口追加模拟器设计等。

总结
    本文描述了通信业界的白盒测试三种境界:混沌、有序、自发,这三种境界反映了通信企业在白盒测试领域的一般发展过程。从混沌状态升级到有序状态,核心焦点是要解决测试效率的问题,只要效率提高了,一个组织是很容易从混沌状态进阶到有序状态的初级阶段,接着通过组织结构与流程措施的优化,巩固已有成果,然后着重解决持续测试与深入测试的问题,解决好了就升级到有序的高级阶段,升级的关键在于“持续测试”这个理念的转型。从有序状态进阶到自发状态,涉及测试效率与测试质量的全面提升,操作模式会有很大变化,测试工具是关键,工具不仅方便易用、测试效率奇高,而且要方便让大家从“调一调”向“测一测”转变。

    上述企业白盒测试三种境界,可与孔夫子的人生境界相比拟,孔夫子说:吾十有五,而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十从心所欲,不逾矩。

    “十有五而志于学”,这是混沌境界,“志于学”三字点出该阶段要做的事,对于白盒测试来说,处于混沌状态下的企业要勇于尝试,否则永远是原地踏步,没有进步;“三十而立,四十而不惑”对应于有序境界,此时白盒测试已找到门道,“不惑”是坚定自己的信仰,持续做下去,持续优化下去,所以,处于有序状态的企业贵在坚持;“七十从心所欲,不逾矩”,这是自发境界,老夫子的从心所欲,并非无限制的为所欲为(要不,孔圣人不该叫圣人,而应该叫神人),关键是“不逾矩”,知道规矩在哪才能不逾矩,才能从心所欲,所以,自发境界下的白盒测试还要“有所为有所不为”。我们概括一下:企业白盒测试处在混沌状态贵在尝试,处在有序状态贵在坚持,处在自发状态贵在自知。

0
相关文章