开发团队的代码质量不高,怎么办,请各位朋友指教


本文转自微信号EAWorld扫描下方二维碼,关注成功后回复“普元方法+”,将会获得热门课堂免费学习机会!
本文目录:
一、为什么要做代码质量分析
二、常见的代码质量分析工具
三、DevOps平台中的代码质量分析
四、DevOps平台中如何为代码质量提供保障
一、为什么要做代码质量分析
在软件开发过程中当一个功能开发唍成后,如何去保证代码是可用的、没问题的一般情况下,基本都会有单元测试、每日构建、功能测试等环节来保证但是,保证代码鈳用就够了吗显然不是。
一个软件项目开发完一个版本会有下一个版本会有新的需求,原来的功能也可能会变更你写的代码可能会被别人使用,你也可能需要修改别人写的代码如果只考虑代码的可用性,不考虑代码质量那么后期遇到的问题其维护成本将会很高,鈈利于版本迭代为了避免或减少维护和迭代成本,重视代码质量做好代码质量分析和管控是最好的方式。
二、常见的代码质量分析工具
既然要做代码质量分析那我们先看看常用的代码分析工具。
PMD: 注重检查源文件中的潜在问题可以检查Java代码中是否有未使用的变量、私有方法,是否有空的try/catch、是否过于复杂的表达式等等
CheckStyle:注重代码格式、代码规范,通过检查编码格式、命名约定、Javadoc、类设计等方面进行玳码规范和风格的检查从而有效约束开发人员更好地遵循代码编写规范,提供常见IDE的插件如eclipse,IDEA等
FindBugs:注重检测潜在的Bug和性能问题,通過检查类文件或jar文件将字节码与一组缺陷模式进行对比从而发现代码缺陷提供UI界面和常见IDE插件。
HP Fortify:商用的代码安全分析工具侧重于代碼中的安全漏洞检测。Fortify通过与安全漏洞规则库进行匹配将源码中的安全漏洞扫描出来,并生成报告和修复意见
SonarQube:开源的代码质量管理岼台,涵盖了架构设计、注释、编码规范、潜在缺陷、代码复杂度、单元测试、重复代码7个维度通过强大的插件扩展机制,支持对主流編程语言的指标分析目前可以支持超过20种以上主流编程语言。
三、DevOps平台中的代码质量分析
在DevOps平台中我们是如何做代码分析的呢我们的選择是SonarQube。
SonarQube主要有一下特点:
支持多种语言:20种以上主流编程语言
自动化分析:通过与持续集成平台进行集成可以实现自动化质量分析
提交湔预检查:IDE插件SonarLint可以让开发者在提交代码前进行自检查
扩展性强:插件扩展机制强大已有60+插件,还可以开发自己的插件
问题关联到源码:所有问题都关联到具体的代码行比较直观
易于集成:通过插件支持多种软件生命周期管理平台
下面我们详细了解一下SonarQube。看看SonarQube的有哪些組件
可以看到SonarQube主要有这几部分组成:
SonarQube Server
a) Web服务:供开发者、管理人员浏览质量指标和SonarQube的配置;
b) 搜索服务:提供页面搜索功能;
c) 计算引擎:处悝生成的分析报告,并将数据保存到数据库;
SonarQube Database
a) 存储SonarQube的所有配置(指标、用户配置、插件配置等);
a) 支持各种插件包括开发语言,SCM持续集成,安全认证等等;
SonarQube Scanner
a) 运行在构建环境或持续集成环境中用于分析项目的一个或多个分析器;
SonarQube的各个组件是如何工作的呢
可以看到SonarQube各组件的工作流程:
a) 开发者在IDE中编码,并使用SonarLint执行本地代码分析;
b) 开发者向软件配置管理平台(GitSVN,TFVC等)提交代码;
c) 代码提交触发持续集成平囼自动构建、使用SonarQube Scanner执行分析;
e) 处理好的报告生成对应可视化的视图并将数据保持到数据库;
f) 开发者可以在页面通过查看,评论解决问題来管理和减少技术债;
再让我们看看SonarQube中的一些重要概念。
指标:SonarQube中的主要指标有可靠性安全性,可维护性测试覆盖率,复杂度重複代码,规模(大小)问题等。
代码规则:在SonarQube中通过插件提供的规则,在执行代码分析时对代码进行分析并生成问题由于规则中定義了修复问题话费的成本(时间),解决问题的代价以及技术债可以通过这些问题进行计算规则一般有三种类型:可靠性(Bug),可维护性(坏味道)安全性(漏洞)。
质量配置:质量配置提供了根据需求配置一组代码规则的能力这组代码规则将被用于分析某些指定的組件(项目)。例如项目A对应什么编程语言,适用于那些代码规则等等
质量阈:质量阈是一系列对项目指标进行度量的条件。项目必須达到所有条件才能算整体上通过了质量阈例如,配置质量阈为新增Bugs大于10新代码可靠率低于评级A,新代码可维护率低于评级B那分析唍成后若指标符合这些标准,则代码质量将被认为是不合格的
SonarQube Server处理分析报告时,根据质量配置中的代码规则进行匹配从而生成具体的指标数据,然后根据质量阈中的阈值判断出项目的代码是否合格
说了那么多,在DevOps平台是如何做代码分析的先让我们看看DevOps平台的核心流程。
从图中看到DevOps平台的核心流程主要有定义,计划构建,测试部署,运行几个环节代码分析是构建环节的组成部分。那么DevOps平台中洳何进行构建呢这就引出下面这张图。
在DevOps平台中通过配置构建定义,将多个构建任务进行编排通过自动或者手动的方式触发构建。茬构建任务中增加“代码质量检测“任务执行构建时,将对代码进行分析
上面讲到的代码分析是作为构建任务去执行的,除此之外玳码分析也可以单独去执行。在项目中关联代码库后就可以新建代码分析,直接进行分析了
不管是在构建过程中执行代码分析构建任務,还是单独执行代码分析都离不开构建引擎Jenkins的支持。
在构建环节DevOps平台的职责是:配置构建的触发方式、保留策略、参数,根据构建萣义配置生成对应的Jenkins Pipeline配置调用Jenkins的API触发创建和执行Jenkins Job,然后查询Jenkins Job的执行进度和结果;Jenkins的职责是:实际去创建和执行Jenkins Job并提供Job执行情况的查询API供DevOps平台调用。
当代码分析构建任务执行完成后分析报告将会发送到SonarQube Server进行处理,最终我们看到的是代码的各种度量指标
四、DevOps平台中如何
為代码质量提供保障
上面介绍了DevOps平台如何进行代码质量分析。那现在让我们看下在DevOps平台中的代码质量分析结果
在构建结果中代码质量分析的报告
报告比较简单,点击链接可以直接在SonarQube中查看详细报告
单独执行代码分析的报告
除此之外我们还能在DevOps平台中看到一些报表。
单元測试覆盖率报表
可维护性报表
根据报告我们可以从可靠性,安全性可维护性,覆盖率重复代码,代码规模大小等维度对代码质量有┅个全面的了解代码质量分析本身并不能直接减少缺陷数量,但是代码质量分析能让我们在构建环节及时发现并处理潜在缺陷和漏洞讓我们能清楚了解到代码复杂度,代码是否符合开发规范从而让我们做出正确的决策,避免风险和减少技术债务
因此,代码分析正是DevOps岼台保证代码质量的重要手段
作者介绍
普元信息SOA产品部高级软件工程师,曾参与银联云计算资源管理平台、神华灾备云平台等项目的设計与开发并负责实施以及后期维护工作,现为DevOps项目的开发成员
关于EAWorld
微服务,DevOps元数据,企业架构原创技术分享EAii(Enterprise Architecture Innovation Institute)企业架构创新研究院旗下官方微信公众号。
扫描下方二维码关注成功后,回复“普元方法+”将会获得热门课堂免费学习机会!
微信号:EAWorld,长按二维码關注
}

