《精益软件开发艺术》读书笔记(1) « 贾磊的博客

源代码管理和脚本化构建

  • SCM的基本操作指令(check out\checking in\add\modifiy\remove)
  • 疑问:web服务很大程度上基于数据库,然而数据库随着需求的改变会作出变化,这时候版本库里的老版本存储是否还有意义?
  • 要等到功能特征已经过确认可用后,才迁入代码。代码和测试的质量会直接影响到团队的生产力。
  • 遵循“不破坏构建”的惯用法,必须把实现分解为诸多小修改,在每个小修该完成后,就进行迁入。
  • 这里的脚本化构建我理解是类似于开源软件源代码包中的configure, 主要是编译,由此我也想到python的setuptools是否没有好好的使用,现在的应用中,确实有一部分同数据库联系很紧密,但是有些是可以作为库的形式切出来的,如果把这些部分切出来,然后作为独立的子项目迁入版本库,并使用工具作自动化的构建(至少可以满足unix系统和非unix系统的快速构建),就能使得开发过程变得更加迅速(更多的人可以加入进来作开发)。
  • 构建脚本需要在一个干净的机器里定期作测试。

自动化测试

  • 单元测试、集成测试、验收测试、可执行的规约测试、性能测试、负载测试、故事测试、测试驱动开发、测试先行的开发、行为驱动的开发。
  • 自动化测试可以作为如何实际使用代码API的活生生的文档。
  • 当针对API编写测试时,设计上的任何不足会特别明显的暴露出来,因为这时候你已经变成这个API的用户了;并且修改起来会很快。
  • testable(代码的可测试性)的表象特征属性(低耦合、最小化依赖、封装)。
  • 单元测试
import random
import unittest

class TestSequenceFunctions(unittest.TestCase):
    def setUp(self):
        self.seq = range(10)

    def test_shuffle(self):
        random.shuffle(self.seq)
        self.seq.sort()
        self.assertEqual(self.seq, range(10))

if __name__ == "__main__":
    unittest.main()
  • Mock和Stub: Stub实际上是为了xx循环依赖而采用的一种方式,我的理解是如果采用测试驱动开发,Stub就相当于只有简单返回值而不做任何事情的函数或者方法。Mock可以假装成是一个子系统的实例,内部有一些特定的逻辑,实质是Stub的集合。
  • 集成测试的实例?
  • DAL的好处是很容易根据DAL层作Mock,这样上层调用的时候就可以寻找数据库的替代了,我好奇自己现在应用中作的DAL层是否是标准的。
  • 对于遗留代码,作者提出“遗留代码可以被稳步替代和逐步改进,使之随着时间的推移变得更好,而不是让它慢慢腐烂掉,所谓‘更好’, 是指可以更容易、xxx和呃嗯小成本去改变它”。

持续集成

  • CI让我想到了SVN的自动化脚本?
  • 端到端的构建包括(单元测试和集成测试、数据库初始化、性能和负载测试…)(SVN+Trac+bitten)

Leave a Reply

郑重声明:资讯 【《精益软件开发艺术》读书笔记(1) « 贾磊的博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——