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

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

  • 相关阅读:
    Python中所有的关键字
    关于selenium的8种元素定位
    对提示框的操作
    selenium+webservice进行百度登录
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled...报错解决
    Vue中使用echarts
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142解决方法
    插入排序
    冒泡排序优化
    roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决
  • 原文地址:https://www.cnblogs.com/malloc/p/9406402.html
Copyright © 2011-2022 走看看