首页 > 技术文章 > 《构建之法》小组第三次

Sswallow 2017-04-27 17:08 原文

      这周我们小组学习了《构建之法》的第四章,从中知道了很多代码规范的各种原则,这些原则在编程时约束我们,可以使我们的程序更加规范化,可读性更高,便于复审,测试和修改。

      代码规范可以分成两个部分。一、代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。代码风格的原则是:简明,易读,无二义性。其中的内容包括:①缩进:一般不用Tab键,Tab键在不同的情况下会显示不同的长度,干扰阅读体验。4个空格的距离从可读性来说刚刚好。②行宽:行宽必须限制,如今可以限定为100字符。③括号:在复杂的条件表达式中,用括号清楚地表示逻辑优先级。④断行与空白的{}行:用明确的“{}”来判断程序的结构,在有多层控制嵌套时,可以看清结构和对应关系。⑤分行⑥命名:命名时尽量能让程序员一眼就能看出变量的类型,避免用错。⑦下划线:用来分割变量名字中的作用域标注和变量的语义。⑧大小写:用大小写可以区分由多个单词组成的变量名。⑨注释:注释是为了解释程序做什么,为什么这样做,以及要特别注意的地方。复杂的注释应该放在函数头,很多函数头的注释都用来解释参数的类型等,需注意的是,注释要随着程序的修改而不断更新,一个误导的注释往往比没有注释更糟糕,另外,注释(包括所有的源代码)应该只用ASCII字符,不要用中文或其他特殊字符,否则会极大地影响程序的可移植性。

      二、代码设计规范,不光是程序书写的格式问题,而且牵扯到程序设计、模块之间的关系、设计模式等方方面面的通用原则。其中的内容有:①函数:关于函数最重要的原则是:只做一件事,并且要做好。②goto:函数最好有单一的出口,为了达到这一目的,可以使用goto,有助于程序逻辑的清晰体现。③错误处理:参数处理,对从外部(用户或别的模块)传递过来的参数,验证其正确性;断言,如多当你觉得某事肯定如何时就可以用断言。④关于类的处理:1.类:使用类来封装面向对象的概念和多态;避免传递类型实体的值,应该用指针传递;对于有显式的构造和析构函数的类,不要建立全局的实体;仅在必要时,才使用“类”。2.struct:如果只是数据的封装,用struct即可。3.成员类型:公共,保护,私有。4.数据成员:数据类型的成员用m_name说明;不要使用公共的数据成员,要用inline访问函数,可兼顾封装和效率。5.虚函数:使用虚函数来实现多态;如果一个类型要实现多态,在基类中的析构函数应该是虚函数。6.构造函数:构造函数不返还错误。7.析构函数:把所有的清理工作放在析构函数中。8.new和delete:尽量实现自己的new/delete,可以方便的加上自己的跟踪和管理机制;检查new的返回值,new不一定都成功;释放指针时不用检查null。9.运算符:运算符的实现必须非常有效率,如果有复杂的操作,应定义一个单独的函数。10.异常:异常是在“异乎寻常”的情况下出现的,它的设置和处理都要花费“异乎寻常”的开销,所以不要用异常作为罗技控制来处理程序的主要流程。11.类型继承:用const标注只读的参数;用const标注不改变数据的函数。

      知道了这些规范可以时我们程序的格式有一定的统一。然而我们是一个团队,需要开发一个软件工程。软件工程包括了开发、运营、维护软件的过程中的很多技术、做法、习惯和思想。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”,软件开发流程的目的是为了提高软件开发、运营、维护的效率,以及提升用户满意度、软件的可靠性和可维护性。软件开发流行不光指团队的流程,因为软件软对是由个人组成的。在团队的大流程中,是每一个具体的个人在做开发、测试、用户界面设计、管理、交流等工作。所以团队合作和是很重要的,程序员之间需要不断地交流,在完成自己的编程任务后,需要进行单元测试,在单元测试的基础上,就可以建立关于这一模块的回归测试,回归即倒退、退化、退步的意思。在实践中,在一个项目的最后稳定阶段,所有人都要参加全面的测试工作,把所有以前发现并修复的bug找出来,一个一个验证,以此证明所有已经修复过的bug的确得到了修复,并且没有在最后一个版本中“复发”,这就是一个大规模的、全面的“回归测试”。有一个完整的测试,才能保证开发过程中的每一步都是正确的,防止错误越扩越大。

     由此看来,我们小组需要努力的地方还有很多很多,但是只要大家一起齐心协力,我们肯定可以有一个完整可靠的产品。

推荐阅读