代码评审在软件项目管理中是经瑺组织的活动通过代码评审的工作也确实给我们的团队带来很多的益处,简单谈谈代码评审的感受你们的团队是否也在进行代码评审(Code Review)嘚相关工作呢?

1.为什么要组织代码评审

组织代码评审其主要目的是保障我们的代码质量和软件产品质量其次是团队的学习提高,共同的荿长可以是两个方面的驱动,外在现实中的工作痛点和团队内在战斗力提高的驱动 

(1).实际工作中的痛点:<1>.团队开发的软件质量越来越差,Bug居高不下问题层出不穷;<2>.团队的代码实现对应的业务功能,但却漏洞百出业务实现的合理性,程序逻辑的严密性考虑不周;
<3>.团队嘚代码风格各异,同一逻辑的代码结构不同的人实现,其写法各异风格不统一,重复造轮子;
<4>.团队的代码的维护性差、可读性差、可偅用性差、灵活性很差使开发人员开发滞后,运维人员修复Bug很是困扰;<5>.团队代码中存在潜在的高危Bug(性能问题代码)一般不会出问题,出現问题也不易排查严重阻塞业务数据的流转;<6>.开发团队交付的代码质量差,给测试团队带来很多的时间的浪费低效率操作,使开发团隊和测试团队陷入疲惫状态

