《构建之法(第三版)》第四章

4.1 代码规范

代码规范可以分为两个部分:

  • 代码风格规范:主要是文字上的规定
  • 代码设计规范:牵扯到程序设计,模块之间的关系,设计模式等方方面面的通用原则。

4.2 代码风格规范

代码风格的原则是简明,易读,无二义性

  • Tab键在不同的情况下会显示不同的长度,严重干扰阅读体验。4个空格的距离可读性最好
  • 行宽必须限制,可以限定为100字符
  • 在复杂的条件表达式中,用括号清楚地表示逻辑优先级
  • 每个“{”和“}”都独占一行
    if (condition)
    {
    DoSomething();
    }
    else
    {
    DoSomethingElse();
    }
  • 不要把多条语句放在一行上,更严格地说,不要把多个变量定义在一行上,如:Foo foo1, foo2;
  • 匈牙利命名法:
    fFileExist   表明是一个bool值,表示文件是否存在;
    szPath  表明是一个以0结束的字符串,表示一个路径
  • 下划线用来分隔变量名字中的作用域标注和变量的语义
  • 所有的类型/类/函数名都用Pascal形式(所有单词的第一个字母都大写),所有的变量都用Camel形式(第一个单词全部小写,随后单词随Pascal形式);类/类型/变量为名词或组合名词,如Member、ProductInfo等;

    函数用动词或动宾组合词来表示,如get/set、RenderPage()

  • 不要注释程序是怎么工作的(How),注释是为了解释程序做什么(What),为什么这样做(Why),以及要特别注意的地方。复杂的注释应该放在函数头,很多函数头的注释都用来解释参数的类型等。注释(包括所有源代码)应该只用ASCII字符

4.3 代码设计规范

代码设计规范不光是程序书写的格式问题,而且牵涉到程序设计、模块之间的关系、设计模式等方方面面。如果所写的程序会被很多人使用需要遵守以下规则:

  • 函数最好有单一的出口,为了达到这一目的,可以使用goto
  • 在Debug版本中,所有的参数都要验证其正确性。在正式版本中,对从外部(用户或别的模块)传递过来的参数,要验证其正确性。当觉得某事肯定如何时,可以用断言:Assert (p != NULL)。如果认为某事可能会发生,这时就要写代码来处理可能发生的错误情况。如:
    ……
    p = AllocateNewSpace();
    if (p == NULL)
    { // error handling.
    }
    else
    { // use p to do something
    }

4.4 代码复审

代码复审就是看代码是否在“代码规范”的框架内正确地解决了问题。形式有自我复审、同伴复审、团队复审,同伴复审是最基本的复审手段。

代码复审核查表应该囊括(不局限于)概要部分(整体风格)、设计规范部分(按照已知的规则去约束)、代码规范部分、具体代码部分、效能、可读性、可测试性。

4.5 结对编程

结对编程中有两个角色:

  • 驾驶员(driver):控制键盘输入
  • 领航员(navigator):起到领航、提醒的作用

结对编程步骤:

  • 驾驶员:写设计文档,进行编码和单元测试等XP开发流程
  • 领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题
  • 驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟。领航员要控制时间
  • 主动参与。任何一个任务都首先是两个人的责任,也是所有人的责任。没有“我的代码”、“你的代码”或“他/她的代码”,只有“我们的代码”
  • 只有水平上的差距,没有级别上的差异。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利
  • 设置好结对编程的环境,座位、显示器、桌面等都要能允许两个人舒适地讨论和工作。如果是通过远程结对编程,那么网络、语音通讯和屏幕共享程序要设置好

传统复审最大的缺点是复审者缺少对程序的深入了解,

传统复审设计人员多,复审效率不能平衡。在结对编程的过程中不断重复的互相复审可以十分默契地提高效率。结对编程最大的特点在于“领航员”的引入。如果实际中这个角色不能“领航”,则不如放弃结对编程。

4.6 两人合作的不同阶段和技巧

两人合作分为萌芽阶段,磨合阶段,规范阶段,创造阶段,解体阶段。

评论人的三种层次,评论别人的代码的时候也是要注意自己侧重那个层次的,这样才能达到最好的效果,被评论人才能更好地找出自己需要改正的地方并解决:

  • 最外层:行为和后果
  • 中间层:习惯和动机
  • 最里层:本质和固有属性

本章讲了很多两人合作的问题,如果两个人之间的合作都处理不好,又如何谈团队合作?有些人技术相当好,但是却不能很好地与人沟通,不能与团队中其他人的风格相融通。团队中只有通过频繁地相互交流,互相融通,在研发过程中遇到的困难能最快、最有效地得到解决。

原文地址:https://www.cnblogs.com/Jspo/p/8496180.html

时间: 2024-10-18 16:35:45

《构建之法(第三版)》第四章的相关文章

Python学习笔记_Chapter 4数据保存到文件

