我的伙伴是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.测试

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

Week 2 代码审查的更多相关文章

  1. 使用stylelint对CSS/Sass做代码审查

    对样式审查?很少人会这么做吧,但实际上开发者应该有这样的态度,尤其是不同团队多人开发时,这一点尤为重要. 在本文中,我将陈述两点:一是为什么我们需要对样式进行审查,二是如何将审查工具融合到整体的构建流 ...

  2. Android APK瘦身之Android Studio Lint (代码审查)

    ******** ******** 第一部分: 瘦身内容介绍 ******** ******** 项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的APK变得更肿, 因此 ...

  3. 给 C# 开发者的代码审查清单

    这是为C#开发者准备的通用性代码审查清单,可以当做开发过程中的参考.这是为了确保在编码过程中,大部分通用编码指导原则都能注意到.对于新手和缺乏经验(0到3年工作经验)的开发者,参考这份清单编码会很帮助 ...

  4. [转]给 C# 开发者的代码审查清单

    这是为C#开发者准备的通用性代码审查清单,可以当做开发过程中的参考.这是为了确保在编码过程中,大部分通用编码指导原则都能注意到.对于新手和缺乏经验(0到3年工作经验)的开发者,参考这份清单编码会很帮助 ...

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

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

  6. 转:给 C# 开发者的代码审查清单

      给 C# 开发者的代码审查清单   [感谢@L就是L 的热心翻译.如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] 这是为C#开发者准备的通用性代码审查清单,可以当做开发过程中的参考. ...

  7. 静态代码审查工具FxCop插件开发(c#)

    FxCop是一款微软官方提供的.net平台代码审查工具,目的是检查我们编写的程序集的代码是否符合规范.FxCop默认提供的是微软默认的审查规则,而且该规则符合<Framework DesignG ...

  8. 使用StyleCop进行代码审查

    使用StyleCop进行代码审查 工欲善其事,必先利其器,上篇简单介绍了怎样使用Astyle进行代码格式化,使编写的代码具有一致的风格.今天简单介绍下怎样使用StyleCop对原代码进行审查,看编写的 ...

  9. **代码审查:Phabricator命令行工具Arcanist的基本用法

    Phabricator入门手册 http://www.oschina.net/question/191440_125562 Pharicator是FB的代码审查工具,现在我所在的团队也使用它来进行代码 ...

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

    在我们关于高效代码审查的博文中,我们建议使用一个检查清单.在代码审查中,检查清单是一个非常好的工具——它们保证了审查可以在你的团队中始终如一的进行.它们也是一种保证常见问题能够被发现并被解决的便利方式 ...

随机推荐

  1. tkinter学习系列之(五)Checkbutton控件

    目录 目录 前言 (一)基本属性 (二)案例 1.简单的复选框 2.组合复选框 目录 前言 复选框:可以同时多选的一组框,其只有两种状态,选中与未选中. (一)基本属性 (1)说明: tkinter里 ...

  2. January 12th, 2018 Week 02nd Friday

    Nothing behind me, everything ahead of me, as is ever so on the road. 我的身后空空荡荡,整个世界都在前方,这就是在路上. That ...

  3. SAP CRM 开发学习资料和教程整理【不定时更新】

    本文链接:http://www.cnblogs.com/hhelibeb/p/6276929.html 首先是SAP网站上面的相关内容 SAP Customer Relationship Manage ...

  4. 菜鸟水平如何在Android Studio中添加uiautomator测试框架

    1.启动AS,弹出创建Android Studio项目 2.选择 "Start a new Android Studio project",输入 application name ...

  5. Java关于远程调试程序教程

    本节尝试一下Java远程调试的东西,记录一遍简单入门的东西.也就算是使用记录吧! 写一个简单程序打成jar丢到远程服务器运行,模拟远程Server在运行.就拿Java调用shell脚本提交作业程序为例 ...

  6. 转载 SpringMVC详解(二)------详细架构

    目录 1.SpringMVC 详细介绍 2.SpringMVC 处理请求流程 3.配置前端控制器 4.配置处理器适配器 5.编写 Handler 5.配置处理器映射器 6.配置视图解析器 7.Disp ...

  7. ECS简述

    一.查看ECS实例 使用场景 •实例的日常维护 •实例运行状态和详细信息的查看 二.启动ECS实例 使用场景 •实例停止运行之后的再次启动 三.停止.重启ECS实例 使用场景 •实例运行的服务暂停时停 ...

  8. mybatis基础系列(一)——mybatis入门

    好久不发博客了,写博文的一个好处是能让心静下来,整理下之前学习过的一些知识一起分享,大神路过~ mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. ...

  9. YOCVM

    一.热补丁的本质 对于线上紧急的bug,重新提审AppStore的时间过长.因此,能够下发一段补丁代码到线上运行,并结合Runtime,实时改变App原有的行为,就显得极为重要.补丁代码的形式可以有很 ...

  10. android ActionBarSherlock使用说明

    源代码地址:https://github.com/JakeWharton/ActionBarSherlock 1.添加项目依赖包 2.修改AndroidManifest.xml中的主题(或者继承该主题 ...