结对编程初体验——代码复审
Posted gifted35
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对编程初体验——代码复审相关的知识,希望对你有一定的参考价值。
这一次和室友结对编程,第一项任务就是互看代码。想到上一次这样认真看她的C++代码,是一年前学程序设计这门课时,帮她人工debug。虽然都是从头到尾认真读代码、通逻辑,感觉却是不同的,之前的关注点是bug在哪,而现在却是带着任务的,要关注代码核查表中的项目。结果看着看着,总感觉自己在找茬dbq
回归正题↓
编译环境:Dev-C++ 5.9.2
程序语言:C++
(一)优点:
能发现的优点,大多都是自己的缺点
1、代码可读性强。
通过详细的注释,即便是我们两个的个人项目使用的不是同一种语言,我看懂她的代码并没有花费很多时间。在她的代码中,几乎每一句关键语句上都加了注释,说明其功能,通过看注释,其实就可以基本明白所有需求实现的逻辑了。也不出我所料,她在看我的代码的时候非常绝望。因为过去编程都是个人编程,还没有过组队做项目的经历,所以我习惯只在程序块和变量定义前面加注释,标记数据块的功能和实现逻辑。这样虽然自己复查或者修改代码时可以看懂,但却给其他看代码的人带来了极大的麻烦。
2、基本符合高内聚、低耦合原则。
每一个功能都封装成了一个函数,只有在主函数中,按照流程依次调用了各个功能函数,其余函数之间几乎没有相互调用,基本做到了模块与模块之间,尽可能的独立存在。这一点也是我的代码做的不太好的一点,为了开发时省事,我将功能划分的比较大,每个实现子功能的函数都相对复杂,这样一来,一旦某一个小功能需求改变,就需要在一个大模块中调整,工作量会增大、出错率也会提高。
3、巧妙使用了容器。
看到她的代码开始定义的几个容器,给了我很大启发。容器的简单性、轻量性、可扩展性、可移植性的优点突然出现在脑子里,感觉自己用的数组特别low。(不过仔细看过后,这里使用容器还是有问题的,这个在后面的缺点里说吧)不管怎么样,这个项目还是有很多地方可以用容器呀。
4、可以自动创建用户文件夹。
需求中说,“每个账号一个文件夹”,我当时是按照用户文件夹提前创建好,然后生成试卷后寻址,存入该文件夹来理解的。而她的代码思路我觉得更好,在准备生成第一套试卷时,若用户文件夹不存在,则创建,这样一来扩展性比较强,当用户增多,或者需求改成用户表不是预设好的,而是通过注册产生的时,就会容易实现得多。
5、代码风格相对规范
括号的位置、函数和变量的命名,都较为规范。
(二)缺点
由于代码复审的思想,发现的不足和bug会多一点,下面开始疯狂diss
1、注释不是很规范。
注释多,是优点,也是缺点。例如函数的注释,放在函数名和前括号"{"之间,有些影响美观。
1 int GetLevel(string name) //用于判断当前用户姓名并且确定用户身份等级,选择出题对象 2 { 3 if ((name.compare("张三1") == 0) || (name.compare("张三2") == 0) || (name.compare("张三3") == 0)) 4 { 5 cout << "当前选择为小学出题" << endl; 6 return 1; //小学老师表示为1 7 } 8 else if ((name.compare("李四1") == 0) || (name.compare("李四2") == 0) || (name.compare("李四3") == 0)) 9 { 10 cout << "当前选择为初中出题" << endl; 11 return 2; //初中老师表示为2 12 } 13 else if ((name.compare("王五1") == 0) || (name.compare("王五2") == 0) || (name.compare("王五3") == 0)) 14 { 15 cout << "当前选择为高中出题" << endl; 16 return 3; //高中老师表示为3 17 } 18 }
2、容器使用不恰当,导致不能达到需求。
仔细阅读代码后,发现她定义的几个容器的作用是存储当前用户在本次程序所生成的所有试题,用于查重。而需求中的查重指的是题目不能与该用户文件夹下所有文件中试题重复。因此需求没有真正实现。
3、to_string函数实现不够机智。
int型转换成string型,完全可以调用库函数,或者用String str = i + "";这样一条语句完成,无需定义这么复杂的函数按位转换哟。
1 string to_string(int n) //定义将整型转换为字符串的函数n 2 { 3 int m = n; 4 int i = 0, j = 0; 5 char s[100]; 6 string astring; 7 while (m > 0) 8 { 9 s[i] = m % 10 + ‘0‘; 10 m /= 10; 11 i++; 12 } 13 s[i] = ‘