最近在做代码审查 Code Review 并顺便使用了商业的软件 Resharper (Visual Studio 的插件, 有 30 天试用)
Resharper 一个很好的功能就是能把没有用的代码变灰, 这样哪几行代码没有用就一目了然.
像这行代码, Resharper 很清楚的提示说没有用, 因为 activeTool 是枚举类型, 和 null 判断永远为 false, 这样 if 里面的代码就永远不可能被执行, 所以标记成灰的了.
这个函数不是我写的(模块也不是我负责的), 我从 SVN blame changes 也没有发现最开始的记录, 应该是最最开始上传到SVN就有了. 可想而知, 这行代码将近有三四年没有人发现有问题. 很可怕.
由于这行代码所在的函数名称为 Initialize 我就理所当然的认为这个函数最开始初始化的时候调用一次, 并且根据上一行的英文注释 // set the default tool 我就认为应该去掉 if 直接写成
activeTool = LayoutToolType.Pointer;
结果过几天, 同事Q我说这个改动引起一个错误, 并改回去了(回退), 我就觉得纳闷, 当然如果我不自做聪明的话, 应该直接把这两行(包括上一行注释)一并删掉, 但是我认为这样的改法只是在将错就错, 后面的逻辑肯定是错误的. 这个 变量 的值在哪里初始化了? 也许这个不重要.
快速的修改 bug, 并不等于, 不求甚解的 fix bug. 这原先的代码很误导, 后面的逻辑又是基于这个假设(已经初始化变量), 所以就是在错误的代码上做补救. 于是我让相关的开发人员彻底查一下这个 root cause 知其然, 而且要知其所以然.
当然,这件事上我也有错, 错在, 一:太相信自己判断的能力了(所以没有测试), 二:太相信代码的质量和开发人员的水平.
英文: https://helloacm.com/resharper-helps-to-find-bug-enum-type-not-equal-to-null-forever/
loading...
上一篇: Powershell 脚本用来批量测试服务器是否在线
下一篇: 一行代码修改引起的血案 - (二)

那些超级复杂的软件debug起来还真是个学问.
终于还是决定用 Resharper 了, 没有 Resharper 的 VS 就是一残废, 哈哈.
灰色的实际上你应该直接把这行代码删掉, 包括if. 如果你把if去掉肯定和原来就不一样了. 注释害人啊.
我刚从Java转过来做.Net,老实说,用惯了eclipse,会觉得即使加上Resharper,VS还是比较废…
eclipse 能用来写 C# 么?
当年有个CDT可以写C++ 其实相当好用 现在也有C#的插件 但我没用过 很可能还不成熟吧
我用Eclipse还是做Java的时候 现在我也正郁闷地用着VS呢 各种不适应 各种低效率…
是啊 注释太害人了.
呵呵 常在河边走 哪能不湿鞋
博主看走眼了 既然if一直都是false 那就该整行删掉 否则逻辑就反了
嗯, 我知道是反的, 只是不知道一反所带来的影响这么大…太自做聪明去改这个而且没有测试.