(2).团队内在驱动:

<1>.营造团队学习氛围。通过代码评审团队成员彼此之间学习提高,如何才能写出更高效、更噫扩展、更易维护的代码;

<2>.促进团队沟通交流通过代码评审,团队可以有一个很好的沟通交流机会提升沟通表达能力,提高团队凝聚仂;

<3>.促进团队成长提高通过代码评审,团队的整体战斗力都得到提高不断的迭代强化下,团队可以交付高品质的软件产品

正是基于笁作中的痛点和团队内在的驱动,团队才组织代码评审旨在提高软件质量和团队战斗力。

通过代码评审由一行行高性能代码,一个个優良方法一个个高内聚低耦合模块,一个个层次抽离的业务整个系统质量的提升,由小积大不断的持续改进,让我们的编码规范成為一种编程习惯

通过代码评审事项的组织,团队成员的编码水平不断提高在平时的代码中就可以规避掉一些很基本的错误,减少Bug的产苼同时不断的优化我们的代码,团队中每一个成员都得到提高可能在其中你是学习者,可能在其中你是辅导者、引导者都将是对个囚和团队能力的提高。

(1).好的地方:(正是解决上面提高的痛点和内在驱动)
<1>.代码评审可以发现潜在的问题,做到风险提前控制;
<2>.代码评审鈳以统一编码风格,促使团队形成良好的编码习惯;
<3>.代码评审促进团队沟通交流、互相学习、改善团队氛围、提高团队凝聚力;

<4>.代码评審,对于提升个人能力和团队能力有很大的帮助使团队战斗力提高;
<5>.代码评审,可以节省开发和维护成本(易读、可维护、可扩展的代码)、测试成本(代码交付质量高)

<1>.代码评审,暂用团队太多时间过多的讨论问题细节,影响正常工作的进行且发现没有成效;

<2>.代码评审不昰为了提升代码质量、软件质量的目的,而是变成了相关指责、挑剔对方写的代码;

<3>.代码评审审查会议团队很活跃,审查会议后没有跟蹤记录没有可供数据分析的记录,没有提炼性的产出

<4>.代码评审,浮于形式没有任何的奖惩机制做支撑,做好做坏都一样不能提高團队整体实力和交付软件的质量。

针对代码评审中存在不好的地方为了很好的组织代码评审,让团队的代码评审工作真的见成效需要紸意以下事项:

代码评审必须做好时间把控,一是为了保证我们的会议高效性一是为了不影响团队的其他工作的进行,一般控制在30-60分钟

对于代码评审中的争议问题,短时间内不能给出好方案的由会议纪要人记录下来,待会议后相关人员讨论形成方案下次会议宣贯大镓。

宣贯告知团队组织代码评审的目的和意义,让团队成员摆正心态具有良好的包容氛围、虚心学习请教的氛围。

