Coding feedback.
为了应对代码的变化,你须要持续得到代码健康状态的反馈:他是在作你指望的事情吗?最近一次修改有没有无心中破坏了什么功能?为了确保全部功能都能正常工做,就须要自动化单元测试。算法
一些开发者会对“测试”这个词有意见,应把它看做是一个代码技术。用代码来检查变量的具体值,而不是手工检查那些感兴趣的变量。服务器
只要有了单元测试,就让到他们自动运行,也就是每次编译或者构建代码的时候,就运行一次测试。把单元测试的结果看做是和编译器同样——若是测试没有经过,那就像变异没有经过同样糟糕。框架
接下来就是在后台假设一个构建机器,不断获取最新版本的源代码,而后编译代码,并运行单元测试,若是有任何错误它会让你及时知道,这是最容易修复也是成本最低的时候。工具
咱们的业务是要创造出能调用的API和可使用的接口。这就是说,你在说服其余人使用它以前,先得让本身切实地使用这些接口。事实上,在你刚作完设计但尚未完成后面的实现的时候,应该使用它。这个可行吗?布局
Write test before writing code.
使用被称为TDD(Test Driven Development,测试驱动开发)的技术,你老是在有一个失败的单元测试后才开始编码。测试老是先编写。一般,测试失败要么是由于测试的方法不存在,要么是由于方法的逻辑还不足以让测试经过。单元测试
先写测试,你就会站在代码用户的角度来思考,而不只仅是一个单纯的实现者,这样作是有很大区别的,你会发现,由于你本身要使用它们,因此能设计一个更有用、更一致的接口,除此以外,先写测试有助于消除过分复杂的设计,让你能够专一于真正须要完成的工做。学习
消除那些尚未编写的类,这会很容易地简化代码。相反,一旦你已经编写了代码,也许会强迫本身保留这些代码,并继续使用它,即便代码已通过期做废好久了。测试
Good design doesn’t mean more classes.
当你开发设计面向对象系统的时候,可能会迫使本身使用对象,有一种倾向认为,面对对象的系统应该由对象组成,咱们迫使本身建立愈来愈多的对象类,无论他们是否真的须要。添加无用代码老是很差的想法。编码
也许,你会要求测试团队在全部支持的平台上进行测试。若是它们是手工进行测试,可能并非最可靠的测试办法。咱们须要更加面向开发者的测试办法。设计
你已经编写了单元测试,测试你的代码。每次在修改或者重构代码的时候,在提交代码以前,你会运行测试用例。那么如今所要作的,就是在各类支持的平台和环境中运行这些测试用例。
Automate to save time.
可是,也许你已经有时间压力了,所以,你怎么可能有时间在多个平台上运行测试呢?这就要靠持续集成来拯救了。咱们在前面的保持能够发布中学过,用一个持续集成工具,周期性地从源代码控制系统中取得代码,并运行代码。若是有任何测试失败了,他会通知相关的开发者。通知方式多是电子邮件、页面I、RSS Feed或者其余一些新颖的方式。要在多个平台上测试,你只要为每一个平台设置持续集成系统就好了。当你或者同事提交了代码,测试会在每一个平台上自动运行。
关键业务逻辑必需要独立进行严格的测试,而且最后须要经过用户的审批。但你也不可能拉着用户,逐一检查每一个单元测试的运行结果。实际上,你须要能自动比较用户指望和实际完成的工做。
有一个办法可使验收测试不一样于单元测试。你应该让用户在没必要学习编码的状况下,根据本身的须要进行添加、更新和修改数据。你有不少方法来实现它。
FIT,即集成测试框架,它很实用,能够更容易地使用HTML表格定义测试用例,并比较测试结果数据。使用FIT,客户能够定义带有新功能的使用样本。客户、测试人员和开发人员(根据样本)均可以建立表格,为代码描述kennel的输入和输出值。开发人员会参照带有正在开发的代码结果的FIT表格中的样本编写测试代码。测试结果成功或者失败,都会显示在HTML页面中,用户能够很方便地查阅。
若是领域专家提供了业务的算法、运算或者方程式,为他们实现一套能够独立运行的测试。要让这些测试都成为测试套件的一部分,你会在项目生命周期中确保持续为它们提供正确的答案。
时间的消逝能够证实:判断工做进度最好是看实际花费的时间而不是估计的时间。
咱们不该该去计算工做量完成的百分比,而应该测定还剩下多少工做量没有完成。
在你最后真正完成一项任务时,要清楚知道完成这个任务真正花费的时间。奇怪的时,它花费的时间极可能要比最初估计时间长。没有关系,咱们但愿这能做为下一次的参考。在为下一个任务估计工做量时,能够根据此次经验调整评估。你的评估会波动一段时间,但随着时间但推移,你但评估会与事实接近,你也会对任务所花费但时间有梗清楚的认识。
若是能一直让下一步工做时可见的,会有助于进度度量。最好多作法就是使用待办事项backlog。当添加新任务的时候,先排列它们的优先级,而后加入到待办事项中。你也能够有我的的待办事项、当前迭代的待办事项(工做项)或者整个项目的待办事项(项目进行阶段)。
It is a bug.
当出了错误,你要尽量地提供详细信息。黑屏和含义不明的退出按钮说很不友好的行为。更糟糕的是,在获得用户反馈的时候,还嘲笑用户愚蠢,而不去真正地解决问题。
无论它是不是产品的bug,仍是文档的bug,或者是对用户社区理解的bug,它都是团队的问题,而不是用户的问题。
咱们花费了很大的精力从单元测试之类的代码中得到反馈,但却最容易忽略最终用户的反馈。你不只须要和真实用户(不是他们的产品经理,也不是业务分析师之类的代理人)进行交谈,还须要耐心地倾听。
即便他们说的内容很傻!