美文网首页
做自己的QA

做自己的QA

作者: AKyS佐毅 | 来源:发表于2020-10-20 10:38 被阅读0次

    背景

    在测试和生产环境出现的一些问题,无论级别程度,这些问题会产生不可预知的负面影响。

    不能因为QA同事的存在就放松研发自己的警惕,或者说,降低自己的标准。

    测试作为发生线上问题一道重要防线,不可使其孤军奋战。QA 并不能生产质量,开发才是质量的生产者。

    目的

    提升研发交付质量 。以降低提测bug为己任,消灭线上问题为目标。

    应对措施

    • 1、关注参数的校验,包括长度、字符集(数字?字母?大小写?)、NULL、非空、类型(整数、小数点几位?)、必填等
    • 2、关注边界值的验证,包括最小值、最大值、临界值、数组长度等
    • 3、关注异常(Exception)的处理及NULL的判断,保证程序的健壮性
    • 4、常用的方法一定要抽取出来,做成通用的逻辑(比如精度的处理、小数点位的处理、response的发送等)
    • 5、代码合并提交之前,必须做二次确认,确保合并正确
    • 6、文案、报错信息、时间格式、数据精度等必须跟需求一致,或者跟产品、测试讨论清楚
    • 7、确认各套环境的变量、SQL语句是否正确、设置到位
    • 8、数据库里的各个字段是否被正常的更新
    • 9、编码过程中彻底了解每个类 / 方法的使用场景及其使用方法
    • 10、定期(每个迭代周期 / 项目完结后)分析个人 / 本组的bug情况,针对常见bug进行宣贯并更新代码 review的checklist
    • 11、需要特别关注异常场景,比如MQ的顺序、锁的使用及其释放、队列的长度、线程安全等
    • 12、回归过程中 / GR上发现的bug,讨论清楚后再动手修改,避免修改造成其他bug,修改范围要可控
    • 13、重要迭代 / 项目,研发必须跑通冒烟用例,如果有时间,可以找测试要全量的测试用例
    • 14、在技术需求、系统需求的jira单子里,写清楚本次需求开发中需要注意的地方,开发完成后再对照- - 15、产品需求,确认无遗漏
    • 16、前端界面的测试,可以使用交叉测试
    • 17、避免根据字符串匹配做相关逻辑操作,使用key关键字做匹配,避免他人修改字符串值引起bug。

    所有的逻辑分支都要覆盖
    所有的逻辑组合都要覆盖
    正常系、异常系都要覆盖
    各种错误码的场景都要覆盖
    入参边界值都要覆盖

    举例:以下的函数,根据用户输入的年龄,判断是否可以进行工作,同时也会检验用户实际的年龄跟输入的年龄是否符合

    int checkAge(int age,long userId){
    
        if (WORD_AGE_MIN > age || WORK_AGE_MAX < age)  {        /* 代码段A*/
    
             log.error("illegal age range,age={}, id={}", age, userId);
    
             return ERROR_AGE_RANGE;
    
        }
    
        userDto user = getUserInfoById(userId);      /* 代码段B*/
    
        if (NULL == user) {
    
            log.error("call getUserInfoById error, id={}", userId);
    
            return ERROR_GET_USER_INFO;
    
        } else {
    
             /* 从身份证信息推断用户的age是否OK */
    
           int actualAge = user.getAgeByIdCard();
    
           if (actualAge != age)  {
    
                log.error("age error. age={}, actualAge={}, id={}", age, actualAge, userId);
    
                return ERROR_AGE_NOT_EQUAL;
    
           }
    
           return OK;
    
      } 
    

    为了进行全面的自测,我们需要进行以下的测试:

    代码段A:
    为了进行代码段A的测试,需要将age所有的取值,包括边界值,都考虑到,需要构造以下的场景:

    1 小于WORD_AGE_MIN 测试if (WORD_AGE_MIN > age || WORK_AGE_MAX < age),并且条件符合 ERROR_AGE_RANGE;
    2 等于WORD_AGE_MIN 测试if (WORD_AGE_MIN > age || WORK_AGE_MAX < age),条件不符合 继续往下跑,跑代码段B
    3 介于WORD_AGE_MIN与WORD_AGE_MAX 测试if (WORD_AGE_MIN > age || WORK_AGE_MAX < age),条件不符合 继续往下跑,跑代码段B
    4 等于WORD_AGE_MAX 测试if (WORD_AGE_MIN > age || WORK_AGE_MAX < age),条件不符合 继续往下跑,跑代码段B
    5 大于WORD_AGE_MAX 测试if (WORD_AGE_MIN > age || WORK_AGE_MAX < age),并且条件符合 ERROR_AGE_RANGE;

    代码段B:
    为了进行代码段B的测试,需要构造以下的场景

    6 不存在的userId或者调用出错的 if (NULL == user) ,条件成立 ERROR_GET_USER_INFO
    7 能够获取到用户实际年龄,并且是虚假年龄 if (actualAge != age) ,条件成立 ERROR_AGE_NOT_EQUAL
    8 能够获取到用户实际年龄,并且是真实年龄 if (actualAge != age) ,条件不成立 OK

    综合来看,场景3,4,5能往下跑,而为了测试代码段B,需要场景6,7,8,所以从整个逻辑来看,我们需要构造5个case,能够跑遍所有的逻辑,

    同时返回所有的错误码,这5个是必测的,如果你有更多的测试时间,当然也可以构造更多的case进行自测

    1 age 小于WORD_AGE_MIN,userId实际存在 ERROR_AGE_RANGE
    2 age 等于WORD_AGE_MIN,userId不存在 ERROR_GET_USER_INFO
    3 age 介于WORD_AGE_MIN与WORD_AGE_MAX,userId对应的用户信息年龄等于age OK
    4 age 等于WORD_AGE_MAX,userId对应的用户信息年龄不等于age ERROR_AGE_NOT_EQUAL
    5 age 大于WORD_AGE_MAX,userId实际存在 ERROR_AGE_RANGE

    相关文章

      网友评论

          本文标题:做自己的QA

          本文链接:https://www.haomeiwen.com/subject/ukmfyktx.html