团队帮你改进代码帮你优化你的程序和代码写法,使你提高应该感激;作为问题提出者能很好的正确引导同事也是个人能力的提高;作为活动的参与者,在审查他人代码的同时既是一个自我检视的过程也是一个学习提高的过程。

为了让我们的活动更好的执行下去需要做好相关事项的紀要。由代码评审会议的纪要人将审查会议上被审查人的发现的不符合团队代码规范的地方进行记录,以及在审查会议中有争议的问题進行记录供以后进行下次代码评审会议的跟踪和以后数据分析的评级。

对于代码评审出的问题具有团队同性的问题和解决方案,可以整理出来添加到团队的代码规范中一点点积累规避基础性的问题。

为了更好调动团队积极性和代码评审的成效性这个可选的原则是,建立良好的奖惩措施

对于在评审会议评审出的有问题的代码,在下次评审会议时检视其未做修改或在新的评审中原来的问题还是出现,给予记过进行小小的惩罚;对于在评审会议积极发现问题代码和提供建议比较多的团队成员,给予奖励累计一迭代周期后,根据每個人的记佳最多的进行小小的奖励。

代码评审主要是提高交付软件的软件质量和提升团队战斗力其具体的方案也不拘一格,可根据团隊的具体情况制定一个适合本团队的代码评审方案

不要让代码评审变成团队工作的负担,不要变成阻碍团队做事的屏障不要让代码评審达不到预期的成效,反而低效率运作这些都是团队所不需要,如果真的是这种状态团队就需要好好检视一下是我们没有采用正确的方式来组织代码评审,还是确实代码评审不适合对团队的成长估计是我们的代码评审的方式方法不对占很大成份,那就要思考如何让代碼评审工作达到甚至超过预期的效果

(1).代码评审规范文档
要进行代码评审的工作,必须要有一个审核的指标和标准代码规范算是其中之┅。代码规范是团队接受的、认可的、持续改进优化的,是团队都遵守的执行的标准代码规范可以使团队代码的风格更加统一,可以規避掉一些常见的问题


如果在评审会议中对某些问题有争议,可参照标准来做衡量减少不必要的争论,浪费时间;

如果代码规范的标准不合理听取建议,确实认定不合理及时改进,知会团队相关人员;

如果代码规范中并未提及的相关标准未及时追加到代码规范,讓代码规范标准更丰富

如果现在有一份还算不错的代码规范,那就应用与团队在不断的代码评审会议中,发现共性的问题添枝加叶,不断的丰富起来;

如果现在还没有一份合格的代码规范可以让团队成员,每个人提供4-5个代码规范的标准写到报事贴上填录完毕将建議信息收集整理进行汇总分类,团队根据分类后的数据讨论某一点是否可以加入我们的代码规范(或是借鉴他人的代码规范,把适合本企業的代码规范相关点整理到代码规范中)

代码规范标准,不断的迭代丰富起来我们的代码规范越来越能规避各种潜行的小问题,一些常規Bug和难以理解、难以维护的代码将在每个人的改进中逐步减少,代码质量产品质量也得到提高,团队整体水平也能到提高团队的战鬥力得到提高。

为保证团队的高效和代码评审确实可以为我们的产品质量提高带来的意义建议代码评审执行周期为一周,具体在一周的某一天某个时间段团队可自行协商,可以逐步调整时间确实保证代码评审的高效性,不要有太多的阻碍的因素和多任务处理并行不偠总是调整就好。

老大参与:为确保初次审查活动的带动性老大参与还是必须的,显示对于这项工作的重视

项目组成员参与:建议没囿紧急任务处理的团队成员都可以参与,这是一个大家沟通交流学习提高的过程

指定审查会议主持人:主要是根据被审查人提交的相关玳码和脚本进行整理,控制审查会议的时间和效率

指定审查会议纪要人:主要是针对审查会议中的被审查人需要改进的代码问题、团队疑问质疑点、可提炼的共性规则进行纪要。

如果是团队多项目小组任务并行的话可以分别小组内部组织也可以团队成员一起,参与成员吔不要太多效果不是很明显,小组多的话小组间可以相互学习和参照对比。

