[关闭]
@zhongjianxin 2017-07-30T18:37:49.000000Z 字数 3922 阅读 995

[敏捷工程实践]-新讲稿

社招-training


1.What is XP?

a.support to agile mangement practice
b.core of Agile
image.png-59.3kB


2.three level in XP

从内到外。 最里圈为个人实践,中间层为团队实践,最外层为交付实践
image.png-199.2kB


3.XP for cooperation and communication

image.png-922.9kB

4.practices in xp

image.png-23.4kB

a.whole team

完整团队
一个团队中应包含完成工作需要的所有技能,包括 BA,UX,Dev,QA,DevOps等。
在 TW 并不强调角色,因为一个人可以具备多种技能。BA 可以具备 UX 技能,Dev 可以具备 QA 技能。
甚至不需要一个团队里具备所有技能,只要有成长型思维,什么都可以学嘛。


b.Small Release

小型发布
我们追求持续交付,最好每一行代码提交都能直接部署上线。反馈速度决定了学习速度,只有交付到用户手里,才能获得最真实的反馈。
这里涉及到 DevOps 相关的技术。


c.Planing Game

计划游戏
Story 的规模用点数表示,和时间没有关系,不关注每一个人的生产力,只关心整个团队一个迭代的速率。
关心一个 Story 的 Cycle Time 是否最短。
我们采用集体估算的方式,Dev,QA,BA 都可以参与。
故事点使用 Fibonacci 数列:
1,2,3,5,8,13,21...
大家一起亮出估算的点数,请点数最大的和点数最小的人分别发言。目的是分享出他们掌握的信息,让大家对齐。
然后再估一轮,就比较容易达成一致了。如果还不一致,就取个平均数,不用太纠结,估算本来就是不准的,纠结是最大的浪费。

为什么不是 1,2,3,4...?
因为对于估算来说,挨着的两个数就没什么差别。拉开一点距离,这个估的大了一点,那个估的小了一点,反而把误差就中和掉了。


d.Customer Test

用户测试
团队里最好有真实的用户,但一般不太可能,但我们可以找到比较了解用户的代表,他可以帮我们测试软件是否符合他们的真实需求。


image.png-23.4kB

e.Collective Ownership

集体所有权
代码不再分责任田,那个模块是你的,这个模块是我的。我的模块你不要动,有什么需求你告诉我,我来改。
集体所有权就是所有人共同拥有所有代码,每个人都有权限和自由去修改。


f.Code Standard

代码规范
所有人遵守同一套代码规范,持续集成服务器会对每一次提交的代码进行规范检查。
通过 Code Review 也可以保证代码规范性。
步骤:
1.介绍需求
2.讲代码:从上到下 从粗到细来讲 从测到实
3.记录,不陷入设计和架构的细节


g.Continous Integration

1.将已集成的源代码复制一份到本地计算机。
2.修改产品代码和添加修改自动化测试。
3.在自己的计算机上启动一个自动化构建。
4.构建成功后,把别人的修改更新到我的工作拷贝中。
5.再重新做构建。
6.把修改提交到源码仓库。
7.在集成计算机上并基于主线的代码再做一次构建。只有这次构建成功了,才说明改动被成功的集成了。

image.png-153.9kB


h.Matephor

隐喻
设计模式:工程模式,策略模式,
百词斩:比喻自己是一个医生,治疗不会学习英语的病,本质是一种信息的传递,而需要做的就优化信道,使接收端收到更优质不是真的信息


h.Sustainable Pace

可持续的速率
每天工作 8 小时,每周工作 5 天。
做计划时不应该算上额外的时间。
结对编程会更消耗精力,结对一天就很累了。
业余还要花时间去学习,保持技术先进。


image.png-23.4kB

i.TDD

TDD
跳过,有专门的一课。
image.png-227.3kB


image.png-297.5kB


image.png-235.5kB


image.png-94.6kB

FIRST Principle
- 1.Fast: run (subset of) tests quickly (since you'll be running them all the time)
- 2.Independent: no tests depend on others, so can run any subset in any order
- 3.Repeatable: run N times, get same result (to help isolate bugs and enable automation)
- 4.Self-checking: test can automatically detect if passed (no human checking of output)
- 5.Timely: written about the same time as code under test (with TDD, written first!)


j.Refactoring

重构,结对编程

旧的不变,新的创建,一步切换,旧的再见


k.Simple Design

简单设计
image.png-132.4kB
很多人对于简单设计和过度设计是有争议的,过度设计没有明确的定义,但其实简单设计是有明确的定义的,它有四条规则:

  1. 通过测试 - 保证需求要满足
  2. 表达意图 - 该有的概念要在代码中体现
  3. 消除重复 - 尽量消除重复代码
  4. 最少程序元素 - 减少类、接口、属性、方法、参数、变量等程序元素

这四条规则从上到下优先级递减,但是社区里对第二条和第三条的优先级有争议。
Martin Fowler 认为第二条和第三条同等重要。


5. 实例化需求

实例化需求的方式既能清晰地表述需求,消除客户、需求分析师、开发人员与测试人员在沟通中可能产生的理解分歧;又极为融洽地支持开发人员进行有效地测试驱动,帮助测试人员条理清晰地完成对需求功能的验收和测试。

a.定义

一段很好的需求说明,加上实例(场景+数据),实际上就是她所描述的功能的验收测试
满足:

a.精确、可测
b.是真正的需求说明,而不是脚本
c.是关于业务功能的,而不是关于软件设计的

b.实例化

GIVEN从句描述的是场景的前提条件、初始状态,通常是一种现在完成时态;
WHEN从句是采取某个动作或者是发生某个事件,一定是动词,通常是一般现在时;
THEN从句用“应该…(should be…)”来描述一种期望的结果,而不用断言(assert),后者与测试关联更紧密。

c.BDD

d.BDD怎么做?

用例场景的描述格式“GIVEN… WHEN… THEN… ”对大家都不陌生,但用这个格式写出好的用例却是非常的难,尤其是新手。这里总结几点供大家参考:

e.Example:

场景一:检查收件箱,可以看出第三个清晰明了且能体现业务价值,比较符合上面的要求。

  1. Scenario: Check Inbox
  2.   Given a user "Tom" with password "123"
  3.   And a user "Jerry" with password "abc"
  4.   And an email to "Tom" from "Jerry"
  5.   When I sign in as "Tom" with password "123"
  6.   Then I should see one email from "Jerry" in my inbox
  1. Scenario: Check Inbox
  2.   Given a user "Tom"
  3.   And a user "Jerry"
  4.   And an email to "Tom" from "Jerry"
  5.   When I sign in as "Tom"
  6.   Then I should see one email from "Jerry" in my inbox
  1. Scenario: Check Inbox
  2.   Given I have received an email from "Jerry"
  3.   When I sign in
  4.   Then I should see one email from "Jerry" in my inbox

6. 测试金字塔

image.png-119.4kB


image.png-128.5kB


7. 测试景深(Included in TDD)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注