zoukankan      html  css  js  c++  java
  • 关于软件工程的思考03:两人合作

    两人合作

    代码风格规范

    代码风格的原则是:简明、易读、无二义性,具体包括以下几个方面:

    1、缩进:最好用4个空格,因为编辑工具可以设置一个tab键为几个空格,如果设置被修改的话会影响阅读体验。

    2、行宽:80个字符(以前),现在随着硬件升级可以提高到100个字符

    3、括号:选择最清晰的程序结构:

    if(condition)
    {
    	DoSomething();
    }
    else
    {
    	DoSomethingElse();
    }
    

    4、不要把多条语句放在一行,不要把多个变量的定义放在一行

    5、命名:对于不区分变量类型的语言来说,命名中要有变量类型让人一眼看出来变量是什么类型,避免可能的错误,这就是匈牙利命名法,一些强类型的语言中就没有必要在命名中加入变量类型。命名一定要避免过多的描述,能从上下文得到的信息就无需写在变量名中(如Employee类的姓名变量可以简单的起名为name,而不是employeeName),避免过多的形容词,如state、data等。

    6、下划线的使用:各公司标准不同

    7、大小写:类的所有单词首字母都大写,即Pascal风格;变量名和函数名除了第一个单词以外的所有单词首字母都大写,即Camel风格。常量全部字母都大写,单词间用下划线隔开。函数名可以用动词或动宾组合来命名。

    8、注释:注释不要解释程序是怎么做的(how),而应该介绍程序做了什么(what)、为什么这样做(why),以及需要特别注意的地方。注释也要根据程序的修改而不断更新,一个误导的注释比没有注释更糟糕。

    代码设计规范

    函数设计时遵循的最重要的原则是:只做一件事,而且要做好。

    面向对象编程的几个原则。

    代码复审

    代码复审的三种形式:自我复审、同伴复审、团队复审

    代码复审的目的:

    1、找出代码的错误,如不能通过编译的代码、不符合团队规范的代码

    2、找出逻辑错误

    3、找出算法错误,如算法优化不够,边界条件没有处理好

    4、发现潜在的错误和回归性错误

    5、提出可能改进的地方

    6、互相传授经验,熟悉项目各部分的代码

    代码复审的步骤:

    1、代码首先要通过编译、完成自测

    2、通过文件差异分析工具对比代码

    3、由开发者讲述修改的前因后果,由复审者提出问题或意见,复审者不必亲自调查每一件事,开发者有义务作出详尽的解答,或者确保这些问题得到处理。

    不仅仅要提出实际的问题,还要把眼光放远,问一些这样的问题:

    (1)修改后别的功能会受到影响吗?有没有别的成员需要告知?还有别的地方需要类似的修改吗?

    (2)有没有留下足够的说明和注释?

    (3)导致问题的根本原因是什么?如何能自动避免这样的问题出现?

    注意在项目开发的早期无需计较一些细枝末节。

    4、双方达成复审的结果,结果包括发现致命问题打回去、有一些小问题但可以先同意、放行。

    5、代码复审后,开发者应该把错误整理出来防止再犯。

    代码复审的核查表:

    结对编程

    结对编程就是一种无时无刻不在代码复审的工作方法,也就是一对程序员共同工作,坐在一台电脑前。结对编程有两个角色:驾驶员Driver控制键盘输入、领航员Navigator起到领航和提醒作用。

    结对编程中通过随时的代码复审和交流,程序各方面的质量取决于水平较高的那一位,这样就能提升程序的质量,如果运用得当,结对编程可以取得更高的投入产出比。

    结对编程最关键的是如何发挥领航员的作用。

    不是所有情况都适合结对编程,如需要长期独立钻研的处于探索阶段的项目、后期维护时、测试需要很长时间时等。

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

    两人合作的各个阶段:

    1、萌芽阶段:刚刚认识,很有礼貌,避免冲突和容易引起争论的观点,彼此不了解

    2、磨合阶段:开始有观点上的冲突

    3、规范阶段:彼此逐渐了解,许多事情达成一致

    4、创造阶段:彼此很了解,可以高效率的共同工作

    5、解体阶段:如果磨合过多可能会散伙

    影响对方的几种方式:

    合作的关键是如何正确的给予反馈,评价别人有几种层次:

    最外层的是行为与后果,中间层的是习惯与动机,最内层的是本质与固有属性。

    加入某人在项目的源代码中使用了tab缩进,这和团队规定的代码规范相违背,他的同伴可以这样提意见:

    1、行为与后果:我注意到你用的是tab缩进,我们当初指定规范说好了用4个空格,如果个别人使用了不同风格,以后大家阅读和修改代码时就很不方便,对工作有影响。

    2、习惯与动机:你怎么又搞tab缩进?这都第几次了?你是对大家的决议不满吗?

    3、本质和固有属性:你太没脑子了,我们之前决定的编码风格你怎么都听不进去!你只想着你自己的方便,你们xx学院出来的学生怎么都这么没有团队精神!

    很显然,一旦攻击深入到核心,被攻击方就难以做出回应,合作的关键在于提供他人容易接受的反馈,这里推荐一个“三明治”办法:

    1、首先做好铺垫,强调双方的共同点,从团队共同的愿景讲起,让对方觉得自己处于安全的环境

    2、然后再提出建设性的意见,不要提以前的事,也不要做评价下结论,应该多展望未来的结果,强调过去虽然做的不够,但是我们将来可以做的更好,一般不要贸然深入到中间层和最内层,着重反馈行为与后果。

    3、鼓励对方把工作做好。

    上例中,对团队成员的反馈应该这样进行:

    1、做好铺垫:我觉得你这几段代码写的很快,解决问题的思路也不错,和以前比大有进步

    2、提出意见:我注意到你用的是tab缩进,我们当初指定规范说好了用4个空格,如果个别人使用了不同风格,以后大家阅读和修改代码时就很不方便,对工作有影响。

    3、鼓励对方:你这几段代码还是很关键的,要好好做,既然已经做了很多工作,那就再进一步,留下高质量的代码。

  • 相关阅读:
    rkhunter和chkrootkit
    Chkrootkit安装配置教程 – Linux后门入侵检测
    安装asterisk以及asterisk-gui
    职场最让人鄙视哪种招聘面试老板
    谷歌为何大举收购机器人公司?
    evercookie
    美科学家发现量子纠缠幽灵与宇宙虫洞有关
    Storm-YARN
    Twitter开源Summingbird:近原生编码下整合批处理与流处理
    基于keepalived的redis通信链接数测试
  • 原文地址:https://www.cnblogs.com/yinyunmoyi/p/12578130.html
Copyright © 2011-2022 走看看