分享实施敏捷开发的技术方面的先决条件

本文根据作者黄文海的实际敏捷开发与项目管理经验分享了实施敏捷开发的技术方面的先决条件,希望为准备引入敏捷开发的团队提供方向上的指引。

迭代开发是所有敏捷开发方法的共同特征。迭代开发中的两个迭代之间往往涉及对同一个功能的变更。这种情况下,当前迭代测试时不仅要执行针对这一功能变更的修改和新增测试用例,还要执行那些不需要改动的用例,以保证两个版本间的兼容性。随着时间的推移,迭代过程中需要运行的兼容性测试用例会越来越多。此时,如果没有自动化测试工具支持,要在一个迭代内运行之前所有迭代的兼容性测试用例往往成为一件实际不可行的事情。然而,保持版本间的兼容性又尤为重要。可见,如果说敏捷开发是动车的话,那么自动化测试工具就是动车的轨道。

敏捷开发中的优秀实践,如持续集成(Continuous Integration)和重构(Refactoring),也都是要求自动化测试工具支持的。

软件架构支持与架构看护

很多系统,一开始还有清晰的架构,甚至在若干年后,代码上还留有其最初的开发者对于架构的思考痕迹。但是,随着时间的推移,原有开发人员的离职以及其后不断的人员变更,现有功能的变更、新增功能所带来的代码变更,往往使得这个系统的重复代码越来越多,模块间的耦合度越来越大。最后,这个系统成了个一改代码就会"牵一发而动全身"的没人敢碰的"烫手山芋":代码不改动倒好,一旦改动,则系统到处出错。这种情况很大程度上是系统的架构缺少看护,导致日积月累的代码修改将原有的架构抛在一边,最终使得该系统的架构逐渐退化。

迭代开发中,往往前一个迭代实现的功能,这个迭代就涉及到了它的变更,同时又有新的功能要增加。这种变更所带来的频繁的代码改动,应该要有适用的架构提供支持,以便一个功能的修改和新增能够以最小的代码改动来实现,并且这些代码改动对现有代码所可能产生的影响最小。否则,代码改动困难以及对现有代码的影响太大可能导致的返工会加大开发和测试的工作量。这对于敏捷开发来说,影响是重大的。因为敏捷开发一个迭代周期可能短到两周,根本不允许工作量浪费。这就要求系统的架构足够灵活,或者足够简单以至于即便新增或者修改功能要求架构进行变更,这种变更也显得很容易。

架构本身的清晰度和简单性也很重要。一个过于复杂的架构会增加其理解与学习的难度,不利于其运用和对其进行看护,导致加速其退化。

笔者在所带领的项目中则是通过设计会话(Design Session)和代码复审这两个活动落实和体现架构看护。

图 1. 设计会话

模块化打包与服务端热部署支持

敏捷开发往往采用 Story 驱动开发。Story 驱动开发中的一个 Story 代表着软件的利益干系人角度来看的软件价值的最小单位。因此,如果敏捷开发中的各个活动如编码和测试都能够以 Story 为单位,则更加能够体现 Story 驱动开发的本意---聚焦用户价值。模块化打包和部署意味着我们能够以一个 Story 而不是整个应用系统为单位进行打包和测试。这为 Story 驱动开发提供了坚实的技术支持:其一,在一个迭代中通常有多个 Story 需要实现的情况下,任何一个 Story 只要其具备可以转测试的条件都可以通过以 Story 为单位进行打包转 Story 测试,而不必等其它 Story 也具备转测的条件再一起打包进行集中转 Story 测试。也就是说此时各个 Story 对应的 Story 测试(Story Test)可以并发进行,从而为减少了测试过程中的等待,有利于项目进度。其二,在以 Story 为单位进行打包和部署的前提下,一个 Story 的相关产物一经测试验证达到可以交付的条件时,并不会因为其它 Story 的产出物有问题需要重新进行打包进行转测而使该 Story 需要重新打包测试。这意味着以一个 Story 的测试一旦通过,则相应的需求分析、编码、测试这些工作的成果就可以固定下来,避免了不必要的重复劳作。

