Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5223602
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: 嵌入式

2012-01-31 15:38:54

欢迎访问 sinodragon21.cublog.cn
转载请注明出处

 
乍一看,下面的代码段是正确的

  1. public static Int64 BytesToInt64(byte[] buf, uint offset)

  2.         {

  3.             Debug.Assert(buf.Length - offset >= 8);



  4.             Int64 n = (Int64)(buf[offset] +

  5.                             buf[offset + 1] * (1 << 8) +

  6.                             buf[offset + 2] * (1 << 16) +

  7.                             buf[offset + 3] * (1 << 24) +

  8.                             buf[offset + 4] * (1 << 32) +

  9.                             buf[offset + 5] * (1 << 40) +

  10.                             buf[offset + 6] * (1 << 48) +

  11.                             buf[offset + 7] * (1 << 56));

  12.             return n;

  13.         }

 

其实存在潜在的bug,在对该函数做单元测试(unit test)时,发现了bug。 测试用例如下:
  1. public partial class TxMathTest
  2.     {
  3.         [TestMethod]
  4.         public void BytesToInt64204()
  5.         {
  6.             long l;
  7.             byte[] bts = { 0x12, 0x34, 0x56, 0x78, 0x12, 0x34, 0x56, 0x78 };
  8.             l = this.BytesToInt64(bts, 0u);
  9.             Assert.AreEqual<long>(0x7856341278563412, l);
  10.         }
  11.     }
修改后:
  1. public static Int64 BytesToInt64(byte[] buf, uint offset)
  2.         {
  3.             Debug.Assert(buf.Length - offset >= 8);

  4.             Int64 n = (buf[offset]
  5.             | ((Int64)buf[offset + 1] << 8)
  6.             | ((Int64)buf[offset + 2] << 16)
  7.             | ((Int64)buf[offset + 3] << 24)
  8.             | ((Int64)buf[offset + 4] << 32)
  9.             | ((Int64)buf[offset + 5] << 40)
  10.             | ((Int64)buf[offset + 6] << 48)
  11.             | ((Int64)buf[offset + 7] << 56))
  12.             
  13.             return n;
  14.         }

感想:

以前做开发,从未重视过unit test,最近才发现unit test是开发人员的法宝,可以第一时间发现函数级的bug,将问题扼杀在摇篮中,可以极大节省开发和改bug的成本。

阅读(1105) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~