我的伙伴是6班的小伙子潘礼鹏,经过几天的相处我觉得真的是说话很有趣的人,性格非常好,我们很划得来。

以下为我对他的代码的审查结果:

  1. VS2012与VS2013的兼容性

在这里写一个工具集的问题,不同的版本之间有着不一样的工具集,VS2012自带的工具集是VS2012(V110),而VS2013的工具集为VS2013(V120)。

改动这个也很简单,只需要在 选中项目,右键->配置属性->平台工具集->选择VS2013(V120)即可。

  1. 代码分析

潘同学的代码一共有两个文件,分别是

fenshu.cpp

SZYS.cpp

首先来看一下 fenshu.cpp

由于文件较大,我们截取一段。

void Fenshu::tongfen(Fenshu b)

{//按照b来放大a

fenzi = fenzi * b.fenmu;

fenmu = fenmu * b.fenmu;

}

void Fenshu::add(Fenshu b)

{

tongfen(b);

fenzi = fenzi + b.fenzi*(fenmu/b.fenmu);//防溢出

yuefen();

}

这个文件主要是实现对于所有分数的处理,比如加减乘除通分约分。

通过这一段程序我们能看出来:

  1. 该同学能够及时换行,代码的格式让人看起来很舒服。
  2. 该同学有加注释的好习惯,能方便队友更容易地上手他的代码。

不足之处:所有的变量名都是用中文标示的,这样看起来不是很舒服。

再来看一下SZYS.cpp

从名字来看我揣测SZYS是四则运算的意思。

tmpstr = getNumbString(numb[i + 1]);

if(op1[i] == "×")

{

tmp.mul(numb[i + 1]);

if(addsubKuohaoFlag(i,op1))

{

exercise = "(" + exercise + ")";  //考虑到*/优先级,无条件加括号

}

if(Random(2) == 0)  //0的话新加的在右边,1在左边

{

exercise += " × " + tmpstr;

}

else

{

if(muldivKuohaoFlag(i,op1))

{

exercise = "(" + exercise + ")"; //*/也有先后顺序

}

exercise = tmpstr + " × " + exercise;

}

continue;

}

if(op1[i] == "÷")

{

if(numb[i + 1].getFenzi() == 0 && tmp.getFenzi() != 0)

{

tmp.set(0,tmp.getFenmu(),0);

exercise = tmpstr + " ÷ " + "(" + exercise + ")";

}

else if(numb[i + 1].getFenzi() == 0 && tmp.getFenzi() == 0)

{

failFlag = true;  //除数被除数都为0,此时判定为生成失败,退回重新生成

break;

}

else

{

tmp.div(numb[i + 1]);

if(addsubKuohaoFlag(i,op1))

{

exercise = "(" + exercise + ")";

}

exercise += " ÷ " + tmpstr;

}

continue;

}

这个文件主要是处理逻辑。

在这段代码中,我发现:

  1. 各个flag没有什么意思,有点混乱。
  2. 起变量名的问题变得有些严重,比如addsubkuohaoFlag,让人看起来很费力气。
  3. 封装的不够,有500多行代码,有些方法有150多行。
  4. 分成了多个步骤,稍稍有一点繁琐。
  5. 最重要的一点,他的乘除号不是UTF-32编码的!这个在我运行程序对比时才看出来。

当然,也有很多优点:

1.       单元测试,程序运行完一个单元都会输出当前的状态,这样就立刻能知道是那个模块错了。我认为这个很重要!,也是我应该做的。

2.       定义了自己的类型,让逻辑变得简明易懂。

3.       考虑的十分全面,有很多关于优先级、括号的判断。这样也就是说基本功能实现的不错。

4.       每一个函数都有注释,可以快速理解他的思路。

5.       注重了内存,没有随便使用大数量的数组。我在第一版程序中使用了数组。后来用了List代替。

3.实际测验

实践出真知。

经过对这些运算的处理,发现了乘除号不属于 UTF-32编码!,其他的全都正确。

然后是测试对不同输入的支持。

  1. -n 100 -r 1 这种情况下会进入死循环。

说明没有对无法生成的情况做判断。

  2.–n 100 –r 10 输出正常,所有分数和0的输出符合要求。

  3.–n 1000 –r 100 跑了16秒,输入输出正常。

  4.–e xxx –a 输出对比正常。

4.时间复杂度分析

刚才说到1000 个跑了16秒,这是什么问题呢?我们启用代码分析。

后来我发现,主要是字符串的判重效率太低,占用了太多资源。

5.测试

