持续集成de读书笔记
五一的两天空余时间,读完了持续集成这本书。
Continuous Integration,持续集成,简称CI。这是一项业界推荐的软件开发实践,是XP中提到的实践之一。CI有四个特征:
- 与版本控制系统的连接
- 构建脚本
- 某种类型的反馈机制
- 集成源代码变更的过程
CI的价值在于:
- 减少风险
- 减少重复过程
- 在随时随地生成可部署的软件
- 对开发团队的软件产品建立起更大的产品信心
CI的步骤:
“I Build So Consistently”。四个步骤:“Identify”,“Build”,“Share”,“Continuous”。
CI的实践:
经常提交代码
不要提交无法构建的代码
立即修复无法集成的构建
编写自动化的开发者测试
必须通过所有测试和审查
执行私有构建
避免签出无法构建的代码
CI可以缓解一些关键的风险:
没有可部署的软件
很晚才发现缺陷
缺乏项目可见性
低品质的软件
CI系统的创建:
持续数据库集成
持续测试
持续审查
持续部署
持续反馈
Rails 的CI系统有来自TW的cruisecontrolrb
Shoulda教程之三—测试ActiveRecord模型
ActiveRecord助手方法
Shoulda具有一套ActiveRecord测试宏,这让开发效率大大提高,TDD变得轻而易举。关于这个方面的所有的文档都在Shoulda的Rdoc中。下面就来个小小的例子:
class UserTest :dogs
should_belong_to :lover
end
上面的代码创建了如下的测试:
test: Person should allow phone_number to be set to “(123) 456-7890″.
test: Person should belong to lover.
test: Person should have many dogs.
test: Person should have many messes through dogs.
test: Person should have one profile.
test: Person should not allow admin to be changed by update.
test: Person should not allow phone_number to be set to “1234″.
test: Person should not allow phone_number to be set to “abcd”.
test: Person should require name to be set.
test: Person should require phone_number to be set.
test: Person should require unique value for name.
前提
一件需要知道的事情是一些ActiveRecord测试宏找到第一个初始的记录(通过 Class.find(:first))。你可以让这个工作通过一个具有一条记录的fixture文件,或者通过在setup中创建一条记录,类似下面这样:
class UserTest < Test::Unit::TestCase
def setup
@user = User.create!(params)
end
should_require_unique_attributes :name
end
或者通过一个context,如下:
class UserTest < Test::Unit::TestCase
context "given an existing record" do
setup do
@user = User.create!(params)
end
should_require_unique_attributes :name
end
end
但是Shoulda不止是提供了对模型的测试,还提供了很多强大的助手方法可以使用于控制器。
敏捷的证据在哪里?
敏捷能提高软件生产力的证据就在《Agile & Iterative Development - A Manager’s Guide》这本书的六章中。书中举出了许多具体的数据来证实敏捷/迭代和瀑布相比的成功率,缺陷率,代码生产率等等。











