第 4 小节:确保开源代码质量的几个要点
# 第 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。
- 引入人才
# 参考资料
# 本部分内容贡献者
tonels (opens new window)、ORH (opens new window)、taotieren (opens new window)、西狩 (opens new window)、阿基米东 (opens new window)
发现内容中的错误?还是想要补充更多符合主题的内容?《开源指北》欢迎你进行贡献,点击贡献指南了解贡献的具体步骤。