结对——代码审查
题外话
个人项目结束有感
其实,在上完软工的第一节课,知道了这节课竟然有三种项目以后,我的内心......苦巨(拒)啊!个人项目,结对项目以及团队项目......想想都心酸!但是,在个人项目完成以后,心里神奇地不是那么拒绝软工的作业了!说是个人项目,也就是作业的独立完成。虽然说每个人提交在博客园当中以后,所有人都可以浏览作为参考,但是也不可能真正的“参考”。第一次的个人作业时,我的心里想的就是,写点东西就行了呗!当我把没有任何排版的文字上交以后,在老师说明大部分人的作业情况以后,我虽然应了老师的要求改了一下排版,多写了一点字,当时觉得,也没有什么,不就是个作业嘛!上大学以来,网上提交的作业也不是没做过。
第二次的作业——Junit的单元测试,我也就是仅仅按着教程相当于是把流程走了一遍,熟悉了一下单元测试的流程,面对我不会的java,当时的我选择跳过。
但是当第三次作业的时候,两道题二选一,需要我自己编写题目代码以及对应的测试代码的时候,我是真的慌了。满脑袋都是,怎!么!写!因为我的第二次作业用的是eclipse,电脑里也只有eclipse,最后种种原因,我只好学一下怎么用java了!临时抱佛脚吧!就算学不到什么,把作业糊弄过去再说吧!但是,我突然想到了我爸在我上高中的时候,对那个超级爱玩手机而不肯好好学习的坏学生的我说过的话,“你做一件事儿,好好做是做,不好好做也是做。好好做你就学到东西了,不好好做你就是浪费时间,那还不如回家种地吧!”我这不是写作文,也不需要抒情,只是突然想到。最后我用了三天的课余时间和晚上的睡前时间,突击了一下java,学习了一些浅薄的表面东西,思考了我所选的第一题的解决方法,又在网上学习了其他几种这道题的经典算法。除了直接能想出来的枚举法,还有分治法,动态规划法,甚至还有我从未听过的联机算法,每个经典算法都有着各自的美,虽然同是也有着各自不完备的地方。所以,我觉得,人,就像算法,在进步的同时,也会有自己鞭长莫及之处,那么就会有能补己之短的另一种算法!
结对——代码审查
小伙伴代码到此一游!
总结
实话实说,代码审查表非常非常全面!Amazing!今天我才知道对待一份代码竟然有这么多问题需要解决,而且重要问题也不少。我觉得并不是说没有标着重要二字的问题它就不重要,这关系着一份代码的各方面是都符合要求。
在课堂上,老师也曾经说过,现在我们写出来的代码也仅仅是“自己的代码——少有注释”。因为一直都是将代码交给系统运行,交给系统查重,系统不会问各个代码的模块功能,也不会隔一段时间将代码翻出,看看是否能看懂程序。但是,当一份代码如果真的需要经过多个人的时候,带有重要注释的代码便显得尤为重要。而在我们大部分人的代码当中,即便是有注释,也只是寥寥几字,无法看出一个模块或者整个程序的功能。在这份代码当中,问题同样存在。所以,也许应该从现在开始,在编写代码的同时,也应当适当地标记注释。而且所有的代码也都不可能一次性写好,在将未编写完成的代码添加注释以后,这样也会便于自己接续上次代码编写的思路从而继续完成代码的编写。
另外,我们很多人更会因为最初代码仅仅自己一个人查看,故此在代码的编写的过程当中,更显得随意一些。因此大括号的对齐,空格的地方等等,在代码的排版方面,我们并不是很注重。但是,这些好似并不怎么显眼的问题却出现在了代码审查表当中。因此,不论大小,代码当中有可能出现的问题都应该被重视起来。
1.无注释
好吧,小伙伴代码全场无注释,就不附加代码了......
2.无{}包括(if或else逻辑下仅有一条语句)
while (1){
ch = getchar();
if (ch == EOF)
break;
else if (ch == ' ' || ch == '\n' || ch == '\t');
else{
group[ap] = ch;
ap++;
}
if (num == 1)
cout << '{' << D_F_A[i][0] << '}';
诸如此类很多,不一一列举。
3.{}并未都单独占行
while (!que.empty()){
string a = que.front();
que.pop();
D_F_A[x][0] = a;
for (int i = 0; i<a.size(); i++){
for (int j = 0; j<4; j++){
if (N_F_A[j][0][0] == a[i]){
for (int k = 1; k <= 2; k++){
if (N_F_A[j][k] == "NULL"){
if (D_F_A[x][k].size() == 0)
D_F_A[x][k] = N_F_A[j][k];
else;
}
else{
if (D_F_A[x][k] == "NULL")
D_F_A[x][k] = N_F_A[j][k];
else{
int idx = D_F_A[x][k].find(N_F_A[j][k]);
int idy = N_F_A[j][k].find(D_F_A[x][k]);
if (idx != -1);
else
D_F_A[x][k] = D_F_A[x][k] + N_F_A[j][k];
if (idy != -1)
D_F_A[x][k] = N_F_A[j][k];
}
}
bool ft = 0;
if (D_F_A[x][k] == "NULL")
ft = 1;
for (int ori = 0; ori<pq; ori++){
if (quear[ori] == D_F_A[x][k])
ft = ori;
}
if (!ft){
que.push(D_F_A[x][k]);
quear[pq] = D_F_A[x][k];
pq++;
}
}
}
}
}
x++;
}
尤其是在多个for循环嵌套遍历的情况下,虽然{}的是否单独占行并不影响代码的其他问题,但是在这种多个{}出现的时候,排版上的不对应更加明显。到最后,是否一一对应,是否缺少,自己可能也不知道了。
为小伙伴转身!
最后,我只想说,软件工程——构建之法,我似乎,错过了一个亿......