本节课我们会学习构建系统、代码测试以及依赖管理。

依赖

依赖是我们厌恶的东西,它会让你引用某种东西时不断递归,然后会面临各种版本问题。
那么我们就需要一个软件仓库工具来帮我们管理这些软件包。
例如Java的maven,RubyGems 则包含了 Ruby 的相关库,PyPi 包含了 Python 库等等。

版本控制

程序不仅仅是由单个文件组成,大型程序中往往存在很多的模块,依赖。将这些模块组织起来也很重要。

语义版本号格式:主版本号.次版本号.补丁号。

  • 如果新的版本没有改变 API,请将补丁号递增;
  • 如果您添加了 API 并且该改动是向后兼容的,请将次版本号递增;
  • 如果您修改了 API 但是它并不向后兼容,请将主版本号递增。

持续集成系统(CI)

CI原理都是类似的,最常见的规则是:如果有人提交代码,执行测试套件。当这个事件被触发时,CI 提供方会启动一个(或多个)虚拟机,执行您制定的规则,并且通常会记录下相关的执行结果。您可以进行某些设置,这样当测试套件失败时您能够收到通知或者当测试全部通过可以收到反馈。

测试简介

  • 测试套件:所有测试的统称。
  • 单元测试:一种“微型测试”,用于对某个封装的特性进行测试。
  • 集成测试:一种“宏观测试”,针对系统的某一大部分进行,测试其不同的特性或组件是否能协同工作。
  • 回归测试:一种实现特定模式的测试,用于保证之前引起问题的 bug 不会再次出现。
  • 模拟(Mocking): 使用一个假的实现来替换函数、模块或类型,屏蔽那些和测试不相关的内容。例如,您可能会“模拟网络连接” 或 “模拟硬盘”。