`
qujianfeng
  • 浏览: 77666 次
  • 性别: Icon_minigender_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,也应返回一个集合对象,只是size0而已。

  其次,此程序假设allEmployeesize>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;

    }

  当allEmployeesize0时,若是没有在调用此方法的程序中做个判断进行提示。此程序的结果是:没有配置信息时,程序在运行时既没有正常运行,也没有报错。反正就是没有反应!这样,部署人员更无法知道原因!

 

  既然此处的需求就是必须有光平台厂家的配置信息,那就在没有时直接给出一个明确的提示:

    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 测试人员测试没有做完

 

 

  这个当信息没有配置对时提示不明确的问题,不应该等到现场才发现,应该在测试阶段就测出来。测试人员肯定只测了正常流程,没有试着把厂家信息删掉后再测试一次,看系统有何反应,是否有容易理解、明确的提示信息。

Ø 尽量在部署前测试到位

  开发人员发生上面那样的遗漏是有可能的,测试人员应该考虑到这种问题发生的可能性。测试人员的测试用例,应该全面,应把测试用例的全面性作为考核内容。另外,项目经理应该对测试用例进行检查,测试人员在认为自己工作完成后,然后在项目经理确认其测试用例及其测试结果都达到要求后,测试工作才算完成。

Ø 一旦发现问题,应及时完善程序,补上易于理解的提示信息

  开发人员尽可能地不遗漏,测试人员尽可能地测出遗漏,但实际上不可能做到百分之百不遗漏。但是,如果在部署过程中或用户使用过程中,软件出现了错误,经过一番周折,发现程序对于错误并没有给出一个明确的提示,而是抛出了一段英文提示。此时,就应该尽快补上易于理解的提示信息,以免下次再被同样的问题困扰。测试人员有责任检查此工作是否完成,并在测试用例中补上遗漏的用例。

 

0
0
分享到:
评论
1 楼 roadlord 2012-02-26  
另外,项目经理应该对测试用例进行检查,测试人员在认为自己工作完成后,然后在项目经理确认其测试用例及其测试结果都达到要求后,测试工作才算完成。

这句话之前写得都挺认可,但不是每个项目经理都懂测试,我见过的大多数项目经理都不懂测试,这只是一方面。另一方面,即使项目经理懂测试,他还去确认测试用例云云,那他的项目经理当的够辛苦。鄙人觉得测试用例=相关case的责任主要在承担模块的测试人员,如果这个测试人员水平欠缺,应落实确认测试用例等的责任到测试小组长。当然有的单位可能没有测试组长类的,而且测试人员水平有限,这时测试人员有些case覆盖不全面等等问题可能发生,这是不可避免的,是客观规律啊。开发和测试齐心协力,相互帮助吧。另外我感觉敏捷和XP在本土化得单位多少还是有点水土不服的,可能是我的认识有限吧。

相关推荐

Global site tag (gtag.js) - Google Analytics