1. What For 将基于内存的数据存储到磁盘上,达到持续存储. 2. HOW 方法一: 将数据写到文件中 常规的处理方式 1 #file.x被打开的文件,model打开文件的方式 2 out=open('file.x','model') 3 #print将item写入到file指示的文件中,item可以是字符串或列表等 4 print(item,file=out) 5 #close是必须的,起到刷新输出的作用 6 out.close() open('file','model')中model

系统分析员考试复习笔记-4:第四章 数据通讯与计算机网络

 1.      第四章数据通讯与计算机网络(P143) 计算机网络源于计算机技术与数据通讯技术的结合,它通过网络链路将分布在各个地理位置的多台独立的计算机相互连接起来,从而形成一种网络,并在网络操作系统.网络管理软件和网络通讯协议的管理和协调下,实现资源(硬件.软件和数据)共享. 1.1.      数据通讯基础知识 1.1.1.     信道特性 各种数据终端设备交换数据,必然要传输数据(模拟信号或者数字信号),数据传输的路径称为信道.信道可以分为物理信道和逻辑信道.物理信道由传输介质和

第四章《数据保存到文件》

知识点: stript():去除空白字符 print()保存 代码: try: with open('its.txt','w') as data: print("it's...",file=data) except IOError as err: print('file error: '+str(err)) man=[]other=[]try: data = open('sketch.txt') for each_line in data : try: (role,line_spoke

【数据分析 R语言实战】学习笔记 第四章 数据的图形描述

4.1 R绘图概述 以下两个函数,可以分别展示二维,三维图形的示例: >demo(graphics) >demo(persp) R提供了多种绘图相关的命令,可分成三类: 高级绘图命令:在图形设备上产生一个新的图区,它可能包括坐标轴.标签.标题等. 低级绘图命令:在一个己经存在的图形上加上更多的图形元素,如额外的点.线和标签. 交互式图形命令:允许交互式地用鼠标在一个已经存在的图形.上添加图形信息或者提取图形信息. 使用R语言作图,主要按照以下步骤进行: ①取原始数据,准备好绘图需要的变量. ②

如何将前端数据保存到文件

有时候,网页上需要提供将当前页面上的数据导出为本地文件的功能,例如将页面上的一个表格导出为csv文件.这个功能看似简单,实际上却没有什么直接的方法.由于导出文件的操作(比如浏览文件目录,创建本地文件等)已经超出了浏览器内JS解释器的职责范围,需要和操作系统交互了,所以如果没有浏览器提供接口支持,是没法导出文件的.但是,有一个巧妙的办法,就是使用<a>元素(https://stackoverflow.com/questions/13405129/javascript-create-and-sav

Python 脚本生成测试数据,Python生成随机数据,Python生成大量数据保存到文件夹中

代码如下: import random import datetime import time dataCount = 10*100*100 #10M. codeRange = range(ord('a'),ord('z')) alphaRange = [chr(x) for x in codeRange] alphaMax = len(alphaRange) daysMax = 42003 theDay = datetime.date(1900,1,1) def genRandomName(n

把BitmapSource图片数据保存到文件

实现函数: /// <summary> /// 保存图片到文件 /// </summary> /// <param name="image">图片数据</param> /// <param name="filePath">保存路径</param> private void SaveImageToFile(BitmapSource image, string filePath) { BitmapE

补基础:自学:计算机科学导论 第四章 数据运算

4.1 逻辑运算:指那些应用于模式中的一个二进制位,或在两个模式中相应的两个二进制位的相同基本运算. 4.1.1 位层次上的逻辑运算 0 代表逻辑 假, 1 代表逻辑 真. 4种操作: 非(NOT):只有一个输入 如果输入是0, 则输出为1.反之亦然 应用:对整个模式求反 与(AND)有两个输入 如果输入都是1, 则输出为1.输入中只要有一位是0,则结果为0 应用:把一个位模式的指定位复位(置0).这种情况下,第二个输入称为掩码,掩码中的0位对第一个输入中相应的位进行复位. 或(OR)有两个输入

php导出csv数据在浏览器中输出提供下载或保存到文件的示例

来源:http://www.jb51.net/article/49313.htm 1.在浏览器输出提供下载 /** * 导出数据到CSV文件 * @param array $data 数据 * @param array $title_arr 标题 * @param string $file_name CSV文件名 */ function export_csv(&$data, $title_arr, $file_name = '') { ini_set("max_execution_tim

Head First Python 第二章 函数模块&amp;第三章 文件与异常&amp;第四章 持久存储&amp;第五章 处理数据

第三章 1.共享模块 模块和发布工具箱全世界共享模块 编写函数,以.py为文件后缀名,第三方库都在PyPI *注释代码:三引号(单双都可以) 发布过程P40 使用发布工具,函数模块变成了一个“发布”,可以使用import导入其他程序 2.如果函数模块功能不满意 添加参数以供api选择比添加函数工作量小! 首先考虑BIF内置函数 ----------------------------------------------------------- 第四章 1.文件 open()语句,readlin