zoukankan      html  css  js  c++  java
  • 个人作业Week2-代码复审

    一、代码复审Check List

    1.概要部分

    代码能符合需求和规格说明么?

    代码符合需求和规格说明,对于正确的输入能返回正确的结果,对于不正确的输入也能输出相应的提示。

    代码设计是否有周全的考虑?

    考虑相对周全,对于参数个数不正确会输出"Too many or too few arguments!"。-c 模式下n的范围不正确会输出"Invalid -c number"。但是如果-s 后跟一个不存在的文件的名称的话不会提示错误信息。

    代码可读性如何?

    可读性良好,关键函数和变量都有注释,缩进也很到位。

    代码容易维护么?

    不是特别容易,代码没有采用面向对象的方式,没有将功能抽象成对象,使得代码耦合度不高,并且代码中有硬编码存在。

    代码的每一行都执行并检查过了吗?

    执行并检查了。

    2.设计规范部分

    设计是否遵从已知的设计模式或项目中常用的模式?

    没有遵从已知的设计模式或项目中常用的模式而是想到哪写到哪。

    有没有硬编码或字符串/数字等存在?

    有硬编码。

    代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)?

    依赖windows。

    开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?

    重新实现了字符串转成整型数字的算法,可以用atoi函数替代。

    有没有无用的代码可以清除?(很多人想保留尽可能多的代码,因为以后可能会用上,这样导致程序文件中有很多注释掉的代码,这些代码都可以删除,因为源代码控制已经保存了原来的老代码。)

    有,之前用freopen打开文件,后来改成了fopen时只是注释掉了freopen的代码,而freopen的代码是可以直接删除的。

    3.代码规范部分

    修改的部分符合代码标准和风格么(详细条文略)?

    花括号格式不统一。

    4.具体代码部分

    有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?

    对错误进行了处理,检查了调用的外部函数的返回值。

    参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数?

    无错误,字符串长度是字节的长度,从0开始计数。

    边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环?

    矩阵的边界是0到8,没有Switch语句,不会死循环。

    有没有使用断言(Assert)来保证我们认为不变的条件真的满足?

    单元测试里用到了Assert,主程序中没有。

    对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化?

    在栈和静态存储区上申请和释放。程序打开文件后没有调用相应方法来关闭文件,有可能导致资源泄露。可以将所有输出暂时保存在一个字符数组中,在程序结束前一次性输出,可以提高程序的运行效率。

    数据结构中是否有无用的元素?

    没有无用元素。

    5.效能

    代码的效能(Performance)如何?最坏的情况是怎样的?

    效能优异,生成100w个最终数独要4.717s,求解100w个数独要49.909s。

    代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中string的操作是否能用StringBuilder 来优化)?

    没有明显可优化部分。

    对于系统和网络调用是否会超时?如何处理?

    没有系统和网络调用。

    6.可读性

    代码可读性如何?有没有足够的注释?

    总的来说还不错,但是没有采用面向对象的方法,没有将功能分别封装到不同的类中,所有的代码全都放在一个文件当中,对功能的划分不是很明确。一些注释掉的无用代码没有删除,有可能会影响到别人的阅读。

    7.可测试性

    代码是否需要更新或创建新的单元测试?

    单元测试很到位,不需要更新或创建新的单元测试。

    还可以有针对特定领域开发(如数据库、网页、多线程等)的核查表。

    不需要。

    二、设计一个代码规范

    请根据你个人项目使用的语言,尝试使用其中的一款工具,回答以下问题:

    工具提供的代码规范和你个人的代码风格有什么不同?

    (1)没有copyright。
    (2)tab应该替换成空格。
    (3)"//"和注视内容之间要有一个空格。
    (4)一个函数的'}'后要有一个空行。
    (5)else要在'}'后,且之间要有一个空格。
    (6)注释和代码间要有至少两个空格。
    (7)'{'要和代码同一行,且隔一个空格。
    (8)不能使用 using namespace std。

    工具提供的代码规范里有哪些部分是你之前没有想到的?

    (1)没有copyright。
    (2)tab应该替换成空格。
    (3)"//"和注视内容之间要有一个空格。
    (4)一个函数的'}'后要有一个空行。
    (5)else要在'}'后,且之间要有一个空格。
    (6)注释和代码间要有至少两个空格。
    (7)'{'要和代码同一行,且隔一个空格。
    (8)不能使用 using namespace std。

    为什么要这样规范?这样的规范有意义吗?

    copyright可以表明代码的作者。
    tab应该替换成空格是为了防止不同编译器打开代码时显示不一样。
    不让使用using namespace std;是因为使用的话会增加名称冲突的可能性。
    其余的规定是为了美观,增强可读性。

    代码规范:

    • 用4个空格代替tab。
    • 开头需注明copyright。
    • c的头文件要申明在c++的前面。
    • 一行的字符不超过80。
    • 赋值号的两端需要有空格。
    • 注释和代码至少差两个空格。
    • //和注释的内容之间要有一个空格。
    • 行末不许出现多余空格。
    • { 不能单独出现在一行,要跟着判断条件空的一个空格。
    • 不许在判断后出现空行,所谓的Redundant blank line。
    • 不要把多条语句放在一行。比如if (a>b) return ; 要放在两行写。
    • else需要出现在之前的if的}的同一行。
    • return; return和;中不许有空格。
    • 不许用namespace,可以替换为using std::cin;等等。
    • 类名/结构体名首字母大写。
    • 变量名第一个单词首字母小写,其余单词首字母大写。
    • 一行只能定义一个变量。
    • 不能使用goto语句。
  • 相关阅读:
    USACO 3.3 A Game
    USACO 3.3 Camelot
    USACO 3.3 Shopping Offers
    USACO 3.3 TEXT Eulerian Tour中的Cows on Parade一点理解
    USACO 3.3 Riding the Fences
    USACO 3.2 Magic Squares
    USACO 3.2 Stringsobits
    USACO 3.2 Factorials
    USACO 3.2 Contact
    USACO 3.1 Humble Numbers
  • 原文地址:https://www.cnblogs.com/yaoling1997/p/7617662.html
Copyright © 2011-2022 走看看