7.1 沟通的需求
写程序的人容易陷入一种陷阱,即过早的精细化。需求是一定会变化的,说以追求那种精确性是徒劳的。
避免过早的精细化的方法是尽可能的推迟精细化,直到着手开发前一刻才会把需求具体化。但是会带来迟来的模糊性。
7.2 验收测试
验收测试定义为业务方与开发方合作编写的测试,其目的在于确定需求已经完成。
应该编写整套的自动化测试,它们全部都通过,就意味着满足了所有的需求。
验收测试的目的是沟通,澄清,精确化。
验收测试都应当自动进行,原因在于要考虑成本。
不要将测试看做额外的工作,而应当看成节省时间和金钱的办法。这些测试可以避免你的开发误入歧途,也可以帮你确认自己已经完工。
应当确保写测试的程序员与开发测试功能的程序员不是同一个人。
验收测试:业务方写给业务方,关心验收测试的是业务方和程序员。验收测试是在系统外部,通常是在API或者是UI级别。
单元测试:程序员写给程序员,时正式的设计文档,描述底层结构以及代码的行为。关心单元测试的结果是程序员而不是业务人员。单元测试是深入系统内部进行。
GUI和业务逻辑分开,使用GUI背后的API来测试业务逻辑。
持续集成测试系统应该由源代码管理系统来触发,只要有人提交了代码,持续集成系统就会开始构建,并运行所有的测试,测试结果会以电子邮件发送给团队所有人。持续集成测试不应该失败,如果失败了,团队里所有人都应该停下手里的活,看着如何让测试通过。
要解决开发方和业务方沟通问题,唯一有效的方法就是编写自动化的验收测试。