第 4 小节:确保开源代码质量的几个要点

大约 6 分钟

# 第 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)了解贡献的具体步骤。

上次编辑于: 2021年4月12日 17:18