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.代码风格基本一致,只是我有时候不用大括号换行,被审人都是大括号换行,不过都可以接受。
  2.变量和函数命名都是匈牙利命名法,行首都是4个空格缩进,被审人的代码格式很漂亮,值得我学习。有一点不同的是我的代码中不同的符号间一般都有空格分隔,被审人只有一部分有。
  3.Line391的注释过长,一行的长度达到了203,需改进。
  4.我与被审人的代码注释习惯不同,我的一般在函数头部,及函数中每一功能块的头部,被审人总体来看注释略少。

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?

暂时不太了解。

  • 结论
  1. 总体来说,陈彦吉同学的代码结构清晰,数据结构简单,算法十分简易,对错误情况的处理也十分全面,值得我好好学习。
  2. 但代码中还是有一些可以优化的地方。下面就一一列出。

    a)setTransPortWeight()函数可以优化,将换乘站点存起来就不需要每次O(n2)的扫描了。

    b)读入地图的部分如果也模块化,main函数就会更为精简,整个程序的可读性也会上升许多。

    c)代码习惯方面,一行最好不要太长,还有就是每个函数或模块前最好写上注释,可读性更强。

  3. 希望我们在结对编程中能互相帮助,共同进步~

个人作业week3——代码复审的更多相关文章

  1. 个人博客作业week2——代码复审

    1.代码规范 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 代码规范并不是从官僚制度下产生,它是为了提高项目团队开发效率而产生的一种工具,能够极大的增强代码可读 ...

  2. [2017BUAA软工]第二次博客作业:代码复审

    〇.comment链接 https://github.com/hanayashiki/Sudoku/issues/1 一.代码复审 1.概要部分 (1)代码能符合需求和规格说明么? 经测试,对于合法输 ...

  3. 个人作业 - Week2 - 代码复审

    代码复审Check List 概要部分 代码能符合需求和规格说明么? 能完成1~1000000个数独的求解与生成,并能处理异常输入,满足需求. 代码设计是否有周全的考虑? 为输入单独开设了一个输入检测 ...

  4. 作业三: 代码规范、代码复审、PSP

    分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...

  5. 作业三 代码规范 代码复审 PSP

    1.是否需要有代码规范(5分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 1这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 反对.我并不认为代码规范都 ...

  6. 个人作业Week 2 ----------代码的规范和代码复审

    1.是否需要有代码规范 从个人理解的角度出发,我认为代码规范还可以细分为代码的风格还有代码的结构设计(就好比排版一类的) 以前在上C语言课程的时候就看到过,老师会在打“{”的时候进行一个换行,但是有些 ...

  7. 个人博客作业Week2(代码规范,代码复审)

    Q:是否需要有代码规范 首先我们来搞清楚什么是“代码规范”,它和“代码风格”又有什么关系.依据个人的审美角度,我可能更喜欢在函数与函数之间空出一行,可能在命名习惯和代码注释上更加的internatio ...

  8. 作业三:代码规范、代码复审、PSP

    一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...

  9. 作业三(代码规范、代码复审、PSP)

    1.代码规范: 我支持代码要有规范,理由如下. (1).艺术是一个很带有个人风格的学科,天马行空才能凸显出自己的价值.但不要忘了,会艺术的不是生下来就会艺术, 他也需要按照前辈的步骤一步一步的学习基础 ...

随机推荐

  1. On cloud, be cloud native

    本来不想起一个英文名,但是想来想去都没能想出一个简洁地表述该意思的中文释义,所以就用了一个英文名称,望见谅. Cloud Native是一个刚刚由VMware所提出一年左右的名词.其表示在设计并实现一 ...

  2. Concurrency != Parallelism

    前段时间在公司给大家分享GO语言的一些特性,然后讲到了并发概念,大家表示很迷茫,然后分享过程中我拿来了Rob Pike大神的Slides <Concurrency is not Parallel ...

  3. Node.js实现RESTful api,express or koa?

    文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...

  4. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  5. maven archetype二三事

    maven plugin 创建maven archetype 骨架的plugin是 <plugin> <groupId>org.apache.maven.plugins< ...

  6. GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断

    多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...

  7. 微信扫描下载提示以及js判断用户手机系统

            今天抽空也写一下这个教程吧,这里面涉及到就是一个APP的页面下载.公司有这个需求,让做一个页面,就是二维码扫描下载.一开始我做的版本是只能是通过浏览器来下载的,但是实际应用中,很多用户 ...

  8. 一个难倒 3年 android开发经验 " 工程师 " 的 "bug"

    一个关于 imageView 设置 scaleType 的问题. 就在刚才 晚上9 点多的时候,我的一个外包伙伴发一个工程代码我,叫我去看下这样一个"bug",说折腾了很久,图片选 ...

  9. TeamCity : Build 版本控制系统配置

    VCS (版本控制系统) 是用来跟踪项目源文件版本变化的系统.它还有其它的名字,比如 SCM(源代码管理).当前 TeamCity 内置支持的 VCS 类型有:Git, Subversion, Mer ...

  10. Unicode转义(\uXXXX)的编码和解码

    在涉及Web前端开发时, 有时会遇到\uXXXX格式表示的字符, 其中XXXX是16进制数字的字符串表示形式, 在js中这个叫Unicode转义字符, 和\n \r同属于转义字符. 在其他语言中也有类 ...