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. 监督学习 VS 无监督学习

    监督学习 就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),再利用这个模型将所有的输入映射为 ...

  2. App开发的新趋势

    移动开发这些年,移动开发者人数越来越多,类似的培训公司发展也很快,不过伴随着的是移动应用的需求这几年发展更为旺盛.要开发好的App,纯原生开发肯定是最佳选择.但是这么多年发展,原生开发的难度并没有降低 ...

  3. 那些年黑了你的微软BUG

    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 前言 炎炎夏日,朗朗乾坤,30℃ 的北京,你还在 Coding 吗? 整个 7 月都在忙项目,还加了 ...

  4. 【PRINCE2是什么】PRINCE2认证之七大原则(5)

    我们先来回顾一下,PRINCE2七大原则分别是持续的业务验证,经验学习,角色与责任,按阶段管理,例外管理,关注产品,剪裁. 第五个原则:例外管理. PRINCE2对每个项目目标都定义了容许偏差来建立授 ...

  5. 广州的小伙伴福利-由微软组织的在广州SQL Server线下活动

    请按照如下格式报名.

  6. .Net中的RealProxy实现AOP

    序言 这个AOP要从我们公司的一个事故说起,前段时间公司的系统突然在乌云中出现,数据被泄露的一览无余,乌云上显示是SQL注入攻击.呵,多么贴近生活的一个露洞,可谓是人尽皆知啊.然而却华丽丽的给拉我们一 ...

  7. Log4net入门(日志文件篇)

    在上一篇Log4net入门(控制台篇)中,我们将日志信息输出到控制台中,在这一篇中,我们将描述如何将日志信息写到文件中.要将日志信息写入文件非常简单,只需要在Log4net.config配置文件中添加 ...

  8. SharePoint 2013 create workflow by SharePoint Designer 2013

    这篇文章主要基于上一篇http://www.cnblogs.com/qindy/p/6242714.html的基础上,create a sample workflow by SharePoint De ...

  9. 使用java传参调用exe并且获取程序进度和返回结果的一种方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在某个项目中需要考虑使用java后台调用由C#编写的切图程序( ...

  10. 介绍,介绍我的底层支持库 Net.Sz.CFramework

    Net.Sz.CFramework  是我自己的底层库,是经过验证的底层库. 包含: socket tcp协议,socket http协议线程池,线程模型,任务模型,定时器模型,日志模块脚本模块一些辅 ...