在本次代码复审的作业中,我审阅的是我的pair project的partner郝倩的个人项目代码。下面我汇报一下本次代码复审的结果。
首先我说一下她的代码的优点。首先,她的代码在关键的地方都加上了注释,我在读她的代码的过程中会感觉到轻松很多。同时她的注释基本上没有加在那些显而易见的代码的部分,而是加在必要的点上。第二,从整个程序的结构上看,这份代码的思路十分清晰,并且每一个模块的实现都是使用尽可能简单的方法,这对于日后代码的维护有很好的作用。第三,从细节上来看,这份代码在变量命名上非常好,基本上所有的变量的名字都很明确的展现了这个变量的含义。最后,这份代码对输入和一些敏感的地方坐了必要的检查,提高了代码的稳定性。
:注释的标注
下面我提一点这份代码不足的地方。首先在测试的时候我发现这份代码的运行效率并不高。第二,在程序中定义了大量的静态变量和静态方法,我认为其中有一些没有必要定义为静态的,这样定义会造成一些不必要的内存浪费。第三,代码在需求改变时做更改会比较麻烦,比如如果我们要求输出排序的前20个单词而不是前十个那么需要进行大量的更改,其实可以通过设置全局变量很简单的实现。但是这里却没有设置。
:过多的静态变量
最后我想再提一些改进的意见,比如可以在代码中加上一些测试代码以便对代码进行维护。还有我觉得代码的结构可以再调整一下,我认为在主程序中的一些关于输入的判断可以单独构造一个类来进行,是程序的结构更加清晰。最后,如果对语言更熟练一些,有一些代码可以进一步简化,比如在统计文件的部分上。
在代码复审的过程中,我在对方的代码中看到了一些我需要学习的优点,也看到了自己存在的问题,同时也看到了一些自己需要引以为戒的地方。最后,附上我在学习的关于代码评价的内容。
一流代码的特征
1、稳定可靠(Robustness)
代码写出来以后,一定要能够运行得非常好,非常稳定可靠。到了产品开发后期,大部分的成本都将投入到产品稳定性的提高。
2、可维护且简洁(Maintainable and Simple Code)
在写代码时,首先要考虑的是:写出来的代码不但要自己可以读懂,而且我们的同事、测试工程师都可能要修改这些代码,对其进行增减。所以必要的注释、统一的编程规范等都是非常重要的。
3、高效(Fast)
在软件行业中效率是非常重要的,比如搜索引擎。实际上程序的效率提高,有时候很简单,并没有什么神秘之处,如使用数组索引时候,可以用指针方式而不使用数组下标;数组的空间定义应该定义为2的N次幂等等。
4、简短(Small)
如果程序写的很罗嗦,随着特性不断增加,程序规模将变大的巨大,Flash空间告急、内存告急、下载升级变的不可忍受,等等,带来的就是成本不断增加,利润不断下降。
5、共享性(Reusable)
如果做大型产品开发,程序的共享性也是非常重要的。我“共享”不是指将别人的代码复制到自己的代码中,而是指直接调用别人的代码,拿来即可用。这一方面可以减少代码的冗余性,另一方面可以增强代码的可维护性。如果别人的代码里有Bug,只需修改他的代码,而调用此代码的程序不用进行任何修改就可以达到同步。这同时要求我们在设计的时候,如何考虑系统的内聚和耦合的问题。
6、可测试性(Testable)
可测试性在大型软件开发里是很重要的一点。可测试性有时候与可维护性是遥相呼应的,一个具有好的可测试性和可维护性的代码,测试人员可以根据开发提供的维护手册、debug信息手册等就可以判断出程序出错在哪个模块。
7、可移植性(Portable)
可移植性是指程序写出来以后,不仅在windows 2000里可以运行,在NT/9X下可以运行,而且在Linux甚至Macintosh等系统下都可以运行。所有这些特性都是一流代码所具备的特性。但是其中有些特性是会有冲突的。比如高效性,程序写的效率很高,就可能变得很复杂,牺牲的就是简洁。好的代码要在这些特性中取得平衡。