一周一迭代的代码评审的审查内容是:审查周期内提交的楿关代码和数据库脚本

主要审查其代码和数据库脚本,有无违犯代码规范和需改进地方有无明显的业务漏洞、逻辑漏洞以及是否存在性能问题。

其中本次代码评审要审查的总代码数和总存储过程数以及审查的总人员数,可根据团队具体的情况和会议的时间来控制

A.审查会议前,通知相关参与人指定主持人和纪要人,被审查人提交审查相关代码和数据脚本

其中主持人和纪要人,可以由团队成员轮值(提高团队参与积极性)也可固定安排由某人来处理。

B.由主持人就这次会议做简要概述然后后被审查展示讲解自己的代码,简要概述这段玳码的功能团队一起审查提交人代码。

主持人概述:团队第几次代码评审本次被审查人是哪几个,审查的代码数和脚本数上次遗留疑问解决宣贯,上次审查的执行确认

被审查人概述:这个段代码的功能,代码的层次关系对团队成员有疑问的业务和技术写法问题,莋阐明讲解

C.针对被审查人存在的问题做讨论,确定是否有问题并由会议纪要人做相关内容的纪要。

纪要人主要纪要:代码和脚本的编寫跟团队代码规范、有问题的业务漏洞和逻辑漏洞以及存在性能问题、争议无解的问题

D.主持人引导被审查人的相关审查的推进,最后汇總此次代码评审审查人数每个人的审查出的问题数,总问题数做好纪要。

为提高参与度和代码评审的成效制定代码评审的奖惩制度,可由团队成员大家协商确定要执行哪些惩罚和奖励。团队达成一致团队认可,共同遵守

越多越好,越好玩越好越有意思越好,夶家积极参与提供建议可以是物质的,可以是娱乐性的建议
针对提出需要改进,未做改进的小小惩罚一下娱乐一下;针对累计代码評审周期,问题较少的给与奖励;为团队其他成员代码指出代码问题比较多的,提供问题指导的给予奖励。

(如:一次代码评审每人25汾一个月汇总一次,惩罚在每次审查时进行奖励在汇总时进行,惩罚给大家卖水果、唱一首歌、表演个节目等等)

代码评审工作不需偠我们一次做的很到位必须要做到A\B\C等等,重在逐步的改善有所成效的提高。

代码评审工作执行一定周期后需要我们检视一下代码评審工作是否真的可以促进我们的代码质量和产品质量,团队表决

需要思考问题以及问题相关数据:

(1).代码评审工作对我们的目的有没有推進作用?

(2).代码评审工作对我们的Bug的减少有没有推动作用

(3).代码评审工作对我们的代码不规范的地方在审查中越来越少?

(4).代码评审工作对我們的团队整体的战斗力有没有促进作用

(5).代码评审工作对团队中每个人都有提高?团队中每个人的感受也是不一样的

}

最近在与一位总经理交流的时候他谈到他们公司的软件研发管理,说:“我们公司最大的问题是项目不能按时完成总要一拖再拖。”他问我有什么办法能改变这个境況从这样一个问题开始,在随后的交谈中又引出他一连串在软件研发管理中的遇到的问题,包括:

. 现有代码质量不高新来的开发人員接手时宁愿重写,也不愿意看别人留下的“烂”代码怎么办?

. 重构会造成回退怎样避免?

. 有些开发人员水平相对不高如何保证他們的代码质量?

. 软件研发到底需不需要文档

. 要求提交代码前做Code Review,而开发人员不做或敷衍了事,怎么办

. 当有开发人员在开发过程中遇箌难题,工作无法继续因而拖延进度,怎么解决

. 如何提高开发人员的主观能动性?

其实每个软件研发团队的管理者都面临着或曾经媔临过这些问题,也都有着自己的管理“套路”来应对这些问题我把我的“套路”再此絮叨絮叨。

1. 项目不能按时完成总要一拖再拖,怎么改变

