• 关于“代码规范”,“Review”和“Check list”(续)


         在前两天的    关于“代码规范”,“Review”和“Check list”    一文中,我给自己列出了Check list,如下:

          1.代码能够工作么?它有没有实现预期的功能,逻辑是否正确等。

          2.所有的代码是否简单易懂?

          3.代码符合你所遵循的编程规范么?这通常包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释。

          4.是否存在多余的或是重复的代码?

          5.代码是否尽可能的模块化了?

          6.是否有可以被替换的全局变量?

          7.是否有被注释掉的代码?

          8.循环是否设置了长度和正确的终止条件?

          9.是否有可以被库函数替代的代码?

          10.是否有可以删除的日志或调试代码?

          邹老师给我提了切实可行的建议(“如果每个检查点 check-point 都能列出一个情况, 那说明你对这个检查点掌握了。”)。于是决定将以上十条都各列出一个或多个情况,用以完善自己的Check list,以及更好的对检测点进行掌握。以下内容均已第一次作业所做的“四则运算”为例,进行说明。

          1.代码能够工作么?它有没有实现预期的功能,逻辑是否正确等。

             什么是“代码能够工作”?“代码能够工作”至少软件可以正常启动,不会无缘由的自关闭或弹出错误提示。

             什么是“预期的功能和逻辑”?能够进行两个数和四个数的“+,-,*,/”运算,在四个数的运算中可能含有括号,可以选择运算符号,可以选择难易程度,可以记录“总答题数”、“正确题数”、“错误题数”。按“开始答题”时判断运算符和难易程度,显示题目。按“提交答案”时判断填入的答案与标准答案是否一致,并显示“总答题数”、“正确题数”、“错误题数”,然后显示下一题。按“结束答题”时弹出是否结束答题的对话框,确定即清除题目、清零“总答题数”、“正确题数”、“错误题数”,取消即继续答题。

             以上是第一条要进行的具体工作。

          

          2.所有的代码是否简单易懂?

            什么是“简单易懂”?以以下代码为例:

    private void submit_Click(object sender, EventArgs e)
            {
                Object result = new DataTable().Compute(exp.Text, null);
                
                // TODO: "1+2/0-1" 重新生成表达式
                
                String resultStr = result.ToString();
                if (resultStr.Equals(mixAnswer.Text))
                {
                    // 累计答题结果:正确数
                    rightNum++;
                    dictionary.Add(exp.Text,true);
                         
                }
                else
                {
                    // 累计答题结果:错误数
                    falseNum++;
                    dictionary.Add(exp.Text, false);
                 
                }
    
                totalNumber.Text = Convert.ToString(rightNum + falseNum);
                rightNumber.Text = Convert.ToString(rightNum);
                falseNumber.Text = Convert.ToString(falseNum);
    
                // 提交一道题后,自动开始出新题(开始答题)
                start_Click(sender, e);
            }

    函数名是否符合规范(submit_Click),执行顺序是否清晰可见(~if~else~start_Click),变量是否准确声明(Object result)。

         3.代码符合你所遵循的编程规范么?这通常包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释。

            同一函数、同一操作的首尾大括号是否对齐,变量名和函数名是否符合英文规范,行的长度是否有限制,同级操作下是否进行了缩进、对齐,注释与代码行是否有间隔。

         4.是否存在多余的或是重复的代码?

           检查是否有没有用到的函数或者变量,再例如以上代码的最后“start_Click(sender, e);”,如果我又写了一遍与之相同的操作,即视为重复代码,应当予以替换。

         5.代码是否尽可能的模块化了?

            什么是“模块化”?模块化就是将大的问题分解为若干个小的可以简单解决的问题。例如以上代码就是将所有需求中的“提交答案”单独分出,然后进行解决。就我理解,“模块化”就是长的实现某项功能的代码可以单独提出,作为一个函数,然后再在语句中调用这个函数。那么检查点就是,是否有“长的实现某项功能的代码”没有被单独作为函数。

      

        6.是否有可以被替换的全局变量?

          检查是否该变量需要全局使用,如果不需要,替换后是否会影响功能,是否会引发逻辑错误。

        7.是否有被注释掉的代码?

           被注释掉的代码记录的是程序员的思考过程,在完整工程中,因为有注释的存在,并不需要留下无用的代码,否则会不利于读者思考问题和方法。

       

        8.循环是否设置了长度和正确的终止条件?

            例如一个循环, 可以考虑 0, 1, n-1, n, n+1 这些边界条件是否能覆盖。 中间有没有可能跳出循环,有没有一些条件导致循环的控制变量被修改, 有没有情况导致没有初始化的变量在循环中被使用。 循环结束后, 是否还会用控制变量的值 (这个值会变)。

            以上是邹老师的原话。在这个“四则运算”中,我设计的循环在于以“开始答题”为起点,“提交答案”循环体,以“结束答题”为终止。因此整个项目的循环就是这个工程是否能正常、无休止的运行下去。

         9.是否有可以被库函数替代的代码?

           是否有我们设计的函数可以直接用库中原有的函数所代替。在以上代码中有这样一段“Object result = new DataTable().Compute(exp.Text, null);”,其中运用了DataTable().Compute()函数用来计算字符串型的数学表达式,我们可以自己写一个一样功能的函数,但是既然库中已经有了,我们直接调用即可。

         10.是否有可以删除的日志或调试代码?

             日志和调试代码是在程序员编程过程中形成的,呈现出来的不应该是整个过程,而应该是成品。那么问题是,删除“日志和调试代码”之后会不会对项目功能有影响,会不会降低代码的可读性,会不会阻碍日后的开发。

         以上所有内容纯属个人意见。部分内容还不够具体,今后会更加深入看待问题,改正错误。谢谢!

           

  • 相关阅读:
    union 和 union all 区别
    sql 日期类型空值等于 1900-01-01
    IDENTITY_INSERT 自增开关使用
    Convert.ToDateTime() 与 DateTime.TryParse()区别
    SOLID 原则摘录
    不同JavaScript 代码段 变量作用域
    sql 常见错误总结
    jquery.form插件 提交表单 type="hidden"取不到值的问题记录
    同义词
    SQL优化传送门
  • 原文地址:https://www.cnblogs.com/xiaym896/p/5277204.html
Copyright © 2020-2023  润新知