摘 要:如果函数存在多个出口,应注意函数对各个出口的处理。
问题描述:根据函数功能的需求,被测函数在函数体开始时保存了当前系统任务模式,并设置新的任务模式为不可抢占模式,在函数返回时应该恢复任务的旧模式,否则会影响整个系统功能的实现。可是问题就出在这里。由于函数有复杂的分支结构,有多个出口,有的出口对任务模式进行了恢复,有的出口没有恢复,这样就可能导致函数返回后系统任务模式被改变的问题。
问题分析:此问题出现的原因在于函数有多个出口,而程序员往往注重各个分支功能的实现的细节,而忽视了或者是忘记了在函数出口应做的收尾工作。这就象打一场战争一样,战争胜利了,还要打扫战场,开总结大会,否则就会象李自成一样,仗打完了就开始享受了,最后前功尽弃。毛主席说得好:“宜将剩勇追穷寇,不可沽名学霸王”。所以,函数出口的处理应充分重视。
案例意义:这类问题很常见,对于有多个出口的函数,测试时应充分构造测试例,采用分支覆盖的测试方法对函数各个出口的环境恢复、资源释放情况进行观察。对于编程人员来说,如果使函数有统一出口,可有效避免或减少类似问题。
1楼
0
0
回复
问题描述:根据函数功能的需求,被测函数在函数体开始时保存了当前系统任务模式,并设置新的任务模式为不可抢占模式,在函数返回时应该恢复任务的旧模式,否则会影响整个系统功能的实现。可是问题就出在这里。由于函数有复杂的分支结构,有多个出口,有的出口对任务模式进行了恢复,有的出口没有恢复,这样就可能导致函数返回后系统任务模式被改变的问题。
问题分析:此问题出现的原因在于函数有多个出口,而程序员往往注重各个分支功能的实现的细节,而忽视了或者是忘记了在函数出口应做的收尾工作。这就象打一场战争一样,战争胜利了,还要打扫战场,开总结大会,否则就会象李自成一样,仗打完了就开始享受了,最后前功尽弃。毛主席说得好:“宜将剩勇追穷寇,不可沽名学霸王”。所以,函数出口的处理应充分重视。
案例意义:这类问题很常见,对于有多个出口的函数,测试时应充分构造测试例,采用分支覆盖的测试方法对函数各个出口的环境恢复、资源释放情况进行观察。对于编程人员来说,如果使函数有统一出口,可有效避免或减少类似问题。