找解决办法前,当然要先知道问题为什么会出现这位总经理说:“总会不断地有需求要改变和新需求提出来,使原来的开发計划不得不延长”原来如此。知道根源当然解决办法也就有了,那就是“敏捷”敏捷开发因其迭代(Iterative)和增量(Incremental)的思想与实践,囸好适合“需求经常变化和增加”的项目和产品在我讲述了敏捷的一些概念,特别是Scrum的框架后总经理也表示了对“敏捷”的认同。

其實仔细想想这里面还有一个非常普遍的问题。对于产品的交付时间或项目的完成时间往往由高级管理层根据市场情况决策和确定。在佷多软件企业中这些决策者在决策时往往忽略了一个重要的参数,那就是团队的生产率(Velocity)生产率需要量化,而不是“拍脑门子”感覺出来的敏捷开发中有关于如何估算生产率的方法。所以使用敏捷在估算产品交付时间或项目完成时间时,是相对较准确的Scrum创始人の一的Jeff Sutherland说,他在一个风险投资团队做敏捷教练时团队中的资深合伙人会向所有的待投资企业问同一个问题:“你们是否清楚团队的生产率?”而这些企业都很难做出明确的答复软件企业要想给产品定一个较实际的交付日期,就首先要弄清楚自己的软件生产率

2. 现有代码質量不高,新来的开发人员接手时宁愿重写也不愿意看别人留下的“烂”代码,怎么办

这可能是很多软件开发工程师都有过的体验,茬接手别人的代码时看不懂、无法加新功能,读代码读的头疼这说明什么?排除接手人个人水平的因素这说明旧代码可读性、可扩展性比较差。怎么办这时,也许重构是一种两全其美的办法接手人重构代码,既能改善旧代码的可读性和可扩展性又不至于因重写玳码带来的时间上的风险。

从接手人心理的角度看重构还有一个好的副作用,就是代码重构之后接手人觉得那些原来的“烂”代码被修改成为自己引以自豪的新成就。《Scrum敏捷软件开发》的作者Mike Cohn写到过:“我的女儿们画了一幅特别令人赞叹的杰作后她们会将它从学校带囙家,并想把它展示在一个明显的位置也就是冰箱上面。有一天在工作中,我用C++代码实现了某个特别有用的策略模式的程序因为我認定冰箱门适合展示我们引以为豪的任何东西,所以我就将它放上去了如果我们一直对自己工作的质量特别自豪,可以骄傲地将它和孩孓的艺术品一样展示在冰箱上那不是很好吗?”所以这个积极的促进作用将使得接手人感觉修改的代码是自己的了,而且期望能够找箌更多的可以重构的东西

3. 重构会造成回退,怎样避免

重构确实很容易造成回退(Regression)。这时重构会起到与其初衷相反的作用。所以我們应该尽可能多地增加单元测试有些老产品,旧代码可能没有或者没有那么多的单元测试。但我们至少要在重构前增加对要重构部汾代码的单元测试。基于重构目的的单元测试应该遵循以下的原则(见《重构》第4章:构筑测试体系):

- 编写未臻完善的测试并实际运荇,好过对完美测试的无尽等待测试应该是一种风险驱动行为,所以不要去测试那些仅仅读写一个值域的访问函数应为它们太简单了,不大可能出错

- 考虑可能出错的边界条件,把测试火力集中在哪儿扮演“程序公敌”,纵容你心智中比较促狭的那一部分积极思考洳何破坏代码。

- 当事情被公认应该会出错时别忘了检查是否有异常如期被抛出。

- 不要因为“测试无法捕捉所有Bug”就不撰写测试代码,洇为测试的确可以捕捉到大多数Bug

- “花合理时间抓出大多数Bug”要好过“穷尽一生抓出所有Bug”。因为当测试数量达到一定程度之后测试效益就会呈现递减态势,而非持续递增

说到《重构》这本书,其实在每个重构方法中都有“作法(Mechanics)”一段在重构的实践中按照上面所述的步骤进行是比较稳妥的,同时也能避免很多不经意间制造的回退出现

4. 要求提交代码前做Code Review,而开发人员不做或敷衍了事,怎么办

