软件测评师05年真题及解答

2011-05-11  唐龙远 

软件测评师05年真题及解答:

1.白盒测试方法中的代码检查法需要重点考虑代码的执行效率,阅读以下两个循环,回答问题1和问题2。

      循环1:
      for (i=0;i<n;i++)
      {
      if(condition)
      DoSomething();
      else
      DoOtherthing();
      }

      循环2:
      if(condition)
      {
      for (i=0;i<n;i++)
      DoSomething()
      }
      else
      {
      for (i=0;i<n;i++)
      DoOtherthing();
      }
      问题1:循环1的优点和缺点。
      问题2:循环2的优点和缺点。

分析:

前者:
优点:程序简洁
条件判断出现在For里面,意味着,即使我在dosomething()或dootherthing()这2个函数中改变了condition的值,For循环也能正确执行我的意图,因为它在每次循环中都会重新检测conditon的值并针对condition的值做不同动作,所谓以不变应万变,这是难能可贵的.   
缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。
如果condition一直未曾改变,我们可怜的if必须每次循环都判断一下condition的真假.牺牲了运行时效率.

后者:
优点:循环的效率高。只进行一次判断,运行时效率高.适合那种condition的值不会改变的情况.
缺点:由于只在一开始进行一次判断,所以失去的改变condition的值的机会,也就是说,即使我在dosomething()中改变了condition的值为false,这个程序也不会改变它的判断,它依然执行着dosomething()的循环.我们不能随时更换我们需要进行的动作。这是牺牲了弹性。

N较大时,建议采用后面这种写法,由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。


295°/2933 人阅读/2 条评论 发表评论

孙承芬  2011-05-12

一看就知道第二个执行效率高,但是要自己解释起来还真没有那么专业呢


唐龙远  2011-05-13

是啊,那是一个专家写的,我转过来的。


登录 后发表评论