开发人员或测试人员工作没有做完,导致自己必须去现场调试或测试

现象

  部署人员:我部署完后,一运行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 测试人员测试没有做完

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

Ø 尽量在部署前测试到位

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

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

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

 

猜你喜欢

转载自qujianfeng.iteye.com/blog/794769