个人作业week3——代码复审
1. 软件工程师的成长
- 感想
看了这么多博客,收获颇丰。一方面是对大牛们的计算机之路有了一定的了解,另一方面还是态度最重要,或者说用不用功最重要。这些博客里好些都是九几年或者零几年就开始学习编程了。当时还没有我们现在这么方便的网络环境和计算机环境,他们中大多数人采取的方式都是刷刷刷。有的是刷了几本语言书籍,有的是刷了一本离散数学,还是态度决定一切啊,在这个喧嚣的年代,很少有这样的人了。回想自己的大学生活,大一和大二基本就是混过来的,每天应付应付作业,打打游戏,然后考前突击一下,最后分数一般。虽说专业课的分数还可以,但是这两年我的空闲时间几乎没有学什么东西,写的代码太少了,更是没有钻研的精神。到了大三,软工课要用C++、C#,我都是现学的,这样感觉写出的代码过于匆忙,质量很差。学习方面希望从现在做起吧,在不影响课程的情况下,尽量利用时间多学一些技术。看着大牛们的博客真是觉得无地自容!
- 计算机之路
我当时报考计算机的初衷其实主要是因为高中的时候爱打游戏,希望自己以后能从事设计游戏的工作,然后改改程序给自己弄点好装备(羞耻)。
上了大学之后发现编程和自己想象的还是有一些差距,不过我高中的时候用电脑比较多,用的时候出现一些问题也喜欢自己上网搜然后鼓捣,有时候经常鼓捣一晚上也没弄好。所以对计算机我还是比较了解的,我觉得这也算是自己对计算机的小小热爱吧!于是抱着这份热情,我对编程有关的课还是很感兴趣的,尤其喜欢动手实践(可惜有时候游戏冲昏了我的头脑= =)。
技术道路的话之前只跟着课程学过C和Java,这学期打算学习C++和C#,写写UI,做做Windows程序和Android程序,如果有可能,想学习写网页。然后在学习的过程中看看自己对什么最感兴趣,未来可以着重发展。
职业道路和社会道路:我是打算毕业以后先考研,未来先去一家大公司做程序员,然后工作中学习充实自己,可能的话跳个槽,去个自己喜欢的小公司,和它一起成长,我也觉得这种感觉特别好。
2. 代码复审
- 复审对象
由于我们组比较特殊,是三人结对编程。所以复审采取循环方式,我复审的是陈彦吉同学的代码。
- 阅读代码
陈彦吉同学的代码较短,只有400余行。结构比较清晰,只有四个函数。很快读完后,我对代码进行了初步分析。如下表:
函数 |
功能 |
初步审查结果 |
void setTransPortWeight(string start, string end, int weight, vector<Station> all) |
设置同一个换乘站之间的距离,以此来完成-b或-c的功能,另外起始站点和目标站点换乘站之间距离为0 |
我觉得这一块的代码耗时太多,做了一个大概的测试,此函数耗时占整个程序的一多半。这里应该可以简化代码。 |
void cmdhandle(int argc, char *argv[], vector<Station> all) |
主要功能一方面是处理命令行参数,调用相关函数。 |
对各种错误情况都做了处理,没什么大问题。 |
void dijkstra(string start, string end, vector<Station> all) |
用dijkstra算法求最短路径,将最短路径保存在Station对象中的LastStation属性中,之后调用print()函数 |
做了错误处理,且考虑了起始站点和目标站点一样的情况,没什么问题。 |
void print(int destination, int origin, vector<Station> all) |
根据起始站点和目标站点以及上一步保存的LastStation,输出最短路径 |
对循环终止条件判断没问题,之后在输出时对换乘也分情况考虑了。 |
- 初步测试
我对其程序正确性进行了测试。测试数据如下图。经过和百度地图等比对后,程序功能性基本正确。
- CheckList
General |
|
Does the code work? Does it perform its intended function, the logic is correct etc. |
代码工作正常,做了一些测试,可以实现预期功能,逻辑正确。 |
Is all the code easily understood? |
代码结构清晰,部分地方有注释,容易理解。 |
Does it conform to your agreed coding conventions? These will usually cover location of braces, variable and function names, line length, indentations, formatting, and comments. |
1.代码风格基本一致,只是我有时候不用大括号换行,被审人都是大括号换行,不过都可以接受。 |
Is there any redundant or duplicate code? |
我觉得设置换乘站间长度的函数可以被优化,如将所有换乘站保存起来,这样每次修改的时候就不用扫描300+ * 300+了。 |
Is the code as modular as possible? |
模块化做得比较好,如果能将读入地图也模块化就更好了。 |
Can any global variables be replaced? |
代码中全局变量很少,不用被替换。 |
Is there any commented out code? |
无。 |
Do loops have a set length and correct termination conditions? |
循环的长度和终止条件都没问题。 |
Can any of the code be replaced with library functions? |
没有。 |
Can any logging or debugging code be removed? |
无。 |
Security |
|
Are all data inputs checked (for the correct type, length, format, and range) and encoded? |
正确和错误的输入(包括长度、格式和范围)都可以处理。 |
Where third-party utilities are used, are returning errors being caught? |
未使用第三方库。程序中遇到错误的处理是输出错误信息,然后通过返回值终止本次调用,继续等待用户输入。 |
Are output values checked and encoded? |
无。 |
Are invalid parameter values handled? |
被处理了。若输入值无效,报错并通过返回值终止。 |
Documentation |
|
Do comments exist and describe the intent of the code? |
有一些注释但总体较少。 |
Are all functions commented? |
函数注释较少。 |
Is any unusual behavior or edge-case handling described? |
都做了处理。 |
Is the use and function of third-party libraries documented? |
没有使用第三方库。 |
Are data structures and units of measurement explained? |
无,但数据结构很清晰。 |
Is there any incomplete code? If so, should it be removed or flagged with a suitable marker like ‘TODO’? |
无。 |
Testing |
|
Is the code testable? i.e. don’t add too many or hide dependencies, unable to initialize objects, test frameworks can use methods etc. |
代码是可测试的。不用添加太多东西。 |
Do tests exist and are they comprehensive? i.e. has at least your agreed on code coverage. |
从代码中看不出来是否进行了测试。 |
Do unit tests actually test that the code is performing the intended functionality? |
是的。 |
Are arrays checked for ‘out-of-bound’ errors? |
是的。 |
Could any test code be replaced with the use of an existing API? |
暂时不太了解。 |
- 结论
- 总体来说,陈彦吉同学的代码结构清晰,数据结构简单,算法十分简易,对错误情况的处理也十分全面,值得我好好学习。
- 但代码中还是有一些可以优化的地方。下面就一一列出。
a)setTransPortWeight()函数可以优化,将换乘站点存起来就不需要每次O(n2)的扫描了。
b)读入地图的部分如果也模块化,main函数就会更为精简,整个程序的可读性也会上升许多。
c)代码习惯方面,一行最好不要太长,还有就是每个函数或模块前最好写上注释,可读性更强。
3. 希望我们在结对编程中能互相帮助,共同进步~
个人作业week3——代码复审的更多相关文章
- 个人博客作业week2——代码复审
1.代码规范 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 代码规范并不是从官僚制度下产生,它是为了提高项目团队开发效率而产生的一种工具,能够极大的增强代码可读 ...
- [2017BUAA软工]第二次博客作业:代码复审
〇.comment链接 https://github.com/hanayashiki/Sudoku/issues/1 一.代码复审 1.概要部分 (1)代码能符合需求和规格说明么? 经测试,对于合法输 ...
- 个人作业 - Week2 - 代码复审
代码复审Check List 概要部分 代码能符合需求和规格说明么? 能完成1~1000000个数独的求解与生成,并能处理异常输入,满足需求. 代码设计是否有周全的考虑? 为输入单独开设了一个输入检测 ...
- 作业三: 代码规范、代码复审、PSP
分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...
- 作业三 代码规范 代码复审 PSP
1.是否需要有代码规范(5分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 1这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 反对.我并不认为代码规范都 ...
- 个人作业Week 2 ----------代码的规范和代码复审
1.是否需要有代码规范 从个人理解的角度出发,我认为代码规范还可以细分为代码的风格还有代码的结构设计(就好比排版一类的) 以前在上C语言课程的时候就看到过,老师会在打“{”的时候进行一个换行,但是有些 ...
- 个人博客作业Week2(代码规范,代码复审)
Q:是否需要有代码规范 首先我们来搞清楚什么是“代码规范”,它和“代码风格”又有什么关系.依据个人的审美角度,我可能更喜欢在函数与函数之间空出一行,可能在命名习惯和代码注释上更加的internatio ...
- 作业三:代码规范、代码复审、PSP
一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...
- 作业三(代码规范、代码复审、PSP)
1.代码规范: 我支持代码要有规范,理由如下. (1).艺术是一个很带有个人风格的学科,天马行空才能凸显出自己的价值.但不要忘了,会艺术的不是生下来就会艺术, 他也需要按照前辈的步骤一步一步的学习基础 ...
随机推荐
- On cloud, be cloud native
本来不想起一个英文名,但是想来想去都没能想出一个简洁地表述该意思的中文释义,所以就用了一个英文名称,望见谅. Cloud Native是一个刚刚由VMware所提出一年左右的名词.其表示在设计并实现一 ...
- Concurrency != Parallelism
前段时间在公司给大家分享GO语言的一些特性,然后讲到了并发概念,大家表示很迷茫,然后分享过程中我拿来了Rob Pike大神的Slides <Concurrency is not Parallel ...
- Node.js实现RESTful api,express or koa?
文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...
- Java Spring mvc 操作 Redis 及 Redis 集群
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...
- maven archetype二三事
maven plugin 创建maven archetype 骨架的plugin是 <plugin> <groupId>org.apache.maven.plugins< ...
- GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...
- 微信扫描下载提示以及js判断用户手机系统
今天抽空也写一下这个教程吧,这里面涉及到就是一个APP的页面下载.公司有这个需求,让做一个页面,就是二维码扫描下载.一开始我做的版本是只能是通过浏览器来下载的,但是实际应用中,很多用户 ...
- 一个难倒 3年 android开发经验 " 工程师 " 的 "bug"
一个关于 imageView 设置 scaleType 的问题. 就在刚才 晚上9 点多的时候,我的一个外包伙伴发一个工程代码我,叫我去看下这样一个"bug",说折腾了很久,图片选 ...
- TeamCity : Build 版本控制系统配置
VCS (版本控制系统) 是用来跟踪项目源文件版本变化的系统.它还有其它的名字,比如 SCM(源代码管理).当前 TeamCity 内置支持的 VCS 类型有:Git, Subversion, Mer ...
- Unicode转义(\uXXXX)的编码和解码
在涉及Web前端开发时, 有时会遇到\uXXXX格式表示的字符, 其中XXXX是16进制数字的字符串表示形式, 在js中这个叫Unicode转义字符, 和\n \r同属于转义字符. 在其他语言中也有类 ...