读书笔记- patterns and Agile Adoption - overview

书中内容没有太多新意,但是帮助启发和建立敏捷实践的结构化知识图谱, 更好的表述和理解敏捷实践。 在这个角度可以推荐一下,不错的一本书。 这本书有免费的电子版 https://www.infoq.com/minibooks/agile-patterns

软件,是有价值的,是一个商品; 软件开发就是将价值交付的过程。 所以整个软件生命周期就是围绕上面两个问题,发现价值,交付价值。 这个两个问题还有另外一个提法,常说的Do Right Thing和Do Thing Right。

image.png

书中用一个很好的隐喻,对于那些影响软件交付的现象,看做坏味道。书中围绕着这如何识别不同的坏味道,选择对应的技术实践和推广去除掉这些坏味道。书中内容包含三部分,第一部分介绍商业价值以及不同属性,坏味道,如何采纳工程实践;第二部分,介绍软件一些软件的工程实践;第三份介绍软件工程实践的组合。

  • 关注对于客户的商业价值.
  • 当软件的商业价值不能被交付时,识别出这些现象,或者称之为坏味道。
  • 如何选择不同的实践并在项目中采纳它。
  • 描述每一条实践方式,以及如何在项目中采纳和推广。
  • 不同实践可以形成更大的实践,以及如何在项目中推广。

对于每一条工程实践,用一个结构化的模板来介绍。这和Design Pattern 介绍每一个pattern的模式同出一辙。 来回答这一条工程实践的上下文,是解决什么问题,或者什么样的情况会优先考虑该实践。

#名字和依赖
-  Name
-  Description: a brief overview of the practice or cluster.
- {Dependency Diagram:}  A diagram showing inter-practice dependencies (for practices) and grouping (for clusters).

#价值和上下文
- Business value: A sorted description of the business values this practice or cluster improves.
- Sketch: A fictional story that describes this pattern being used on a software development project in context.
- Context: The preconditions and environment where this pattern is useful. The context is a collection of fact, correct application of the pattern should remove
many of the forces.
- invariants: issues that do not change by applying the pattern.

#解决的问题和得到的好处
- Forces: Used to elaborate context and give specific issues that  are problems (partially) resolved by this pattern. Infact, correct application of the pattern should remove many of the forces.
- Therefore: The pattern description.

#如何推广以及在推中留意的副作用
- Adoption:  Steps, ordering, guides to adopting this pattern.
- But: Negative consequences that can occur from applying this pattern.

- {Variations:} Different ways this pattern has been implemented successfully other than that described in the Therefore section.
- {References:} Where to read more.

本书覆盖的软件的实践主要在技术实践

  • Automated development Tests ( Test-Last, Test-First, Unit Test)
  • Refactoring
  • Continuous Integration ( 现在应该扩展为 continuous delivery )
  • Simple Design (vs Fountup Design)
  • Functional tests ( end-to-end test)
  • Collective code ownership

Cluster practice ( 组合实践)

  • Evolution Design
  • TDD
  • Test-derive requirements (BDD)

书中关于软件开发流程的实践并没有包含在内,比如没有scrum中的迭代,增量,尽早发布Story,review meeting,retro meeting, daily meeting。
其后续作者另外一本书有介绍: Agile Adoption Patterns: A Roadmap to Organizational Success

交付价值角度看软件工程实践

软件开发就是交付价值,那么交付价值的极限就是:

  • 随时可以交付,也就是 持续发布

持续交付第一步需要软件有一个管道(pipeline), 将软件从源码到发布的artifacts (CI) , 部署到最终的托管环境(CD)。这样就对于任何提交,就可以随时发布,理想的达到的实时发布。但是仅仅有一个持续发布的管道是不够的,管道解决从代码到artifacts,以及环境自动化和提供快速发布的能力,但是交付软件的质量本身管道没有办法保证。 管道保证发布的快,那么如何保证软件质量,所谓又快又好? 需要关心软件的质量。

