美国加州大学伯克利分校伯克利数据科学研究所和巴卡尔计算健康科学研究所合著的论文《Ten simple rules on writing clean and reliable open-source scientific software》 为帮助提高开源软件代码的清晰度、健壮性、可用性和可维护性提出了 10 条规则:
- 原则1:
选择一个编码风格指南——并坚持使用它
。编码风格指南是一套规定代码的格式、命名、缩进等方面的规范,它可以提高代码的可读性和一致性。选择一个编码风格指南并坚持使用它可以帮助开发者和用户更容易地理解和维护代码,以及避免潜在的错误。建议使用现有的编码风格指南或工具,如 PEP8、tidyverse、BlueStyle 等。 - 原则2:
考虑使用集成开发环境
。集成开发环境是一种集合了代码编辑、调试、运行、测试等功能的软件应用,它可以提高开发者的效率和便利性。考虑使用集成开发环境可以帮助开发者更容易地编写和管理代码,以及利用其提供的各种辅助功能,如自动补全、语法高亮、错误检测等。建议使用适合所用语言或领域的集成开发环境,如 PyCharm、RStudio、VS Code 等。 - 原则3:
尽可能减少复杂性
。复杂性是指代码在结构、语义、逻辑等方面的难度或复杂度,它可以影响代码的可读性和可维护性。尽可能减少复杂性可以帮助开发者和用户更容易地理解和修改代码,以及提高代码的效率和可靠性。建议使用简洁和表达力强的代码,避免重复或冗余的代码,利用语言特性或库函数等方法。 - 原则4:
根据需要重构代码
。重构代码是指在不改变代码外部行为的前提下,改善代码内部结构或质量的过程,它可以提高代码的可读性和可维护性。根据需要重构代码可以帮助开发者和用户更容易地组织和扩展代码,以及提高代码的灵活性和可维护性。建议使用模块化和可复用的代码,使用函数、类、模块等结构来封装代码逻辑,遵循单一职责原则、开闭原则等设计原则。 - 原则5:
防御式编程
。防御性编程或防御性设计:主动考虑⽤⼾与代码的意外交互。是指在编写代码时考虑到可能出现的错误或异常情况,并采取相应的措施来处理或避免它们的方法,它可以提高代码的正确性和鲁棒性。防御式编程可以帮助开发者和用户更容易地发现并修复错误,以及提高代码的效率和可靠性。建议使用异常处理、断言、日志、契约等方法。 - 原则6:
遵循已有的编写单元测试的模式
。单元测试是指针对代码中的最小可测试单元,如函数、类、模块等,进行独立的测试,以验证其功能或行为是否正确的方法,它可以提高代码的正确性和可测试性。遵循已有的编写单元测试的模式可以帮助开发者和用户更容易地编写和执行单元测试,以及提高单元测试的质量和一致性。建议使用现有的单元测试框架或工具。 - 原则7:
在开发周期中创建测试
。在开发周期中创建测试是指在编写代码的同时或之前,就开始编写相应的测试,以验证代码是否满足预期或需求的方法,它可以提高代码的正确性和可维护性。在开发周期中创建测试可以帮助开发者和用户更容易地检测并修复错误,以及提高代码的可靠性和可扩展性。建议使用敏捷开发或测试驱动开发等方法。 - 原则8:
确保足够的测试覆盖率
。测试覆盖率是指代码中被执行到或覆盖到的部分占总代码量的比例,它可以反映代码的可测试性和可信度。确保足够的测试覆盖率可以帮助开发者和用户更容易地评估并提高代码的质量和安全性,以及降低出错或漏洞的风险。建议使用现有的测试覆盖率工具或服务。 - 原则9:
设置端到端和回归测试
。端到端测试是指针对整个系统或流程进行完整的模拟用户操作或场景来验证其功能或行为是否正确的方法,它可以提高系统或流程的正确性和完整性。回归测试是指针对已修改或更新过的代码进行重复执行已有的测试来验证其功能或行为是否仍然正确的方法,它可以提高代码的稳定性和兼容性。设置端到端和回归测试可以帮助开发者和用户更容易地保证系统或流程的质量和安全性,以及降低出错或漏洞的风险。建议使用现有的端到端和回归测试工具或服务,如 Selenium、Cypress、TestCafe 等。 - 原则10:
自动化你的软件测试工作流
。自动化你的软件测试工作流是指使用工具或服务来自动执行、管理、报告你的软件测试,而不需要人工干预或监督的方法,它可以提高软件测试的效率和便利性。自动化你的软件测试工作流可以帮助开发者和用户更容易地进行频繁和及时的软件测试,以及提高软件测试的准确性和可追溯性。建议使用现有的自动化软件测试工具或服务,如 GitHub Actions、Travis CI、Codecov 等。