1.代码规范
- 这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率, 浪费时间的东西。
代码规范并不是从官僚制度下产生,它是为了提高项目团队开发效率而产生的一种工具,能够极大的增强代码可读性,同时提高了代码的可维护性。书写代码规范能给开发效率和维护效率带来巨大的增益,并不会因为多敲那么几行字或者使用自己不熟悉的规范而降低开发效率。
- 我是个艺术家,手艺人,我有自己的规范和原则。
编程是一门艺术,但是这是靠程序的数据结构设计得是否精巧易用,算法是否设计的又快又好来展现的。代码规范则是一种锦上添花的功效,好的代码规范能让本来就“很美的程序”更容易被读者接受,更好地展现程序的美。
- 规范不能强求一律,应该允许很多例外。
每个团队都可以或者说必须要有自己的代码规范,但是其肯定只是有少部分是由自己团队的特殊性所决定的,基础还是公认的一些代码规范。“存在即合理”,从这个角度上来看,许多书中所提倡的代码规范,一般都是存在了很久,经过无数的程序员修整之后的代码规范,都是有其合理之处的,值得我们去使用。
- 我擅长制定编码规范,你们听我的就好了。
作为团队的成员,所有的事情肯定是需要大家同意才能实施的,(甚至是自己的代码设计方案),所以代码规范这个肯定是要选取大部分人比较认同的方案来实施,少数人服从多数人嘛~~~
2.代码复审
General
- Does the code work? Does it perform its intended function, the logic is correct etc.
这位同学的代码虽然能成功运行,但是依然有一些bug存在。
Bug1--生成的答案文件中会存在-1、-4这样的结果,这明显出现了计算功能上的错误。如下图所示
Bug2--我用其自己生成的题目与答案文件进行批改功能的测试,结果批改的正确性有问题,结果如下图
显然这位同学的代码在功能和逻辑上还是有些问题的。
- Is all the code easily understood?
这位同学使用的C#语言编程,整个设计思想很好地使用了面向对象编程的思想,所以代码层次以及可读性还是不错的,能够比较快的理解他的代码。
上面这段代码中,这里try--catch想catch什么?而且两个处理路径实际上的效果一模一样,其使用try--catch的意义在哪里?
- Does it conform to your agreed coding conventions? These will usually cover location of braces, variable and function names, line length, indentations, formatting, and comments.
至于代码规范这方面,这位同学基本上遵守了比较公认的一些代码规范,代码看起来也比较明了,但是存在很多不明意义的空行,有的时候右大括号与最后一行代码隔了好几行,这样很容易使代码逻辑层次不明显,这点我不赞同。
- Is there any redundant or duplicate code?
这位同学的代码还是比较简结的,没有很多重复的多余的代码。
- Is the code as modular as possible?
这一点是这位同学做的非常好的一点,因为他使用了面向对象建模的思想,所以他的程序封装的相当好。
- Can any global variables be replaced?
由于C#语言的完全面向对象的特性,所以不存在全局变量的概念
- Is there any commented out code?
这位同学的代码非常干净,没有注释掉的代码
- Do loops have a set length and correct termination conditions?
所有的循坏他都比较好的处理了长度等问题,即使是生成不了所要求的题目个数,也会及时地输出提示信息并结束循坏。
- Can any of the code be replaced with library functions?
这应该没有,从这位同学的编码风格中可以看出他使用基本类库还是非常熟练的。
- Can any logging or debugging code be removed?
最后的坂本并没有一些调试代码在其中。
Security
- Are all data inputs checked (for the correct type, length, format, and range) and encoded?
因为C#是一个强类型的语言,所以这些检查基本都靠语言本身的编译器来做了。
- Where third-party utilities are used, are returning errors being caught?
这位同学估计是在面向对象建模课上养成的习惯,在main方法中用了很多try--catch以保证程序不崩溃。
- Are output values checked and encoded?
存在一些地方对于输出的值并不满足题目的需求,然而他还是直接输出到了答案文件中去。
- Are invalid parameter values handled?
这位同学的出错处理如上面所说,至少不崩,对于这些不符合逻辑的值,处理肯定存在缺陷,不然之前的bug不会出现。
Documentation
至于文档这方面这次个人项目,似乎大家都木有写。。。。就不评价了。
3.个人感悟
通过这次审查小伙伴的代码,我发现要是我自己按照这个表格来审查我自己的代码, 我还是存在很多问题的。比如重复代码问题,我在处理输出不分的时候,为了思考的简单点就写了许多的重复代码。还有循环处理问题,我就没有我的小伙伴做的好,假如我遇到了生成不够输入要求得题目,我并没有相应地输出提示信息及时地结束程序,我会一直运行。。。。这是我编码时没有考虑到的重大失误。
同时我也木有很好的注意代码规范,我的代码可读性不够好,这是我下次编码中要注意的。
另外,我们既然在上这个软件工程的课,我们就应该开始重视文档和测试的必要性,这两项工作在真正的项目中扮演了非常重要的角色。他们能帮助我们理清自己的思路,完善程序的设计,同时还能及时的解决一些很细小不容易发现的小bug。所以在以后的作业中,我应该开始学习写文档和单元测试。