ci-cd.png
  • 软件的质量,软件测试金字塔, 保证尽早反馈发现问题。 基于单元测试保证底层最小单元没有问题,端对端(e2e)的测试保证集成没问题用户需求或者价值没有被影响, 模块测试(component)在二者之间,是一个中间的集成保证模块粒度的集成没有问题。
test pyramid.png

管道提供发布快,测试保证质量好,那么就够吗? 软件是交付价值,而前面只是保证提交有效。要软件快速交付价值,那么需要需求分解,垂直节分,找出价值最高的需求来做。

  • 需求要分解的小,这样价值才能尽早交付

    • 需求蛋糕切分法: 垂直切分,每一个story都是一个价值交付。


      image.png
    • 需求高低有衔接

    • 需求的Invest 原则

管道提供快速发布,测试金字塔保证软件问题尽早发现,需求分解提供价值尽早交付,那么够呢吗? 软件要持续发布,那么软件的架构如何支撑呢? 提前设计问题,
预判不准。需求是渐进明细,随着需求明确和新功能的增加使得之前的架构不合适;软件开发就是学习过程,对于之前问题有更好的认识,那么提前设计没问题很难保证一次性正确。即使一次设计正确也存在过度设计,前期有太多架构基础设施,对于用户而言是看不到价值,或者说不能交付价值。 如果对于软件架构不能随着即使更新使得适应新的需求,那么后续的开发的效率和维护都会付出代价,软件开发速率也就越来越慢,所谓技术架构的腐化,架构的技术债。
相比提前设计, 更倾向于渐进式架构。随着问题的深入,随着需求的增加,随着认识的提高,软件架构也随之改变。

  • 演进式的架构,支撑软件架构随着需求的改变而改变。
image.png

上图来自于 “Nature of Software Development
明显渐进式架构,需要重构来支撑;而重构需要测试覆盖来支撑。渐进式架构是一个复杂的实践。

这些只是涉及到一些个人的角度工程实践, 那么基于团队的工程实践更注重于协作和交流。

  • Collective of ownership
  • Code standard
  • Pair programming
  • Mob programming
  • Code review ,code inspect
  • Code scan, code coverage

基于流程的实践

  • Iteration and Incremental
  • Game Planing -Story
  • Daily meeting
  • Demo (review) meeting
  • Retrospective meeting
  • Whole team( product owner)

3. Extreme Programming

这些实践大部分已经包含XP中。


image.png

将XP的实践如果从个人和团队角度,可以有这样的分类##

  1. 个人提高 ( Developer Test, Refactor, Simple Design, Evolution Design)
  2. 团队协作技术部分 ( Code standard, Collective Ownership, CI&CD, Metaphor, pair-programming)
  3. 团队协作流程部分 ( Whole team, Customer Test, Small release, Planning Game)

5. 从问题视角看软件实践

image.png
image.png
image.png

软件工程实践(best practice) 是经验模型,是用来解决软件开发中的问题。 而这些模型本身来源于人们对于来自于不同方面的经验总结 。 比如很多实践是基于反馈原则,比如CI-CD, Developer Test; 一些来自于生产的Lean, 比如 减少浪费, test -fix 的浪费。
没有绝对的对与错,合适自己的才是最好的,不能因为实践而实践 。如果这些原则于现实冲突,请尊重现实。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 第九章 软件架构设计 9.1 软件架构概述 9.1.1 软件架构的定义 定义1:软件或计算机系统的软件架构是该系统...
    步积阅读 4,763评论 0 17
  • 一千多年前,一位不正经的天才破天荒地写了一堆爆款情歌。 你哝我哝,第一次有人碎碎念。 痴心妄语,第一次有人轻声唱。...
    芒果酱的小屋阅读 443评论 4 1
  • 帘外雨潺潺,春意阑珊。罗衾不耐五更寒。梦里不知身是客,一晌贪欢。 独自莫凭栏,无限江山。别时容易见时难。流水落花春...
    卫清平阅读 327评论 0 1
  • 院子角落有一段短短的小木头,乌乌的颜色,一点也不引人注意。 谁也说不清,小木头打什么时候就在那里了...
    兰壹阅读 245评论 0 0