`
he91_com
  • 浏览: 410810 次
文章分类
社区版块
存档分类
最新评论

用例执行顺序缺陷

 
阅读更多


Risk_strategy(策略表)中是记录所有的累计策略,其中五个关键字段为main_type, conditions, interval, type,_event,还有一个字段是时长,其中interval字段允许为空,其它均不能为空。

Risk_key(策略KEY)中是记录所有的KEY,根据五个关键字段为main_type, conditions, interval, type,event来生成一个索引ID。其中interval字段允许为空,其它均不能为空。

背景介绍,新增策略时,根据上述五个关键字来生成一个新的KEY。如果两个累计策略,上述五个关键字相同,但是时长不同,此时会共用相同的KEY。

策略删除一条记录时,会根据上述五个关键字去搜索策略表,搜索到占用时就不允许删除,而搜索不到时才允许删除。

删除时查找索引ID的SQL如下:

SQL-1:

 select   ID,STRATEGY_NAME,_MAIN_TYPE,_CYCLE,_CONDITIONS,_EVENT,
           _INTERVAL,_TYPE,_DESCRIPTION,
           _MEMO,_STATUS,GMT_CREATE,GMT_MODIFY,OPERATOR_ID,MODIFY_OPERATOR
           fromrisk__strategy t1 where t1._STATUS = 'U'
           andt1.MAIN_TYPE = #MainType#
           andt1.CONDITIONS = #Conditions#
           andt1.EVENT = #Event#
           andt1.TYPE like CONCAT('%',#Type#,'%')
           <dynamic prepend="and">
              <isNotNullprepend="and" property="Interval">
                  t1.INTERVAL= #Interval#
               </isNotNull>
           </dynamic>

SQL-2:

select  ID,STRATEGY_NAME,_MAIN_TYPE,_CYCLE,_CONDITIONS,_EVENT,
           _INTERVAL,_TYPE,_DESCRIPTION,
           _MEMO,_STATUS,GMT_CREATE,GMT_MODIFY,OPERATOR_ID,MODIFY_OPERATOR
           fromrisk_strategy t1 where t1._STATUS = 'U'
           andt1.MAIN_TYPE = #MainType#
           andt1.CONDITIONS = #Conditions#
           andt1.EVENT = #Event#
           andt1.TYPE like CONCAT('%',#Type#,'%')
           and t1.INTERVAL = #Interval#

SQL-3:

 select    ID,STRATEGY_NAME,_MAIN_TYPE,_CYCLE,_CONDITIONS,_EVENT,
           _INTERVAL,_TYPE,_DESCRIPTION,
           _MEMO,_STATUS,GMT_CREATE,GMT_MODIFY,OPERATOR_ID,MODIFY_OPERATOR
           fromrisk_strategy t1 where t1.STATUS = 'U'
           andt1.MAIN_TYPE = #MainType#
           andt1.CONDITIONS = #Conditions#
           andt1.EVENT = #Event#
           andt1.TYPE like CONCAT('%',#Type#,'%')
           <dynamic prepend="and">
              <isNotNullprepend="and" property="Interval">
                  t1.INTERVAL= #Interval#
               </isNotNull>
               <isNull prepend="and" property="Interval">
                  t1.INTERVAL IS NULL
               </isNull>
           </dynamic>


在risk_strategy(策略表)中,有两条策略,策略A与策略B相同,唯一不同的是_interval字段,表示时间段。A策略此处为空,B策略此处为15:00-20:00。

risk__strategy表中记录如下:

策略A:main_type = 11,conditions = 22,_type = 33, event=44,interval 为空,时长为2天。

策略B:main_type = 11,conditions = 22,type = 33, event=44,interval=15:00-20:00,时长为3天。

策略C:main_type = 11, conditions = 22, type = 33, event=44,interval 为空,时长为15天。

在risk_key(策略索引ID表)中,有两条索引ID,暂定义为索引A与索引B。

索引A:main_type = 11, conditions = 22, type = 33, event=44,interval 为空。

索引B:main_type = 11, conditions = 22, type = 33, event=44,interval=15:00-20:00。


其中策略A与策略C同时占用索引A,而策略B占用索引B。

那么请问先删除A与先删除B会有什么结果不同吗?

在SQL-1的情况下,先删除策略A,会去查询索引A有没有被占用,根据SQL-1的结果,自动生成的SQL如下:

select * from  risk__strategy t1
where t1.STATUS = 'U'
and t1.MAIN_TYPE = 11
and t1.CONDITIONS = 22
and t1.EVENT = 44
and t1.TYPE like CONCAT('%',33,'%')


因为INTERVAL字段为空,所以

and t1.INTERVAL = 15:00-20:00

此句SQL未被包含进去。查询出来的结果是策略B也在占用,导致未被使用的索引A未被删除。

实际上索引A应该被删除。

如果先删除策略B,则索引B会被删除掉,然后再删除策略A,索引A被删除,功能正常。就发现不了上述问题。

SQL-2的情况下,先删除策略A,根据SQL-2的结果,自动生成的SQL如下:

select  *  from  risk_strategy t1
where t1.STATUS = 'U'
and t1.MAIN_TYPE = 11
and t1.CONDITIONS = 22
and t1.EVENT = 44
and t1.TYPE like CONCAT('%',33,'%')
and t1.INTERVAL = null


删除索引A时,根据上述SQL去查询,由于t1.INTERVAL = null永远为假,因此查询出来的结果为始终没有累计策略占用,但是此时另外有一个策略C占用,没有查询不出来。导致不管有没有占用,都会直接被删除。

如果先删除策略B,那么会直接把索引B删除,再删除策略A时,那么会把索引A删除掉,那么就不会发现这个问题。另外如果此时再删除策略C,那么也能发现这个问题。

SQL-3为修复后正确的SQL!

上述的问题跟测试用例执行的顺序是有关系的,只有在特定的顺序下才能发现,是偶然的BUG或者几率性的BUG吗?

没有偶然的或者几率性的BUG,只是我们没有真正找到他们的规律,这个是个漫长的过程,加油,慢慢寻找BUG的本源。

这个BUG算是一个提醒,希望从现在开始,关注到SQL这层。

分享到:
评论

相关推荐

    测试用例的讲解

    4. 优先级:根据业务重要性和风险评估,确定测试用例的执行顺序。 5. 独立性:每个测试用例应独立于其他用例,避免相互影响。 创建有效的测试用例通常包括以下步骤: 1. 分析需求:理解软件的功能需求,确定需要...

    一个测试用例的排序方法

    测试用例排序是指根据特定的目标或标准,调整测试用例集合中各个测试用例的执行顺序,使得优先级较高的测试用例在测试流程中得到优先执行。这种方法旨在减少回归测试的整体成本,同时提高缺陷检测的速度和准确性。...

    系统测试用例评审检查表.pdf

    6. **测试数据的创建**:测试数据是测试用例执行的基础,应确保其真实性和完整性。设计和创建合适的测试数据可以更好地模拟实际环境,提升测试效果。 7. **用例关联性的描述**:对于有依赖关系的测试用例,需要明确...

    测试用例内有三个测试用例相关文件

    - **优先级**:测试用例的重要程度,用于决定测试顺序。 - **状态**:测试用例的状态,如新建、待执行、通过、失败等。 2. **详细测试用例.doc**:这份Word文档可能包含了一个或多个具体测试用例的详细描述,每个...

    软件测试用例-编写模板

    10. 优先级和状态:表示测试用例的执行顺序和当前状态(如未执行、执行中、已通过、已失败)。 三、Excel模式的测试用例管理 1. 表格结构:利用Excel的行列布局,清晰地展示测试用例的各个要素。 2. 条目排序:...

    Excel模板软件测试用例.zip

    8. **优先级**:根据功能的重要性或影响范围,确定测试用例的执行顺序。 9. **关联需求**:与测试用例相关的功能需求或用户故事编号。 使用Excel模板来管理测试用例有以下优势: - **结构化数据**:Excel提供了表格...

    测试用例模版,测试用例模版,软件测试模版,用例模版

    首先,测试用例是一个详细的文档,定义了在特定条件下对软件执行的操作及其预期结果。其目的是验证软件的某个功能或特性是否按预期工作。测试用例通常包括以下部分: 1. **ID**:每个测试用例都有一个唯一的标识符...

    测试用例——测试用例模版

    11. **步骤**:列出执行测试用例的具体操作,顺序清晰,便于执行。 12. **输入数据**:测试过程中需要用到的数据,可以是静态的预设值或动态生成的。 13. **预期结果**:根据功能需求,预测执行步骤后应得到的结果...

    商品类别修改测试用例缺陷报告.doc

    在“商品类别修改测试用例缺陷报告”中,我们关注的是商品分类系统的修改功能,特别是涉及到用户选择商品类别的操作。这份报告详细记录了一个具体的缺陷,即“全选”功能无法正常工作。 缺陷ID1是一个关键问题,...

    英文测试用例 来自外企

    8. **优先级**和**严重性**:分别表示测试用例的重要性和缺陷的严重程度。 9. **关联的用户故事**或**需求编号**:将测试用例与业务需求或用户需求关联起来。 10. **测试数据**:可能涉及的输入数据和预设条件。 ...

    基本路径测试用例设计

    它是一个图形表示形式,用于描绘程序中各个语句的执行顺序以及条件判断的影响。在提供的代码中,程序用于计算给定年份和月份的天数。控制流图展示了程序中的不同路径,包括条件判断和循环结构。例如,当`month == 2`...

    软件测试用例管理工具

    数据库在测试用例管理中起着关键作用,因为它能够存储大量的测试信息,如用例细节、执行状态、缺陷记录等,并能快速查询和分析这些数据,为决策提供依据。 标签中的“测试”指的是整个软件质量保证的过程,这包括...

    测试用例模板.rar

    4. **步骤**:详细的操作顺序,描述如何执行测试。 5. **预期结果**:在成功执行测试用例后,系统应呈现的结果。 6. **实际结果**:测试执行的实际输出,与预期结果对比以判断是否通过。 7. **测试优先级**:根据其...

    CK测试用例

    - 测试步骤:按顺序列出的执行步骤,详细描述操作过程。 - 预期结果:测试后应达到的预期状态或输出。 - 实际结果:实际执行时获取的结果,用于与预期结果对比。 - 结果判定:通过/失败,或者需要进一步调查的情况。...

    软件测试用例模板 测试要求

    3. **测试步骤**:详述执行测试的具体操作,按顺序列出。 4. **预期结果**:清晰定义测试执行后的预期输出,作为判断测试是否通过的依据。 5. **实际结果**:记录测试执行的实际输出,用于比较与预期结果的差异。 6....

    软件测试用例文档模板

    2. **优先级**:根据业务重要性和缺陷影响程度,确定测试用例的执行顺序。 3. **预条件**:执行测试前需要满足的环境或状态,例如系统配置、数据准备等。 4. **步骤**:详细列出执行测试的每一步操作,应简洁明了,...

    系统功能测试用例

    系统功能测试用例是软件测试过程中的核心环节,它详细定义了系统必须执行的各种操作以及期望的结果,确保软件...通过深入分析和执行这些测试用例,我们可以发现潜在的缺陷,提前修复问题,提升软件产品的用户满意度。

Global site tag (gtag.js) - Google Analytics