这位同学在很多函数后面加了输出,也就是说他会在一些函数完成后给予成功信息,我认为这也是测试的一种很好的方法。

转载于:https://www.cnblogs.com/kevindu/p/4850559.html

Week 2 代码审查相关推荐

  1. Phabricator是什么,代码审查工具

    Phabricator是什么? Phabricator支持两种代码审查工作流:"review"(提交前审查)和 "audit"(提交后审查). Phabrica ...

  2. 封闭、缺少代码审查,硕士刚毕业的“老”工程师揭露机器学习残酷现状!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 转自 | 机器之心 编辑 | 陈萍.杜伟 当前,机器学习领域有没有夸 ...

  3. 代码审查规范(试用版)

    目录 1.背景 2.目标 3.流程 4.指定代码审查规范 4.1.命名风格 4.2.常量定义 4.3.代码风格 4.4.注释风格 4.5.控制语句 5.执行代码审查规范 6.开展PR Bash活动 1 ...

  4. docker运行gerrit(代码审查工具)

    gerrit是什么? Gerrit,一种免费.开放源代码的代码审查软件,使用网页界面. gerrit背景 Gerrit,一种免费.开放源代码的代码审查软件,使用网页界面.利用网页浏览器,同一个团队的软 ...

  5. ​Google 鼓励的 13 条代码审查标准,建议收藏!

    作者 | Rafiullah Hamedy 译者 | 弯月,责编 | 杨碧玉 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 在本文中,我们将简要介绍 ...

  6. 代码审查就是在排大便——你懂的!

    代码审查就是在排大便--你懂的! 序 豆瓣数据API和后台数据同步已经完成,我大概两天没去管这部分代码,主要是因为产品.老大都不是很积极.因为这个毕竟不是非常重要的. 今天我对代码进行了审查,也进行了 ...

  7. 代码审查工具 sonarqube 简介

    目录 1. 什么是SonarQube? SonarQube的功能 1.糟糕的复杂度分布 2.重复 3.缺乏单元测试 4.没有代码标准 5.没有足够的或者过多的注释 6.潜在的bug 7.糟糕的设计(原 ...

  8. Google 鼓励的 13 条代码审查标准,建议收藏!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Rafiullah Hamedy 来源 | h ...

  9. java代码审查规范

    2019独角兽企业重金招聘Python工程师标准>>> 分类 重要性 检查项 备注 命名         重要 命名规则是否与所采用的规范保持一致? 成员变量,方法参数等需要使用首字 ...

  10. 程序员必备的代码审查(Code Review)清单

    转自 http://blog.jobbole.com/83595/ 在我们关于高效代码审查的博文中,我们建议使用一个检查清单.在代码审查中,检查清单是一个非常好的工具--它们保证了审查可以在你的团队中 ...

最新文章

  1. 目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)
  2. AMD加载器实现笔记(四)
  3. python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...
  4. P6793-[SNOI2020]字符串【广义SAM,贪心】
  5. c语言打印空心等腰梯形乐学,C语言做激光发射
  6. 数据分析 数据清理_数据清理| 数据科学
  7. Linux : DHCP 服务
  8. c++界面设计皮肤工具
  9. java 按顺序读取文件夹_java读取某个文件夹下的所有文件实例代码
  10. WiFi转串口 以太网模块
  11. android jni c调用java,Android JNI中C调用Java方法
  12. MATLAB中histogram函数的使用
  13. 蚂蚁金服副总裁蒋国飞:技术全面开放,与合作伙伴共发展
  14. Java并发编程73道面试题及答案 —— 面试稳了 侵立删
  15. mt4的服务器在哪个文件,mt4的服务器地址
  16. 从新建工程开始使用C++开发单片机(以STM32为例):六、C++输入输出流(附代码)
  17. 让你低调的app脱颖而出
  18. matlab中som结果,som 运行结果怎么看啊
  19. Live555: RtspServer 示例
  20. Mysql 基础操作知识专题

热门文章

  1. JQuery中如何动态修改input的type属性
  2. SQL 中使用CONVERT转日期格式
  3. PHP设计模式——代理模式
  4. LeetCode【1051. 高度检查器】
  5. JavaScript计时
  6. nowcoderG 小国的复仇
  7. ISO 审批通过 Ada 2012 语言标准
  8. JS操作JSON数据交换
  9. java day27【DQL:查询语句、约束 、多表之间的关系 、范式 、数据库的备份和还原】...
  10. 在 Windows 上进行 Laravel Homestead 安装、配置及测试