传统的 J2EE 系统中,打包是以整个 Web 应用系统为单位打成一个 WAR(Web Application Archive)的。这种打包方式往往意味着当一个后达到可以转测的 Story 打包时,先完成的 Story 也被迫要重新进行打包。此时即便这个 Story 已经完成了 Story 测试,也要重新进行测试。因为后打包的 Story 可以由于代码上的耦合影响先打包的 Story。而采用 Story 为单位进行打包,通常意味着这个 Story 的实现代码及其依赖库、相关配置是从物理同其它 Story 隔绝开来的从而实现了各个 Story 的产出物相对独立。比如 Java 平台中的 OSGi(Open Service Gateway Initiative)就支持这种使各个 Story 的产出物能够从物理上隔绝开来的特性。

笔者所带的敏捷团队中就是采用以 Story 为单位对某个 Story 的相关产出物进行打包先进行Story 测试。Story 测试阶段着重的是软件的功能。待 Story 测试通过后,再以 Story 为单位进行性能评估测试。这个测试也通过后,则说明相应的 Story 已经达到可以交付的条件了,即这个 Story 从敏捷开发的角度来说"完成"了。这样,整个团队为这个 Story 所付出的工作也就固化下来了。

模块化部署包的热部署意味着可以在不重新启动应用服务器的情况下部署模块。这便于在同一个测试服务器上并行多个 Story 的测试,使得这些先后部署的模块相互间不影响(因为一个模块的部署不要求重新启动应用服务器从而避免了先前已经部署的模块的测试被迫中断),从而使团队能够充分利用有限的硬件资源及时间。

Java 平台中的 OSGi 规范的实现就支持模块化部署包的热部署。

时间: 2024-11-17 07:55:18

分享实施敏捷开发的技术方面的先决条件的相关文章

敏捷开发实战随记

敏捷实战实施背景,地产行业信息化管理某知名企业,为了快速切入和抢占互联网市场,某产品研发部实施敏捷开发,通过短期快速灵活方式提升自己产品生产能力. 1.团队建立.确立目标和制度 以两周为一个大冲刺周期,大冲刺内实现和完成产品指定功能升级: 以每周为一个小周期,实现每日构建,开发人员完成后立即提交到测试环境由测试人员进行测试: 团队化分为平台小组.接口小组.开发A组.开发B组进行不同分工作业,每组设置小组长一名带领各小组完成冲刺目标: 整个团队设总监1名.有个产品经理.2个PM带领大团队进行产品升

敏捷开发与项目管理实战之敏捷需求分析

问题背景 敏捷开发中许多活动都是全员参与而非专人参与.需求分析同样也可以是全员参与 的一个活动.这反映了敏捷开发的"个人与交互胜过过程与工具"的价值观.需求分析是在需 求理解的基础上进行的.因此,全员参与需求分析有助于及时发现团队成员对同一个需求理解不一致的 问题,这很大程度上避免了缺陷的引入.另外,也有助于规避人力风险.比如,一个需求的开发者突然 需要请假,其他开发者可以马上顶替他,因为其他人也参与了其负责开发的需求的分析.此外,全员参 与需求分析也有助于全体成员的能力的提升.但问题

一起谈.NET技术,敏捷开发的26条至理名言

我经常收集各种各样的至理名言,最近我重温敏捷开发:真正的问题是什么?下面是一份26条关键原则的清单,以指引敏捷软件开发团队. 1.完整地干完一件事后在开始另一件事:用厨房比喻来说就是:"先上这道菜,再开始做下一道".软件开发的最大问题就是同时开始几件事情,这将不可避免的造成某些工作被废弃,从而造成浪费.专注于一件事:完整地实现其功能:运行测试:编写文档:签入所有,把这当做一项工作完成,然后再开始下一件事. 2.不要破坏构建:非常明显,但必须被包含在任何软件开发建议清单中.程序员在签入之