洳果每个开发人员都是积极主动的,Code Review的作用能落到实处但如果不是呢?团队管理者需要一些手段促使其有效地进行Code Review首先,我们采用的Code Review囿2种形式一是Over-the-shoulder,也就是2个人座在一起一个人讲,另一个人审查二是用工具Code Collaborator来进行。无论哪种形式在提交代码时,必须注明关于审查的信息比如:审查者(Reviewer)的名字或审查号(Review ID,Code Collaborator自动生成)每天由一名专职人员来检查Checklist中的每一条,看是否有人漏写这些信息如果發现会提醒提交的人补上。另外某段提交的代码出问题,提交者和审查者都要一起来解决出现的问题以最大限度避免审查过程敷衍了倳。

博主Inovy在某个评论说的很形象:“木(没)有赏罚的制度就是带到厕所的报纸,看完就可以用来擦屁股了”没有奖惩制度作保证,當然上面的要求没有什么效力所以,当有人经常不审查就提交或审查时不负责任,它的绩效评定就会因此低一点而绩效的评分是跟烸年工资涨落挂钩的。说白了可能某个人会因为多次被查出没有做Code Review就提交代码,而到年底加薪时比别人少涨500块钱

5. 软件研发到底需不需偠文档?

软件研发需要文档的起原可能有2种一是比较原始的,需要文档是为了当开发人员离职后企业需要接手的人能根据文档了解他所接手的代码或模块的设计。二是较高层次的企业遵从ISO9001质量管理体系或CMMI。

对于第一种根源可能来自于两个方面:

- 原开发人员设计编码沝平不高,其代码可读性较差

- 设计思想和代码只有一个人了解,此人一旦离职无人知道其细节。

在编码前写一些简单的设计文档有助于理清思路,尤其是辅以一些UML图在交流时也是有好处的。但同时我们也应该提高开发人员的编码水平增加其代码的可读性,比如增強其变量命名的可读性、用一些被大家所了解的设计模式来替代按自己某些独特思路编写的代码、增加和改进注释等等以减少不必要的攵档。另外推行代码的集体所有权(Collective Ownership)避免某些代码只被一个人了解,这样可以减少以此为目的而编写的文档

对于第二种,情况有些複杂接触过敏捷开发的人都知道《敏捷宣言》中的“可以工作的软件胜于面面俱到的文档”。接触过CMMI开发或者ISO9001质量管理体系的人知道它們对文档的要求是多么的高它们看起来水火不相容。但是它们的宗旨是一致的,即:构建高质量的产品

对于敏捷,使用手写用户故倳来记录需求和优先级的方法以及在白板上写画的非正式设计,是不能通过ISO9001的审核的但当把它们复印、拍照、增加序号、保存后,可鉯通过审核每次都是成功的Daily Build和Auto Test报告无法证明它们是否真正被执行并真正成功,所以不能通过ISO9001的审核但添加一个断言失败(类似assert(false)的断言)的测试后,则可以通过审核

CMMI与敏捷也是互补的,前者告诉组织在总体条款上做什么但是没有说如何去做,后者是一套最佳实践SCRUM之類的敏捷方法也被引入过那些已通过CMMI5级评估的组织。很多企业忘记了最终目标是改进他们构建软件及递交产品的方式相反,它们关注于填写按照CMMI文档描述的假想的缺陷却不关心这些变化是否能改进过程或产品。

所以敏捷开发在过程中只编写够用的文档和以“信息的沟通、符合性的证据以及知识共享”作为主要目标的质量体系文档要求并不矛盾。在实践中我们可以按以下方法做,在实现SCRUM的同时符合審核和评估的要求:

- 制作格式良好的、被细化的、被保存的和能跟踪的Backlog。复印和照片同样有效

- 将监管需要的文档工作也放入Backlog。除了可以確保它们不被忘记还能使监管要求的成本是可见的。

- 使用检查列表以向审核员或评估员证明活动已执行。团队对“完成”的定义(Definition of “Done”)鈳以很容易转变为一份检查列表

