同伴个人代码复审结果
一、一般性检查
1、代码能够正常运行,基本可以实现预定功能,没有大的逻辑错误。
2、代码结构非常清晰,模块化做得很好,很好地运用了面向对象的编程思想,容易阅读和理解。
3、关于字符串的匹配可以用库函数中的正则表达式来进行,当然可能在字符串比较长的时候,正则表达式会栈溢出,或者效率很低。
4、没有出现多余的调试代码。
5、代码的风格比较规范,缩进、换行、变量命名都遵守一般性的约定。
二、安全性检查
1、对输入的数据格式不合法的情况下,有些时候不能正确地识别。
2、当出现命令行参数不匹配的时候,抛出了异常,避免程序崩溃。
三、文档和注释
1、没有帮助文档,但是有简要的注释。
2、通过与程序作者交流,可以得知每一段代码的功能。
四、测试
1、有代码测试模块。
2、测试用例偏少,不能覆盖很多极端情况,代码的覆盖率不高。
五、发现的已知bug
1、
public static bool operator >(Number a, Number b) { if (a < b) return false; else return true; }
这一段中判断条件有误,应该改为(a < b || a == b)
2、不能生成形如(1 + 2) * (3 + 4)= 这样的式子,该问题并非是编码的错误,而是在算法设计的层面上主动规避了这样一种情况。作者的意图是先生成一个算式的后缀表达式,然后将其转换为中缀表达式,作者用了一个变量t来记录当前的优先级,一旦优先级达到了二级优先级,作者就不再生成+和-符号,因此有些合法的情况作者不能生成。所以,可能极端的情况就是由于舍弃了某些情况,不能完整地根据参数生成足够的不重复的算式。
3、作者为了避免被0除的情况,限制所有的数为正数,而题目要求允许生成0。
六、可做的优化
Number result = new Number(); int tdown = a.down * b.down / IntNum.gcd(a.down,b.down); int t1 = b.down / IntNum.gcd(a.down, b.down); int t2 = a.down / IntNum.gcd(a.down, b.down);
这一段代码中 IntNum.gcd(a.down,b.down) 作为一个函数的返回结果,在三次计算中值完全相同,因此可以用一个临时变量进行存储,避免三次调用函数,如果该段代码被反复执行,那么优化后的效率会大大提高。
七、总结
本程序作者的代码风格和代码逻辑十分规范,编程思路也很清晰,体现出较高的编程水平,值得笔者学习。