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. Java下好用的开源库推荐

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文想介绍下自己在Java下做开发使用到的一些开源的优秀编程库,会不定 ...

  2. Storm介绍(二)

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是Storm系列之一,主要介绍Storm的架构设计,推荐读者在阅读 ...

  3. ABP(现代ASP.NET样板开发框架)系列之5、ABP启动配置

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之5.ABP启动配置 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  4. 今天有群友不是很清楚htm直接存数据库的危害,我简单举个例子

     通过这个案例就知道为什么不要把原生的html放数据库了  常见的几种转码  常用的几种显示方法 只有原生html和最下面一种弹框了,变成了持久xss 如果是Ajax的方式,请用@Ajax.JavaS ...

  5. Android 开发环境在 Windows7 下的部署安装

    Android SDK Android SDK 为 Android 应用的开发.测试和调试提了必要的API库和开发工具. ADT Bundle 下载 如果你是一个android 开发新手,推荐你下载使 ...

  6. python实现网络爬虫下载天涯论坛帖子

    最近发现天涯论坛是一个挺有意思的网站,有各种乱七八糟的帖子足以填补无聊时候的空虚感,但是相当不爽的一件事就是天涯的分页模式下想连贯的把楼主的内容看完实在是太心酸了,一个999页的帖子,百分之九十都是无 ...

  7. JavaScript动画-模拟拖拽

    模拟拖拽的原理: x1等于div.offsetLeft y1等于div.offsetTop x2等于ev.clientX(ev表示event事件) y2等于ev.clientY 当我们在方块上按下鼠标 ...

  8. Django:手把手带你入门

    一.开发环境: Python:2.7:PyCharm 4 二.Django的安装: 打开Pycharm --> 新建项目--> 看图操作--> 自动安装Django环境 三.创建第一 ...

  9. jeffy-vim-v3.0

    jeffy-vim-v3.0 修改了配色.

  10. 举个栗子学习JavaScript设计模式

    目录 前言 创建型模式 单例模式 构造器+原型 简单工厂模式 工厂模式 创建型模式比较 结构性模式 模块模式 外观模式 混入模式 装饰模式 适配模式 行为型模式 观察者模式 中介者模式 命令模式 责任 ...