第 4 小节:确保开源代码质量的几个要点
本篇内容将会引导大家思考一些治理开源项目中,代码质量的问题
引子
2014 年 4 月,OpenSSL 向外界公布 OpenSSL 的实现上,存在 Heartbleed 漏洞隐患,截止 2014 年 5 月 20 日,在 80 万最热门的启用 TLS 的网站中,仍有 1.5% 易受心脏出血漏洞的攻击。如果说 Heartbleed 带来了什么好处,那就是它让人们更加关注软件测试的重要性。它影响了 50 多万个网站。因此,专家们现在正在梳理 OpenSSL 的代码,以及许多其他开源项目的代码,以确保提高公开源代码的质量和安全性。
基于贡献代码构建的事实是,没有任何一个开源项目是完全不可破解的。正如世界上没有“银弹”一样,开源社区也没有完美的开源代码。我们要能够容忍开源代码有缺陷,但容忍不代表对其放任自由,不做约束。低质量的开源代码是放在路边的“潘多拉魔盒”,会对开源代码的众多追随者造成巨大的影响!因此,我们需要通过一系列的措施,确保开源代码质量。
质量衡量标准
如何衡量代码质量?维护好大家编写代码就可以了吗?答案当然是否定的。确保开源代码质量,不仅仅需要维护和保证代码质量,而是要保障整体项目的质量。
那么我们如何管理和衡量项目质量呢?我们可以参考软件质量的衡量标准,来进行开源项目的管理。
软件质量的主要衡量标准如下:
功能性:当软件在指定条件下使用时,软件产品提供满足明确和隐含要求的功能的能力
可靠性:在指定条件使用时,软件产品维护规定的性能级别的能力
易用性:在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力
效率性:在规定条件下,相对于所用资源的数量,软件产品可提供适当性能的能力
维护性:软件产品可被修改的能力。包括纠正、改进或对环境、需求和功能规格说明变化的适应
移植性:软件产品从一种环境迁移到另外一种环境的能力
管理周期与内容
对于一个项目来说,项目管理周期一般按照迭代周期管理,开源项目也是如此。
一个项目的迭代周期主要包括:调研、需求、设计、开发、测试、部署、运维等阶段。不同的阶段,管理的内容不同,管理的方式也有所不同。
各个阶段需要管理的内容如下:
- 调研:明确任务目标,确定任务方向,主要以市场调研、可行性分析、会议讨论等方式进行
- 需求:完成需求采集,需求分析整理,主要以需求拆解、会议讨论、输出文档等方式进行
- 设计:完成产品设计、概要设计、详细设计、数据库设计,主要以设计评审、输出文档等方式进行
- 开发:完成功能实现,主要以制定代码规范、实现功能、代码审查等方式进行
- 测试:完成功能测试、性能测试、安全性测试,主要以制定测试用例、输出测试报告等方式进行
- 部署:完成项目的部署(一般开源项目没有该步骤,如果有,可能仅限于项目使用者)
- 运维:后期项目运维保障(一般开源项目没有该步骤,如果有,可能仅限于项目使用者)
当然,以上只是项目的常见阶段,不必照本宣科,可根据项目实际情况选择性管理。
管理方式与方法
开源项目的管理方式和方法,用一个词来形容,那就是“百家争鸣”。因为每个项目所处的阶段不同,管理重点不同,甚至是成员性格不同,所以也就出现了各式各样的方式和方法。没有最好的管理方式,只有最适合的管理方式。
在管理周期和内容中,其实已经涉及一部分管理方式和方法。这里,我们列举多个维度的方式方法供大家参考。
- 会议沟通
- 适用于全部阶段,重要事项及问题的讨论与决策
- 小技巧
- 控制议题数量,明确重点议题
- 将大议题切分为小议题,避免冗长的会议
- 文档输出
- 适用于所有阶段,细节讨论的落实
- 小技巧
- 口述的内容要落实到纸面上,用来指导项目迭代,可作为后期项目复盘的依据,也有助于降低人员变动带来的风险
- 制定代码规范
- 适用于开发阶段,统一编码规范
- 大部分开源项目都会提供编码规范,包括编码规范、日志规范、注释规范、数据库规范等等。比如:提供不同IDE的开发规范配置文件“*.xml”,又或者安装开发规范插件……等等
- 代码review
- 适用于开发阶段,对照软件质量衡量标准进行完善项目
- 合理利用工具
- 适用于所有阶段,巧用工具提升效率
- 比如:使用JIRA进行项目管理,使用Axure绘制原型,使用Word编写文档,使用GitHub 平台进行代码开发,使用Selenium进行功能测试,使用FindBugs 在 Java 查找缺陷,使用Clang 静态分析器分析C、C++ 和 Objective-C 程序中的错误。
- 其他方式
- 引入人才
- 适用于所有阶段,借助组织的力量提升项目
- 像 Linux 基金会和 Apache 软件基金会这样的组织已经联系了来自不同公司的专家开发人员,以帮助培养高质量的开源代码
- 设置报酬
- 适用于所有阶段,通过报酬机制,激励参与者保证开发智力
- 开放源码项目,开源基金会的支持,如 Linux 基金会的作用与 Linux 和 ApacheHadoop 的角色,往往会有更大的能力和策略来确保代码质量,特别是有一个分配的预算项目,在某些情况下,开发人员为他们的贡献得到报酬,像 RedHatLinux 或 Cloudera Apache Hadoop。
- 引入人才