敏捷开发
CDALEVEL Ⅲ 数据科学家考试大纲
1. 领会:理解敏捷式开发的关键思想,了解敏捷式开发相比于传统瀑布式开发模式的
区别及其优势。
2. 熟知:理解 Scrum、看板、极限编程、精益编程等敏捷式开发方法,熟悉 Scrum 开
发规则,熟悉 Scrum 团队成员与角色。
3. 应用:应用 Scrum 模式进行数据科学项目开发
敏捷式开发的关键思想
学习这个其实都不是什么系统读,都是学学容器,体验微服务之类,然后模拟的做点试验,团队都不算,但从各种体验和思想上去理解敏捷才是更重要,敏捷是怎么产生的,为何可以敏捷,和之前有何不同,给我们的思想和启发,而不是看几本书学点技术会的,那就是不确定性,所以学这个也是不确定。每个公司或团队是否适用,或者什么项目和开发适合,自己的需求和客户需求等等。
这就像互联网的快速迭代其实和社会发展一样,应对环境的变化,应对客户需求的变化才是大难题。就像我们青春期时候叛逆,反感父母给的学习生活、恋爱或工作上建议,又比如我谈恋爱,开始从对异性一无所知到不断接触试错,还比如精益创业,团队快速组件,快速迭代,宣传裂变。所有自己体会总结就是要空杯学习,吸取前人的经验的同时也要敢于根据自己和当时情况,从头开始的一种应对不确定性的思维,并且重要的也是一些共同的是要先忘掉所谓的建议流程,但不是乱来,而是重新定义问题,找到问题本质,运用新的思维去分析和解决这些。
对的,这其实就是很多学习平台在强调的元认知和提升认知的重要性,就像大数据要先想到各种分析维度一样,总是按一些个人总结是局限的。在变化创新的智能时代,更需要学习这些认知能力,所以正如1中作者说的从一种寻找固化的“标准”执念,逐渐转变到接受“不确定性”,不再试图评估所谓的“成功”,不再说服他人接受自己的所谓“正确”。这也是一种价值和人生态度,大家不再是盲目追逐什么,而是找到自己的态度和定位,遇见更好的自己,从容做好当下,并努力实现理想,憧憬未来。
所有说了这么多不确定的废话其实就是说敏捷已经是时代思维,不只是研发,也从研发运营贯穿到业务了,还有敏捷市场,人力资源等等。回到比较接近的IT吧,看下敏捷式开发相比于传统瀑布式开发模式的区别及其优势,虽然对我可能还是有些远,不确定性更多其实。
敏捷式开发相比于传统瀑布式开发模式的区别及其优势
瀑布模型的优点:
1、需求设计开发分开,可以容易划分工序和检查点
2、前一阶段完成后只要关注当下和后续阶段
3、可在迭代模型中每轮迭代很类似一个小的瀑布模型。
增量迭代应用于瀑布模型。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。
4、提供了各个阶段的指导参考模板,便于设计、编码、测试有章可循。
瀑布模型的缺点:
1、阶段划分固定,会产生很多无用的文档,工作量大
2、只有一个阶段的开发完成,才能看到结果
3、通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
4、不适应用户需求的变化
瀑布模型也是来自传统工业管理,所以例子就非常多了,造飞机、轮船、汽车啥的就是
敏捷开发的特点:
1、原则是保持简单,所以一页纸能说明得就用一页纸,重交互而不是流程
2、可以演示交互的软件重于求全完备的文档
3、协作重于谈判PK
4、随时应对需求等变化,所以更以解决需求问题为中心
我们看很多服务模式就是适合敏捷,比如婚庆策划的服务,当然更重要是看客户是否可以完整,清晰描述需求。
如果客户大概有个模板,并明确描述自己的主题之类,那么只要和策划沟通好具体细节就好了,接下来策划直接给出 案例结果给客户再继续,这就是比较贴近瀑布模式了。但往往客户也无法知道自己的需求了,就看看模板说个喜欢的,然后设计可以先做个样例,图片、案例视频甚至是AR等,给客户反馈提出改进,如此迭代,甚至可能最后几天,客户又有新的想法灵感做些改变,这时候就是贴近敏捷的方式了。当然这需要便捷和成本小的场景了。
理解 Scrum、看板、极限编程、精益编程等敏捷式开发方法,熟悉 Scrum 开发规则,熟悉 Scrum 团队成员与角色。
常见敏捷开发方法
Scrum
scrum来源于橄榄球,寓意“密集争球”,就是一个团队朝着一个共同目标,一起向前快速推进,这里就是指我们开发中总是以当前的阶段为重,比如某个重要测试遇到问题,人手不够,那么其他相对不紧急的阶段的其他人员就可以帮你测试,研发等也是类似。
scrum只是个大概框架,还需要多实践才能体会了
scrum的开放原则:
1、保持简单
2、接受变化: 变化的关键是先把工作细化分成小段,然后可以根据实际情况调整优先级顺序
3、不断迭代:一般是小于30天一次迭代,迭代过程sprint,时间为1~3周
4、协作,这是关键,减少一切不必要的中间环节
5、减少浪费:真正发现问题本质,类似非暴力沟通讲得,找问题看客户的真正需求是最优价值的事情。这也是精益创业的精髓
一般是5~9人团队
总之过程是以产品为目标,建立需求列表,做sprint计划,执行,每天讨论问题和进展,一段时间演示结果,再做回顾反思,如此重复。
人员组成:产品负责人,scrum master , 开发团队team
但是人员要求也相对较高,类似开源团队,复合型T型能力架构,专注一个核心技能,并要学习广泛涉猎其他技能,互相帮助学习。
同时开发是要严谨精益,但是又不是阶段性的完美,而是类似渐进式开发一样,逐步迭代优化,也是种boosting的理念。
看板
可以参考 之前的《敏捷无敌之DevOps时代》云享会学习笔记-实例化看板
https://www.jianshu.com/p/8fd3b207807d
总结看板的原则:
1、同一个时间段注重几个重要事,保持专注
2、减少浪费
3、客户需求是第一的
可视化
限制在制品
管理流动
显式化流程规则
简历反馈环路
协作式改进,试验中演进。
而极限编程和精益编程其实有很多相关和同样的思维,这之前很重要的是理解精益的思维,从一般的精益创业来说,精益创业就是精益思维运用到创业的过程中去。
目前接触很多类似的项目,当然都是偏互联网支持的其实都是可以看出很多相似的精益思想在里面
精益的目的是快速产品,有效传播和反馈,验证改进,一个项目定义好产品主要属性目标,找到一两个客户痛点和需求,分享和收益模式,既可以开始通过群、微信朋友圈等各渠道传播,目的是连接最终用户,这时候不一定大而全,只要有个主要功能和页面,即使页面不是那么好看,然后在小心的试错过程中迭代优化,而很多甚至是业务和客户都很快的加入了产品的创作,像内测版本一样,更有项目参与感,就像第二种婚庆布置那样,客户也可以操作学习,甚至参与了设计。然后通过持续集成发布、A/B测试,客户分群,定制推荐等方式马上试错和验证改进产品。
总结精益的七个原则:
消除浪费:对客户没有带来价值的事务就是浪费。 客户有需求就马上改进发布,创新的吸引也是,有优惠活动也是马上,不要浪费在其他地方。
增强学习:通过短期迭代周期、重构、集成测试和频繁的客户反馈会议增强学习。学习的是发现真正的问题和客户需求能力
较迟决定:管理不确定性的最佳方法是收集信息,最后的责任时刻给予承诺,打破部件间的依赖关系。应对不确定性,多客户群多平台都收集反馈
尽快交付:短期迭代或者小批量提供有价值的反馈机会,促进有效的决策制定。这是关键了
团队授权:精益专注于团队,因为决策制定和管理的来源让团队了解最佳选择和成本。专注于团队,而不是企业架构
建立整体:确保质量是嵌入在整个系统的,系统需要构建自动化测试,安装和持续集成。 自动化的工具使用是关键,无论是开发还是业务销售,能快速下单就不要用微信转账等
目光长远,脚踏实地,快速失败,快速学习。目光是产品,是更多的客户数据反馈和功能,一两个失败是正常的,在快速的运营数据分析同时支持业务的应变改进。
核心思想还是以产品和客户为中心
极限编程
极限编程其实就是为了适应精益创业的思维过程
极限的方式也是快速发布、试错、验证和反馈改进
精益编程
类似的就可以体会下
精益软件开发的七大原则:
消除浪费
强化学习
注重质量
推迟承诺
尽快交付
尊重员工
优化整体
准时化开发=迭代开发+持续集成+多次交付
零库存 = 每次迭代都给出可以发布的版本
参考
《敏捷无敌之Devops时代》 王立杰 许舟平 姚东
《DevOps实践——驭DevOps之力强化技术栈并优化IT运行》