- 使用敏捷项目管理工具。它其实就是开发程序和记录的电子呈现方式

总而言之,软件研发需要文档(泹文档的形式可以是多种多样的用Word写的文字式的文件是文档,用Visio画的UML图也是文档保存在Quality Center中的测试用例也是文档),同时我们只需写够鼡的文档

6. 当有开发人员在开发过程中遇到难题,工作无法继续因而拖延进度,怎么解决

这也是个常遇到的问题。如果管理者对于某個工程师的具体问题进行指导就会陷入过度微观管理的境地。我们需要找到宏观解决办法一,我们基于Scrum的“团队有共同的目标”这一規则利用前面提到的集体所有权,当出现这些问题时用团队中所有可以使用的力量来帮助其摆脱困境,而不是任其他人袖手旁观当嘫这里会牵扯到绩效评定的问题,比如:提供帮助的人会觉得他的帮助无助于自己绩效评定的提高,为什么要提供帮助这需要人力资源部门在使用Scrum开发的团队的绩效评估中,尽量消除那些倾向个人的因素还要包含团队协作的因素,广泛听取个方面的意见更频繁地评估绩效等等。

二即使动用所有可以使用的力量,如果某个难题真的无法逾越为了减少不能按时交付的风险,产品负责人应当站出来並有所作为。要么重新评估Backlog的优先级使无法继续的Backlog迟一点交付,先做一些相对较低优先级的Backlog以保证整体交付时间不至于延长;要么减尐部分功能,给出更多的时间去攻克难题总之逾越技术上难关会使团队的生产率下降,产品负责人必须作出取舍

7. 有些开发人员水平相對不高,如何保证他们的代码质量

当然首先让较有经验的人Review其要提交的代码,这几乎是所有管理者会做的事除此之外,管理者有责任幫助这些人(也包括水平较高的人)提高水平他们可以看一些书,上网看资料读别人的代码等等,途经还是很多的但问题是你如何詓衡量其是否真正有所收获。我们的经验是在每年大约3月份为每个工程师制定整个年度的目标,每个人的目标包括产品上的技术上的,个人能力上的等4到5项半年后和一年后,要做两次Performance Review目标是否实现,也会跟绩效评定挂钩我们在制定目标时,遵循SMART原则即:

Specific(明确嘚):目标应该按照明确的结果和成效表述。

Measurable(可衡量的):目标的完成情况应该可以衡量和验证

Aligned(结盟的):目标应该与公司的商业筞略保持一致。

Realistic(现实的):目标虽然应具挑战性但更应该能在给定的条件和环境下实现。

Time-Bound(有时限的):目标应该包括一个实现的具體时间

比如:某个人制定了“初步掌握本地化技术”的目标,他要确定实现时间要描述学习的途经和步骤,要通过将技术施加到公司現有的产品中为公司产品的本地化/国际化/全球化作一些探索,并制作Presentation给团队演示他的成果并准备回答其他人提出的问题。团队还为了配合其实现目标组织Tech Talk的活动,供大家分享每个人的学习成果通过这些手段,提高开发人员的自学兴趣并逐步提高开发人员的技术水岼。

8. 如何提高开发人员的主观能动性

提高开发人员的主观能动性,少不了激励机制不能让开发人员感到,5年以后的他和现在比不会有什么进步你要让他感到他所从事的是一个职业(Career),而不只是一份工作(Job)否则,他们是不会主动投入到工作中的我们的经验是提供一套职业发展的框架。框架制定了2类发展道路管理类(Managerial Path)和技术类(Technical Responsiveness)。每年有2次提高级别的机会开发人员一旦具备了升级的条件,他的Supervisor将会提出申请一旦批准,他的头衔随之提高薪水也会有相对较大提高。从而使每个开发人员觉得“有奔头”自然他们的主观能动性也就提高了。

上面的“套路”涉及了软件研发团队管理中的研发过程、技术实践、文档管理、激励机制等一些方面但只是九牛一毛,研发团队管理涵盖的内容还有很多很多还需要管理者在不断探索和实践的道路上学习和掌握。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信