[免费讲座] 成都软件技术沙龙 - 开启基于Scrum的敏捷开发全新征程讲座

成都软件技术沙龙4月28日活动议程 开启基于Scrum的敏捷开发全新征程 沙龙介绍: 成都软件技术沙龙成立于2008年,致力于发展成都地区软件事业,结交志同道合的软件界朋友,先后与微软.NET俱乐部,微软社区精英计划,天府软件园以及Scrum成都等机构合作,希望能团结成都地区软件同仁共同交流. 4月28日活动 – 开启基于Scrum的敏捷开发全新征程 时间:4月28日下午1点 – 5点 地点:成都天府软件园A区3号楼大会议室 讲座一:自下而上的敏捷实践 大纲: l 持续集成 l TDD l 自动

敏捷开发学习分享

程序员都很懒,你懂的! 敏捷不是快,而是拥抱变化(不断反馈的一个过程).                                                        简单的说,敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征.换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态. 敏捷原则:主张简单,拥抱变化,可持续性,

敏捷开发-快速迭代

今天跟大家分享的是"敏捷开发.快速迭代".我们大都采用的是"瀑布开发模式",有了问题,就得返工,虽然最终的产品会比较齐全完善,但是开发周期太长,开发人员会产生排斥,甚至厌恶的心理.经过YH系统的开发,也且生体会到了这一弊端. 有问题就要去解决它!于是我想到了"敏捷开发".借鉴敏捷开发模式,来改善软件开发过程,提高项目的开发效率. 要想借鉴,首先得弄懂以下3个问题. 1. 什么是敏捷开发 百度百科中是这样解释的:敏捷开发是一种以人为核心.迭代.循序

不以敏捷开发为基础的DevOps都是耍流流流流流流流氓

前言 Scrum模式开发经验分享 Scrum出来已经很久了,很多原理性问题就不讲了.今天和大家主要分享一下Scrum实施过程中的一些经验和对其的一些感受. 主要有四块内容--敏捷Scrum模式概貌.人员的分工.日常活动的细节.以及一些可能用到的简单工具. 现行开发模式及开发过程中痛点 敏捷模式概貌 Scrum已经用了很久,但为什么始终没有用到极致或者很火? 大家都在做大型系统,Scrum模式难度稍大,链条过长.需要开很多协调会议,沟通成本高. 微服务和容器化让团队规模发生转变,从以前几十人的大团

创建标准化代码在VS中实现敏捷开发

标准化程序开发是敏捷开发中的核心内容之一.标准化代码不仅有利于团队之间的合作,也有利于模块之间的集成,节省时间与成本.在VS中也为创建标准化代码做出了很多努力.笔者在这篇文章中就跟大家分享一下,在VS平台中创建标准化代码的注意事项.具体的说,就是五大禁令和四大推荐. 禁令一:不要随意检查代码. 这可能跟用户正常的认识有所差异.有些开发人员可能认为在开发过程中,检查代码是必须的.不过在敏捷开发的模型中,这恰恰是禁止的.因为如果在代码的编写中,不时的检查代码,会浪费开发人员大量的时间与精力.当然,这

使用.NET进行高效率互联网敏捷开发的思考和探索

不知从什么时候开始,创业变得很廉价,谈什么都是互联网,动辄融资千万.这阵风好像也刮向了程序员中,有那么一大批开发者,数据结构不好好学习.数据库原理不扎实掌握,在github上发布几个项目,用nodejs创建一些服务,再用H5写出APP,就自以为迈入了高级程序员的队伍,能够运筹帷幄互联网项目,难道学习新技术.新理念就是快速成长吗,显然不完全是,在这浮躁的氛围中,各种粗制滥造的互联网网站.APP接踵而至,很多看似漂亮的APP,连简单的http接口安全都没有措施应对,很多美丽的响应式网站,目录结构随意