zoukankan      html  css  js  c++  java
  • 开发测试的理想模型

    # 开发测试的理想模型

    对于计算机行业来说,软件的开发和测试,永远有聊不完的话题。在整个软件开发过程中,无论你是一位开发工程师,还是一位测试工程师,都应该对软件质量负责,大家共同的目标是尽可能快速的交付一个可以正常工作的软件。但是在实际的开发活动中,往往又会碰到很多开发和测试的问题。

    ## 软件交付件的质量问题

    这个问题,责任应该主要在开发人员身上。只有开发人员做好交付件质量检查,才可以保证交付给测试的软件包是可以被正常使用的。但是人永远是不可靠的动物,人的能动性太强,灵活性也导致了不可控因素。希望通过宣贯和强调来保证开发交付件质量,基本属于不可能完成的任务。
    在无法依靠人来解决这个问题的时候,就只能依靠制度和工具了。

    1. 交付测试之前必须通过一系列硬性条件。
    1. 静态检查。比如,代码中的所有警告必须被处理;无法被阅读的代码,需要重构;
    2. 所有代码必须经过代码审核,已提交的代码如果发现低级错误,那么负责代码审核的工程师(一般为架构师或者开发负责人),必须承担责任;
    3. 所有代码必须符合代码规范,是可读的,易于维护的代码。
    4. 必要的关键代码,必须有测试用例,提交代码更新时,所有测试用例必须能够正常通过。

    2. 软件的开发过程,应该是易于测试的。每一个开发人员,应该有一个完整的开发运行环境。这一条虽然看起来是理所当然的,但是在一些大型的项目中,往往一个开发人员,只拥有部分代码权限,甚至一个开发人员,只懂得系统一个关键部件的开发部署,对于不是自己负责的模块,如何部署、运行都是一个不小的挑战。

    ## 软件责任问题

    在从业的前几年,甚至在前一段时间,我都没有意识到“责任”这两个字有多重要!在新员工面试时,很多人在简历里面都会提到自己是一个责任心很强的一个人。但是具体这个“责任心”要落实到什么地方呢?在开发活动的过程中,我认为以下几个方面的负责人,必须有责任心:
    1. 软件开发人员的责任心。软件开发人员的责任,是完成开发任务,对自己负责的软件任务,必须有责任心去处理。
    2. 测试人员的责任心。测试往往是一个枯燥的过程,它需要一个人有强大的内心和耐心面对各种各样的测试问题。一旦软件从测试的手中流露到市场或者正式的运行环境,那么之后出现的问题,就应该被定义为测试的问题。这样说也许有一些偏颇,至少可以被分为两类。
    1. 真的是漏测了。有一些问题在测试过程中没有被发现属于漏检,这是测试必须承担责任,不应该找各种理由回避或者推脱。
    2. 属于软件的设计缺陷。一款软件从需求到开发到运维,不可避免的有一些需求在定义的时候就已经出现了问题。我们现在的开发测试模型,还没有达到快速迭代的模式,从需求到最终实现的这段时间里面,也许真正到软件实现的时候,需求已经发生变化了。
    3. 软件负责人的责任心。对于责任界线,实际上在所有的项目中都不会,也不应该被定义的那么清晰,所有人都应该对软件负责,而不是死板的定义在某个阶段某一些人需要负责。我们共同的目标,是交付可用的软件。面对问题,应当群里群策,共同解决问题,而不是一味的把问题提交给队友。

    ## 软件交付的方式方法
    传统的软件交付方法,不外乎编译、联编、出安装包,然后测试到约定好的位置,获取安装包,进行软件的安装,然后开展测试活动。如下图:

    ```flow
    st=>start: 开始
    e=>end: 结束
    cp=>operation: 编译
    ci=>operation: 联编
    package=>operation: 安装包
    ins=>operation: 安装
    unins=>operation: 卸载
    tst=>operation: 开始测试活动
    tstFinish=>operation: 结束测试活动
    cond=>condition: 是否已安装?

    st->cp->ci->package->cond
    cond(yes)->unins->ins
    cond(no)->ins->tst->tstFinish->e

    ```
    在这样的软件交付方式中,不可避免的就是测试环境的搭建,说白了,就是软件的安装和卸载。对大型软件项目来说,测试环境的搭建,是一个耗时耗力,但是又不讨好的事情。最理想的软件交付方式,也许可以被描述如下图所示:

    ```flow
    st=>start: 开始
    e=>end: 结束
    cp=>operation: 编译
    publish=>operation: 发布
    sync=>operation: 测试同步最新程序
    tst=>operation: 开始测试活动

    st->cp->publish->sync->tst->e

    ```
    如果可以使用上述的这个过程,来实现开发和测试之间的交付过程,将大大减少测试因为环境搭建引起的额外的工作量,同时也避免了由于测试的软件版本和开发的软件版本不一样,造成的缺陷无法重现的问题。这样的解决方案,也许才是真正适合敏捷开发的解决方案,测试可以快速的拿到最新的软件包,当发现缺陷并反馈后,开发完成缺陷的修复,增量式的将代码提交给测试,测试只需要做同步,即可以验证软件是否已经符合预期。

  • 相关阅读:
    git 学习
    ruby on rails 把阿里云上的图片资源转移到七牛云上写的一个task 文件 自动转移
    修改mysql的默认编码
    ruby on rails 安装中遇到的一些问题
    unity打包资源格式全解析
    unity打包全过程解析
    mmorpg手游中的战斗系统
    在线调试lua原型设计
    lua特性纪要
    软件开发中的哲学问题
  • 原文地址:https://www.cnblogs.com/malloc/p/9406402.html
Copyright © 2011-2022 走看看