作为芸芸众程序员的一员,我对软件开发中的一切都有着自己的问题。今天是关于测试,作为一名唯物主义者,我相信众物都有其神,于是我找到了测试之神。
我问:神仙哥哥,为什么我们需要测试呀?
大神用他那一贯充满怜悯的眼神看着我,说到:我可怜的孩子们啊,愿上帝保佑你们。之所以需要测试,都是上帝的错啊,上帝创造了你们,但是因为没有测试,所以你们都是不完美的、不理智的,你们会犯错。
我说:我明白了,因为我们每个人都各不相同,我们会被情绪、环境左右,不理智、价值驱动,而我们的大脑也是有限的,更糟糕的是那狭小的大脑只有该死的5%得到了开发,所以我们需要测试。
大神点点头,他对5%这个数字充满了怜悯,当然,他对任何事情都充满怜悯。我想,我该叫他怜悯之神。
我接着问:我们需要测试,可是,为什么我看测试人员只是天天敲键盘而已啊?
怜悯之神说:你的工作难道不也是天天敲键盘吗?
我想了一下,说:那不一样,我敲键盘是在写代码,那些漂亮的页面、增删改查都是代码实现的。
怜悯之神说:开发人员敲键盘是在写代码,测试人员敲键盘是在获取当前系统的信息,这两者真正的工作都是那些脑力活动,是在敲击键盘这个物理行为之前以及伴随这些物理行为的脑力活动。如果你敲击键盘的时候没有进行思考,那么你就不是在进行开发和测试;而且,如果你在思考但是没有敲击键盘,你还是可能在进行开发和测试。
我说:关键是思考。
怜悯之神说:是的。他显然对后半句犹豫了一下,但是还是说了,人类一思考,上帝就带领我们发笑。
我想,这有什么好笑的吗,连朝鲜昨晚都进球了。我说,其实对软件开发人员来说,我们也应该通过使用自己的产品来对他进行测试。
怜悯之神点点头,说,如果你都对自己的产品感到担心和鄙夷,别人为什么要买它?
我说,可是,除非我们开发的是开发工具,否则我们根本不可能用它。地球人都知道,在某个神奇的地方,做减肥药的从来不喝自己的减肥药,买火腿肠的从来不吃火腿肠....人人都需要是化学家。
怜悯之神说:完全由软件开发人员构成的测试样本不太可能代表整个用户群。
我自言自语道,所以我们需要测试人员,需要另一个角度的思考。
等等,我说,尽管测试人员测试了,但是为什么系统还是存在缺陷哩,难道他们不对所有可能性都进行测试的吗?
怜悯之神翻了我一个白眼,他叹了口气,说道,该死的5%啊。作为报复,在下面的叙述中,我将称他为白眼之神。
白眼之神说,对任何程序而言,可能进行的测试数据都是无限的。测试也许可以令人信服的表明存在缺陷,但是永远无法表明不存在缺陷。
我想了想,说,你说的有道理,我们现在的系统需要导入客户的遗留数据,光报表就多达20万,如果一张张的校验报表内容和样式,那么一定会死人的。
白眼之神说,那你们是怎样测试的哩?
我说,抽取样本测试哈。我说,我明白了,由于我们无法测试所有的可能性,那么任何测试实际上都是某种程度的样本测试,这些样本以某种方式代表整个可能测试集合的一个部分或者片段。测试只是采样!
白眼之神点点头,说,实际上,采样也是一个心理过程,而且是一个感性过程,令某人满意的样本也许会让另外一个觉得一点都不满意。
我接着说,由于不可能进行穷举测试,所以我们往往在两个目标间徘徊:希望测试能够覆盖所有令人感兴趣的条件,希望测试集减少到可以管理和承受的程度。就像吃自助餐,希望吃到所有东西,但是又要不把肚皮撑破。
白眼之神说,所以我们需要尽可能选择那些具有最强代表性的样本进行测试,而这是专业测试人员的优势。另外,多样化样本发现的问题可能超过大样本发现的问题,同样,测试团队多样化也可能发现更多的问题。
我说,我想想,我们现在也在进行测试,在开发中,我们采用了TDD的方式,我们单元功能测试的覆盖率很不错,这样,我想单元测试可以减少测试人员?减少系统测试?
神说,你会因为一架飞机保证它所有的部件在组装前都进行了测试而乘坐它的处女航吗?
我说,哦,罗老号发射失败了。
神说,但是,良好的单元测试能够为系统测试去除噪音。
我说,缺陷都不是自己钻进去的,而是开发人员放前去的。单元测试能够在一定程度上阻挡开发过程中缺陷的进入,同时阻挡一些简单的缺陷,系统测试不能捕获所有缺陷,相对单元测试,会花费更长的时间和成本,这些时间和成本能够通过单元测试得到部分节约。
神说,开发人员的测试保证了他对需求的理解和实现的一致,但是开发人员对需求的理解和真正的需求一定一致吗?
我说,所以需要测试人员来即时验收。
神说,另外,从心理学的角度说,一个人很难发现自己的错误,所以TDD和结对编程一起实践会有比较好的效果。
我说,好吧,测试很重要,可是为什么很多项目最后的集成测试阶段会那么长哩?这总是导致我们的项目延期。
神说,说说你们的集成测试阶段都在做些什么?
我说,噢,我们拉出一个发布分支,冻结代码提交,开始进行测试,查明缺陷原因,根据重要性修改缺陷,然后重新测试,以此循环。恩,问题在于我们每修复一些缺陷总会引入新的缺陷,所以这个时间拉得很长。
神说,修复缺陷的同时引入新缺陷,这叫做故障反馈率(FFR),也就是一个修复让系统中产生了另一个缺陷的情况所占的百分比。这个数值如果在50%以下就很幸福了,另外,压力和试图提高缺陷修复速度都会提高FFR。
我说,也就是修复缺陷的同时引入新缺陷是个正常情况。恩,可是我的问题是为什么最后的测试阶段需要花费这么长时间?
神说,难道你不觉得是你们经理错误的估计了最后集成测试阶段所应该花费的时间?
我说,oh。
神说,测试不等于除错,把整个集成测试阶段归于测试是不公平的。
我说,是的,如果区分开,相比测试,除错占据了更多时间。恩,我们现在的一个项目特性,由于开发时没有考虑性
能问题,导致上线时花费了大量时间。
神说,项目延期的主要问题在于测试推迟。
我说,是的,这个给我的印象很深,如果在开发阶段就进行大数据的测试,那么会节省很多时间。
神说,所以要测试先行,并且测试往往在项目开始开发前都已经开始了,测试需要贯穿于整个开发过程,而是不推迟到最后的集成测试阶段。TDD和持续集成是很不错的实践,但是它们仅仅是一部分。
我说,还好,我们还有测试,不像某些疫苗,直接上市。那么,测试保证了质量?
神说,你觉得蒙牛没有测试吗?
我说,....
神说,测试只是提供信息。至于这些信息的定义、重要性以及所要采取的反应都取决于人,而人做出的决定都是感性的,利益驱动的。
我叹口气,说,测试能够保证软件质量。
神说,如果开发的产品本身就质量低劣,进行测试你不觉得是浪费大家的时间吗?一段时间发现的缺陷越多,并不意味着剩下的缺陷越少,而是意味着会出现更多的缺陷。
我说,我明白了,测试只是反馈信息,除此之外,并不能做其他任何事情。正如我们去体检,体检报告只能反映当时我们的身体状态,至于健不健康,则取决于我们平时的生活习惯,这是两个分开的事情,体检并不保证我的健康。
神说,是的。
我说,那么,很多大公司非常看重测试部门,原因其实是他们无法看清楚他们自己的开发过程,于是只能从测试里获取信息,而这些信息对整个软件开发来说只是一部分而已。我看到过有项目经理向测试人员询问是否可以交付,这根本上就是在推卸责任,信息和作出决定根本是两回事,如果是这样,不如让测试人员来当经理好了。
(未完待续)
分享到:
相关推荐
其检测业务下又细分为四大版块:健康与环保、消费品质量鉴定、电子与安规、安全保障。在32个细分服务领域中,公司的检测业务占据绝对主导地位,营收占比超过99%。 2. 传统领域的竞争优势和增长动力: 公司在食品和...
1. 软件测试的目的与原则: - 目的:测试的主要目的是发现软件中的缺陷,降低产品开发风险,并记录软件运行的数据以提供决策支持。 - 原则:其中的“缺陷集群性”原理说明大部分缺陷会集中在软件的少数核心功能中...
学习探索式测试的问与答.本文摘录自《探索式测试实践之路》第1.3节,用对话的形式讨论探索式测试的概念与实践。提问者是本书的一位虚拟读者,回答者是本书的作者们。问:探索式测试中的“探索”该如何理解? 本文...
"数控机床问与答" 一、数控机床间隙测量及补偿 在数控机床的进给传动中,NC 指令移动值和运动部件的实际移动值的差值即间隙的存在一般是由下述几种原因造成的: * 轴承间隙 * 滚动丝杠付间的间隙及丝杠的弯曲振动...
"数控机床问与答知识" 一、数控机床间隙测量及补偿 数控机床在进给传动中总是存在有间隙,有间隙而未做补偿,会直接影响进给的伺服精度。在机床的进给传动中,NC 指令移动值和运动部件的实际移动值的差值即间隙的...
答:首先要有一个好的沟通,只有沟通无障碍了,才会有好的协作,才会有跟好的效率,再一个就是技术一定要过关,做测试要有足够的耐心,和一个良好的工作习惯,不懂的就问,实时与同事沟通这样的话才能做好测试工作。...
总的来说,虚拟机技术极大地扩展了计算机的使用范围,使得开发者、系统管理员和普通用户都能在同一个物理设备上同时体验和测试多种不同的操作系统环境。然而,随之而来的是各种配置和兼容性问题,解决这些问题需要对...
4. 多态:同一方法在不同对象上有不同的表现形式,通过接口和抽象类实现。 二、语法特性 1. 异常处理:Java通过try-catch-finally语句块处理运行时错误,提高程序健壮性。 2. 内存管理:自动垃圾回收机制,程序员...
将晶闸管VS与小灯泡EL串联,并通过开关S接在直流电源上。确保阳极A接电源正极,阴极K接电源负极,而控制极G则通过按钮开关SB接在3V直流电源的正极(对于KP1型晶闸管,则需接在1.5V直流电源的正极)。 - **导通条件*...
学生需要根据情境选择合适的问句或回答,涉及到询问职业、表达个人情况以及未来打算等话题。掌握这些对话模式有助于提高日常生活中的英语交流能力。 三、听力理解 这部分要求学生听取英语句子并选出相应的答语。这...
"服务通50问50答"是一份详细的文档,主要涵盖了在使用服务通过程中遇到的各种常见问题,以及对应的解答和解决方案。这份资料对于理解和掌握服务通的使用具有很高的参考价值。服务通是一款广泛应用于企业管理、IT服务...
",让学生将问句与答句匹配。第八题是排列句子,培养学生的语序感知和句子完整性。最后一部分是阅读理解,通过Betty生日的情境,讨论朋友如何前往Betty家,进一步检验学生的阅读理解能力和生活情境中的英语应用。 ...
### 技术术语100个问与答 #### 1. 数控加工 - **定义**:根据被加工零件图样和工艺要求,通过编制成以数码表示的程序输入到机床的数控装置或控制计算机中,以控制工件和工具的相对运动,最终加工出合格零件的方法。...
答:对于团队办卡的需求,我们通常会引导客户直接与店长或销售总监联系,他们会根据具体情况提供相应的解答。如果店长不在,我们会记录客人的信息并尽快转交。 4. 会籍时间可以转让吗?需要手续费吗? 答:会籍时间...
本教程"Visual C++应用技巧与常见问题你问我答"致力于帮助用户解决这些问题,提高编程效率。以下是针对该主题的一些关键知识点: 1. **环境配置**:安装Visual C++时,需要确保所有必要的组件如MFC(Microsoft ...