同伴个人代码复审结果

同伴个人代码复审结果

一、一般性检查

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) 作为一个函数的返回结果,在三次计算中值完全相同,因此可以用一个临时变量进行存储,避免三次调用函数,如果该段代码被反复执行,那么优化后的效率会大大提高。

七、总结

本程序作者的代码风格和代码逻辑十分规范,编程思路也很清晰,体现出较高的编程水平,值得笔者学习。

原文地址:https://www.cnblogs.com/ruoyuwang/p/4847570.html