测试经验1_2016-2017

做测试两年,今天开始记录平时的工作总结:

  1. SCR应该要有CASE覆盖
  2. 提的SCR 一定要弄明白为什么会出现这个现象,不能发现问题了就扔给开发,
  3. 写case 的时候应该要注意写清楚 是怎么设计这个CASE的,怎么造故障的, 莱茵comments
  4. 代码升版的时候,回归时要注重返回值的修改, 在修改的过程中可能会遗漏返回值, I2C 刘罗 BSP
  5. 测试的全面, 验证三种组合, 该功能做了,该功能没做,该功能做失败了三种情况
    eg, 1,能检测到温度,2,温度检测失败,3检测不到温度三种情况
  6. 在写测试case时尽量一条case对应一条需求,不要一条case追踪了多条需求,因为如果需求有变更,可以只改对应的case就可以
    但若一条case对应了多条需求,若其中一条需求更改了,那这条case是改还是不改呢,很难判断,需要再比较该case对应的其他需求是否更改。 2018-1-11, 机场线obcu_ATP_SwRS case更新
    有的情况可能一条case可以对应两条需求,例如,1:OBCU 会EB,2:obcu会将EB信息发给ATS/DMI
    需要一条case对应两条需求时,在Tital中写清楚两个验证的点,并和requirement ID的 需求号一一对应。便于后期维护case.
1. 边界值的变化,  比如一个累加变量的范围为[ 1- 255]  从255到1 的变化过程应该被测试
2. 返回值的判断,  有可能会漏掉某种情况的返回值赋值,
     if()
    {
         ….
          return ok;
    }
    else
    {
        ……..
        return error;
    }

3. 循环中有标志位判断时,循环退出后应该将标志位置为初始化数据, 保证下次进入循环时的数据是初始化的数据,
否则有可能下次循环错误时,但保存的值是上次更改的值
                  for (ulLoop = 0U; ulLoop < ulItemNum; ulLoop++)
        {
            iRet = VPLT_ERR;
            ASSERT(NULL != g_astInitCtrlBlock[ulLoop].fModuleInit);
            iRet = g_astInitCtrlBlock[ulLoop].fModuleInit();
            if(VPLT_OK != iRet)
            {
                TF("[Init]module(0x%x) err(%08x)
", g_astInitCtrlBlock[ulLoop].ulInitID, iRet);
                ulErrId = g_astInitCtrlBlock[ulLoop].ulInitID;
                break;
            }
            else
            {
                TF("[Init]module(0x%x) ok
", g_astInitCtrlBlock[ulLoop].ulInitID);
                ulInitStat |= (UINT32)((UINT32)1U << g_astInitCtrlBlock[ulLoop].ulInitID);
            }
        }
4.   while((TRUE == bNeedSendR1Flag) || (TRUE == bNeedSendR2Flag))  
  应该分为 bNeedSendR1Flag = True/False , bNeedSendR2Flag = True/False几种情况测试
5. 错误计数增加时, 需要注意该计数值什么时候被清空,有多少种情况应该被清空
6. 测试连接断开时,还应该测试重新连接后 是否通信正常。
7.时间的配置, 比如 周期容忍时间 1ms, 速度10ms采集一次,温度10ms检查一次,需要注意 时间是否配置正确。
原文地址:https://www.cnblogs.com/gongfuxiaozhen/p/8544840.html