所谓测试优先,就是要先把测试准备好,以便在功能做了后马上可以测试

提出测试优先,也很好地说明了测试的重要性,这是无数工程师呕心的体验得出的结论,不测试,或不能很好地进行测试,往往会付出惨重的代价。

当不好进行测试时

(1) 完成一次测试过于痛苦,极大降低工作效率;
(2) 很可能选择不进行全面测试,在压力之下先上线,后患无穷。

不正确的测试姿势

(1)把简单的使用当作全部的测试
把测试认为是简单的使用一下是不正确的。
要正确认识测试的重要性,以开发同等重要的方式将测试作为工作内容,同时对测试分级别、场景、角色分别予以开展。
(2)没有测试计划
对测试没有进行系统化的分析,以碰运气的方式零星地进行。事实上,测试是需要工程化、系统化进行分析与设定的,它也应该有清晰的目标与范围。为了能全面覆盖方方面面,需要严谨地制定测试计划。即便简单点,至少需要列个涉及关键步骤的清单来进行,根据清单来能避免遗漏,呵呵。
(3)没有测试记录
测试发现的问题有多种,解决的方式也有多种选择,对测试不仅要记录测试的结果,同时要记录问题可能存在的隐性特性及处理办法,并要形成问题处理清单做为再次验证的基础。

测试优先小小践行

无论的大方面的系统,还是小方面的功能,都可以践行测试先行!
举个小例,假如有以下代码,我们需要在 // 处添加功能部分 。

$.ajax({
    type: "POST",
    url: "xxxx/yyyy",
    data: { act: "fetch" },
    success: function (resp) {
            var jo = eval("(" + resp + ")");
            var r0 = jo.calvalue;
            // 添加功能部分,根据取得的值完成某些渲染
    },
    error: function (h) {
        alert(h.statusText);
    }
});

因为它的执行路径依赖于 url 的请求,所以对添加部分的测试很不方便。此时,如何能方便地测试就是重要的事情了。在做这件事之前,先应该规划好如何测试这部分代码确保它是可运行的。

看得出,当我们以此为重去做的时候,很可能会把这一部分独立成一个方法,以便于独立地进行测试。于是对代码的组织就提出了要求,事实上它倒逼着我们更好的组织自己的代码。如此即方便测试,结构又更优雅。

可能会形成这样的方法:

function processCalvalue(calvalue) {
    // 具体处理代码;
}

上述 success 中则变成了简单的一句,功能在上边的方法中完成。

success: function (resp) {
        var jo = eval("(" + resp + ")");
        var r0 = jo.calvalue;
        // 添加功能部分,根据取得的值完成某些渲染
        processCalvalue(r0);
},

在本地进行测试的代码就可能是:

$(function () {
    // 测试运行
    processCalvalue(123456);
})

良好的测试准备与习惯会为您节省非常多的时间,并让自己更有把握。共勉!

07-23 20:45