关于“代码规范”,“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.是否有可以删除的日志或调试代码?
日志和调试代码是在程序员编程过程中形成的,呈现出来的不应该是整个过程,而应该是成品。那么问题是,删除“日志和调试代码”之后会不会对项目功能有影响,会不会降低代码的可读性,会不会阻碍日后的开发。
以上所有内容纯属个人意见。部分内容还不够具体,今后会更加深入看待问题,改正错误。谢谢!
关于“代码规范”,“Review”和“Check list”(续)的更多相关文章
- 关于“代码规范”,“Review”和“Check list”
关于“代码规范”,“Review”和“Check list”,就我个人理解,这三者相辅相成.代码规范是在编程时就该注意的,为Review减轻负担.而要进行Review,又需要一个Check list作 ...
- Java静态检测工具/Java代码规范和质量检查简单介绍(转)
静态检查: 静态测试包括代码检查.静态结构分析.代码质量度量等.它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行.代码检查代码检查包括代码走查.桌面检查.代码审查等,主要检查代码 ...
- Android 代码规范大全
前言 虽然我们项目的代码时间并不长,也没经过太多人手,但代码的规范性依然堪忧,目前存在较多的比较自由的「代码规范」,这非常不利于项目的维护,代码可读性也不够高, 此外,客户端和后端的研发模式也完全不同 ...
- 转!!Java代码规范、格式化和checkstyle检查配置文档
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
- 作业三:代码规范、代码复审、PSP
一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...
- 代码规范、代码复审、PSP
作业三: 代码规范.代码复审.PSP 代码规范 代码规范的重要性 一.规范的代码可以促进团队合作 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码必定会风格迥异.且不说会存 ...
- 代码规范之争——[个人Week2作业]
这四个问题均是出自 http://goodmath.scientopia.org/2011/07/14/stuff-everyone-should-do-part-2-coding-standards ...
- Java代码规范、格式化和checkstyle检查配置文档
http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...
- Jenkins系列——使用checkstyle进行代码规范检查【升级版】
1.背景 在<Jenkins系列——使用checkstyle进行代码规范检查>一文中完成了ant实现代码规范检查的例子.但存在以下缺陷: 每个作业都需要配置一个不同的checkstyle ...
随机推荐
- Java并发(一)并发编程的挑战
目录 一.上下文切换 1. 多线程一定快吗 2. 测试上下文切换次数和时长 3. 如何减少上下文切换 4. 减少上下文切换实战 二.死锁 三.资源限制的挑战 四.本章小结 并发编程的目的是为了让程序运 ...
- HDU1863(Kruskal+并查集水题)
https://cn.vjudge.net/problem/HDU-1863 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可). ...
- Java 包(package)
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 1.包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了树形目录的存储方式 ...
- calico 排错记录 apt-get install telnet
1.用kubespray部署一个单节点集群,kubectl get pods -n kube-system,结果: calico-node-7v8wx 1/1 Running 0 2dcalico-n ...
- C3P0配置实战
C3P0: 一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 默认情况下(即没有配置连接池的 ...
- Spring Boot和Dubbo整合
provider端 POM依赖 <dependencies> <dependency> <groupId>org.springframework.boot</ ...
- Android应用安全之第三方SDK安全
第三方sdk的包括广告.支付.统计.社交.推送,地图等类别,是广告商.支付公司.社交.推送平台,地图服务商等第三方服务公司为了便于应用开发人员使用其提供的服务而开发的工具包,封装了一些复杂的逻辑实现以 ...
- HNOI2019 摸鱼记
感觉准备省选时有点浮躁,没有准备联赛时那样认真, 希望能将这次省选当做一个教训吧QAQ. Day -inf 基本上把要学的东西都学了,至少做到了自己心里有底. Day 0 乒乓球室没开差评,打隔膜不带 ...
- [转]JVM系列三:JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java ...
- 设计模式 笔记 桥接模式 Bridge
//---------------------------15/04/15---------------------------- //Bridge 桥接模式----对象结构型模式 /* 1:意图:将 ...