1 现象
部署人员:我部署完后,一运行XX模块,总是弹出一堆错误信息。
开发人员:你把该配置的都配置了吗?
部署人员:我都配了呀!
开发人员:奇怪,不可能啊。那你看看系统提示什么?
部署人员:看不懂,我复制下来给你发过来吧。
开发人员:好的。
开发人员收到后错误信息后,从其中并看不到任何错误原因,不知道错误是出自哪个类,更不知道是是出自哪一行代码。无奈之下……
开发人员:哥们,我还是到现场来用源代码跟踪调试一下吧。不过我估计你肯定是什么配置信息没有配置全,要是让我测出来了,你得好好请我一顿!
部署人员:呵呵,我确认我都配置全了。
第二天,开发人员到达现场,用笔记本连上系统,打开源代码工程,加上断点,一句一句跟踪,最后发现在如下方法中:
public Manufactory getFirstManufactory(){
ManufactoryDao dao=new ManufactoryDao();
List<Manufactory> allManufactory=dao.getManufactorysByType(
Manufactory.MANUFACOTRY_TYPE_LIGHT_PLATFORM);
Manufactory manufactory=allManufactory.get(0);
//其他一些代码
//...
return manufactory;
}
allManufactory列表中一个元素也没有。于是……
开发人员:大哥,你骗人,你没有配置厂家信息!走,请我吃饭去!
部署人员:不可能!我打开数据库看看,哦……,的确是没有配置。不好意思……
后来,这样的场景又出现了很多次,团队成员之间的信任几乎没有了。部署人员嫌开发人员做出的程序问题多,而开发人员又嫌部署人员水平差、没记性。
2 谁的责任
2.1开发人员程序没有做完
看一下开发人员写的如下程序:
/**
* 此类演示了一个没有完成程序
* @author qujianfeng
*
*/
public class UndoneExample {
/**
* 获取第一个厂家信息。(该方法仅仅是一个示例,假设有这么一个类似的需求。)
* @return
*/
public Manufactory getFirstManufactory(){
ManufactoryDao dao=new ManufactoryDao();
List<Manufactory> allManufactory=dao.getManufactorysByType(
Manufactory.MANUFACOTRY_TYPE_LIGHT_PLATFORM);
Manufactory manufactory=allManufactory.get(0);
//其他一些代码
//...
return manufactory;
}
}
仔细看这块代码,其实程序根本就没有做完!只考虑到了正常流程。此程序能够正常运行是基于两个假设:
首先,此程序假设allEmployee不为null。当然这个我们可以通过编码标准进行约束:不能返回为null的集合对象,即使元素数为0,也应返回一个集合对象,只是size为0而已。
其次,此程序假设allEmployee的size>0。当忘记配置或者配置被从数据库中误删时,此程序将在“Manufactory manufactory=allManufactory.get(0)”这句代码处会抛出如下异常:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
这样的异常信息即时在界面中显示出来,也没有任何帮助,应该给出更明确的提示信息。
有同志会这样修改如上程序:
public Manufactory getFirstManufactory(){
ManufactoryDao dao=new ManufactoryDao();
List<Manufactory> allManufactory=dao.getManufactorysByType(
Manufactory.MANUFACOTRY_TYPE_LIGHT_PLATFORM);
Manufactory manufactory=null;
if(allManufactory.size()>0){
manufactory=allManufactory.get(0);
}
//其他一些代码...
return manufactory;
}
当allEmployee的size为0时,若是没有在调用此方法的程序中做个判断进行提示。此程序的结果是:没有配置信息时,程序在运行时既没有正常运行,也没有报错。反正就是没有反应!这样,部署人员更无法知道原因!
既然此处的需求就是必须有光平台厂家的配置信息,那就在没有时直接给出一个明确的提示:
public Manufactory getFirstEmployee(){
ManufactoryDao dao=new ManufactoryDao();
List<Manufactory> allManufactory=dao.getManufactorysByType(
Manufactory.MANUFACOTRY_TYPE_LIGHT_PLATFORM);
if(allManufactory.size()==0){
throw new RuntimeException("没有配置光平台厂家信息!");
}
Manufactory manufactory=allManufactory.get(0);
//其他一些代码
//...
return manufactory;
}
现在,当忘记配置光平台厂家时,就可以给出一个明确的提示了,部署人员一看就知道问题出在哪了。部署人员再不会叫开发人员去现场调查了,整个世界清静了。
2.2 测试人员测试没有做完
这个当信息没有配置对时提示不明确的问题,不应该等到现场才发现,应该在测试阶段就测出来。测试人员肯定只测了正常流程,没有试着把厂家信息删掉后再测试一次,看系统有何反应,是否有容易理解、明确的提示信息。
Ø 尽量在部署前测试到位
开发人员发生上面那样的遗漏是有可能的,测试人员应该考虑到这种问题发生的可能性。测试人员的测试用例,应该全面,应把测试用例的全面性作为考核内容。另外,项目经理应该对测试用例进行检查,测试人员在认为自己工作完成后,然后在项目经理确认其测试用例及其测试结果都达到要求后,测试工作才算完成。
Ø 一旦发现问题,应及时完善程序,补上易于理解的提示信息
开发人员尽可能地不遗漏,测试人员尽可能地测出遗漏,但实际上不可能做到百分之百不遗漏。但是,如果在部署过程中或用户使用过程中,软件出现了错误,经过一番周折,发现程序对于错误并没有给出一个明确的提示,而是抛出了一段英文提示。此时,就应该尽快补上易于理解的提示信息,以免下次再被同样的问题困扰。测试人员有责任检查此工作是否完成,并在测试用例中补上遗漏的用例。
分享到:
相关推荐
.net开发人员调试策略,PDG格式的书,详细的阐述的在.Net开发环境下的调试技术
非常使用的抓包工具fiddler 学习测试使用开发工具 app开发调试工具 app测试调试工具。抓包工具fiddler,调试工具
1 开发 2 测试 3 调试 4 常用命令
当前版本:v2.0 开发背景: 对于需要编写并口通讯程序的人员来说,可能会需要一款方便的... 开发调试工具包包括三个功能模块:“并口调试器”、“并口测试信号发生器”和“并口监视器”, 分别针对不同的使用需求。
《.NET开发人员调试策略》.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
在云开发中,使用云函数会有很多坑。 1.调用云函数的时候,云函数调试时返回值不是null,但是到了前端拿到的result却是null。 2.调试云函数,本地调试和云端测试/真机测试结果不一样。表现为本地测试正常运行,云端...
.NET开发人员调试策略
对于需要编写并口通讯程序的人员来说,可能会需要一款方便的并口调试工具,开发调试工具包包括三个功能模块:“并口调试器”、“并口测试信号发生器”和“并口监视器”,分别针对不同的使用需求。
微信开发 调试工具 测试工具 微信开发中,如果有调试和测试工具,事半功倍,分享给大家
F12 开发人员工具调试网页 入门教程
按照尽早进行测试的原则,测试人员应该在需求阶段就介入,并贯穿软件开发的全过程。就测试过程本身而言,应该包含以s下几个阶段。 -测试需求的分析和确定。 -测试计划。 -测试设计。 -测试执行。 -...
程序人员测试调试webservice,是开发人员必备工具,你珍藏了么?
有的开发人员不惜花上大把的时间去拷贝测试环境代码到本地来调式。在此,我探索了一种新的调试方式。我这调试方式可以直接在测试环境重现问题,而测试环境走的代码会经过我本地的断点。更重要的一点是可以远程调试...
嵌入式系统测试与调试
一款针对开发者和测试者的调试工具,它可以帮助你在非Xcode的情况下,进行数据分析和操作。
JavaCardApplet开发调试及测试脚本的编写执行.pdf
《Android应用测试与调试实战》高清完整版是Android应用测试与调试领域最为系统、深入且极具实践指导意义的著作,由拥有近10年从业经验的资深软件开发工程师和调试技术专家撰写,旨在为广大程序员开发高质量的...
该文档包含计算机常用英语其内容(软件开发,测试,硬件,调试),这里的词汇翻译比较专业。
在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性。而这要求前端开发进度和后端进度保持基本一致,任何一方的进度跟不上,都无法及时完成功能模块的...
Postman是一款非常流行的接口调试工具,它使用简单,而且功能也很强大。不仅测试人员会使用,开发人员也会经常使用。