Agile——敏捷开发,作为CMM神话崩溃后被引入的一套新的软件开发模式,这几年来被广泛引起关注,并被寄予厚望。敏捷开发在其他业界的应用是否理想不得而知,但以下总结了我所在公司的敏捷开发试验,希望可以达到管中窥豹的目的。
敏捷开发宣言——
个体和交互 胜过 过程和工具
可以工作的软件 胜过 面面俱到的文档
客户合作 胜过 合同谈判
响应变化 胜过 遵循计划
虽然右项也有价值,但是我们认为左项具有更大的价值。
以上的宣言比较抽象,基于该理念,以下是ThoughtsWork咨询公司的推崇的n个敏捷开发实践:
Iteration
迭代开发。可以工作的软件胜过面面俱到的文档。因此,敏捷开发提倡将一个完整的软件版本划分为多个迭代,每个迭代实现不同的特性。重大的、优先级高的特性优先实现,风险高的特性优先实现。在项目的早期就将软件的原型开发出来,并基于这个原型在后续的迭代不断晚上。迭代开发的好处是:尽早编码,尽早暴露项目的技术风险。尽早使客户见到可运行的软件,并提出优化意见。可以分阶段提早向不同的客户交付可用的版本。
IterationPlanningMeeting
迭代计划会议。每个迭代启动时,召集整个开发团队,召开迭代计划会议,所有的团队成员畅所欲言,明确迭代的开发任务,解答疑惑。
Story Card/Story Wall/Feature List
在每个迭代中,架构师负责将所有的特性分解成多个Story Card。每个Story可以视为一个独立的特性。每个Story应该可以在最多1个星期内完成开发,交付提前测试(Pre-Test)。当一个迭代中的所有Story开发完毕以后,测试组再进行完整的测试。在整个测试过程中(pre-test,test),基于Daily build,测试组永远都是每天从配置库上取下最新编译的版本进行测试,开发人员也随时修改测试人员提交的问题单,并合入配置库。
敏捷开发的一个特点是开放式办公,充分沟通,包括测试人员也和开发人员一起办公。基于Story Card的开发方式,团队会在开放式办公区域放置一块白板,上面粘贴着所有的Story Card,按当前的开发状态贴在4个区域中,分别是:未开发,开发中,预测试中,测试中。Story Card的开发人员和测试人员根据开发进度在Story Wall上移动Story Card,更新Story Card的状态。这种方式可以对项目开发进度有一个非常直观的了解。
在开发人员开始开发一个Story时,ta需要找来对应的测试人员讲解Story功能,以便测试人员有一致的理解,同时开始自动化系统测试脚本的开发。
Standup Meeting
站立会议。每天早上,所有的团队成员围在Story Wall周围,开一个高效率的会议,通常不超过15分钟,汇报开发进展,提出问题,但不浪费所有人的时间立刻解决问题,而是会后个别沟通解决。
Pair Programming
结对编程是指两个开发人员结对编码。结对编程的好处是:经过两个人讨论后编写的代码比一个人独立完成会更加的完善,一些大的方向不至于出现偏差,一些细节也可以被充分考虑到。一个有经验的开发人员和一个新手结对编程,可以促进新手的成长,保证软件开发的质量。
CI/Daily Build
持续集成和每日构建能力是否足够强大是迭代开发是否成功的一个重要基础。基于每日构建。开发人员每天将编写/修改的代码及时的更新到配置库中,自动化编译程序每天至少一次自动从配置库上取下代码,执行自动化代码静态检查(如PCLint),单元测试,编译版本,安装,系统测试,动态检查(如Purify)。以上这些自动化任务执行完毕后,会输出报告,自动发送邮件给团队成员。如果其中存在着任何的问题,相关责任人应该及时的修改。
可以看到,整个开发组频繁的更新代码,出现一些问题不可避免。通过测试部又在不停地基于最新的代码进行测试。新增的问题是否能够被及时发现并消灭掉,取决于自动化单元测试和系统测试能力是否足够强大,特别是自动化系统测试能力。如果自动化测试只能验证最简单的操作,则新合入代码的隐患将很难被发现,并遗留到项目后期,形成大的风险。而实际上,提升自动化测试的覆盖率是最困难的。
Retrospect
总结和反思。每个迭代结束以后,项目组成员召开总结会议,总结好的实践和教训,并落实到后续的开发中。
ShowCase
演示。每个Story开发完成以后,开发人员叫上测试人员,演示软件功能,以便测试人员充分理解软件功能。
Refactoring
重构。因为迭代开发模式在项目早期就开发出可运行的软件原型,一开始开发出来的代码和架构不可能是最优的、面面俱到的,因此在后续的Story开发中,需要对代码和架构进行持续的重构。迭代开发对架构师要求很高。因为架构师要将一个完整的版本拆分成多个迭代,每个跌倒由拆分成很多Story,从架构的角度看,这些Story必须在是有很强的继承性,是可以不断叠加的,不至于后续开发的Story完全推翻了早期开发的代码和架构,同时也不可避免的需要对代码进行不断完善,不断重构。
TDD
测试驱动开发。正如上面讲的,迭代开发的特点是频繁合入代码,频繁发布版本。测试驱动开发是保证合入代码正常运行且不会在后期被破坏的重要手段。这里的测试主要指单元测试。
敏捷方法反思:
自己参与的敏捷开发项目总的来说不是很成功,这可能也是业界遇到的通病:
1、对于全新的软件,在项目早期测试人员就参与并实现自动化测试脚本,但实际上软件的界面等非常不稳定,导致测试人员返工的工作量很大。
2、对于全新的软件,资料人员过早参与,后期返工工作量大,原因同第一点。
3、自动化系统测试工作量大,测试人员投入大量的精力在使测试自动化起来,而没有足够的精力放在真正的测试软件的功能是否正常。即便是这样,自动化系统测试脚本也多流于形式,测不出深层次的问题。
4、代码动态检查工具执行不理想,流于形式。没有人对Purify有深刻的理解和应用经验,报告中查出来很多告警,但不知如何消除。
5、由于快速搭建原型,没有在架构上进行严谨的设计,导致后期一直堆砌代码。
6、异地开发模式下无法实现快速构建、快速交付,团队普遍感觉很疲惫。
7、敏捷开发不提倡加班,但实际上不管是CMM还是Agile哪一种开发模式跟是否加班都没有必然联系。
分享到:
相关推荐
在研发领域,中国企业常常面临一系列挑战,如缺乏系统性的研发理念、无效的产品规划、职能化的组织结构、不规范的开发流程、项目管理薄弱、技术与产品开发不分、缺乏共用模块的积累和分享机制、研发人员专业化素质...
1. **内置高效开发工具**:系统内置的流程定制工具允许用户根据企业实际需求灵活调整业务流程,提高流程拓展的有效性。 2. **快速角色体验**:用户可以迅速了解业务流程的操作方法和要求,快速适应新的工作环境。 3....
中国企业常面临的问题,如缺乏系统研发理念、产品规划不足、职能化组织结构、不规范的产品开发流程、项目管理薄弱、技术与产品开发不分、缺乏CBB(共用模块)积累和分享机制、研发人员素质不足、评价激励机制不完善...
本文的结构安排主要包括摘要、背景意义、论文结构安排、开发技术介绍、需求分析、可行性分析、功能分析、业务流程分析、数据库设计、ER图、数据字典、数据流图、详细设计、系统截图、测试和总结等部分。 开发技术...
从给定的文件内容中,我们可以提取和总结以下知识点: 1. 计算机辅助设计(CAD)技术应用: CAD技术是现代工业设计和制造中不可或缺的一部分,它通过计算机软件来辅助设计和建模分析。CAD技术可以帮助工程师和设计...
3. 软件开发流程与交付内容(1)软件开发包括需求分析、设计、编码、测试等阶段,乙方应在合同签订后30日内完成这些工作并向甲方交付软件产品,包括源代码、安装盘、技术文档、用户指南、操作手册、安装指南和测试报告...
本文将深入探讨PLM的关键技术及其在简睿捷公司的实践。 1. 从PDM到PLM PDM主要关注产品设计阶段的数据管理,如图文档编码、工作流和CAD集成。而PLM则进一步扩展到生产运维、数据服务、ERP(Enterprise Resource ...
1. **模板化的项目流程体系**:捷为iMIS-PM系统提供了标准化的项目模板,帮助企业快速建立任务分解结构、交付物审批流程等,大大减少了项目启动阶段的工作量。 2. **灵活的项目计划创建**:系统支持基于模板创建...
媒体资产管理系统的开发设计涉及到一系列技术与流程,旨在高效管理和利用媒体内容。系统的核心目标是最大化资产价值,降低成本,提高节目制作效率,同时确保安全和适应技术及业务的变化。 6.1 媒体资产管理的发展...
这表明微捷码的解决方案可以优化Chrontel的模拟/混合信号设计流程,助力他们按时交付高质量、差异化的硅片。 总结来看,本文主要涉及的知识点包括: 1. ARM技术授权:ARM向海思半导体提供关键的处理器和互联IP,...
3. 易于开发:丰富的软件库和工具,简化开发流程。 4. 强扩展性:兼容多种无线协议,可灵活选择应用方案。 六、安全特性 CC253X支持AES加密算法,确保无线通信的安全性,防止数据被窃取或篡改。同时,其安全特性还...
- **错误信息**:I/O错误23(数据错误(循环冗余检查))在文件`捷作2008\data\test_Data.MDF`的偏移量处检测到。 - **微软官方解释**: - Microsoft SQL Server在尝试对特定设备进行读写操作时遇到I/O错误。...
总结来说,这个项目章程详细规划了基金售卖网站的开发流程,明确了时间表、预算、团队职责和测试策略,体现了良好的项目管理实践。通过有效的沟通、计划和执行,项目有望按期完成并达到预期的成功标准。
标题中的“RF69H”是一款无线通信模块,主要用于实现短距离无线...提供的DEMO和开发工具包简化了开发流程,使用户能够快速实现无线通信功能。对于那些寻求在预算内实现高效无线连接的项目,RF69H是一个值得考虑的选择。
新一代PLM系统解决方案旨在通过数字化转型,优化产品开发和服务流程,提高企业的创新能力、响应速度和运营效率。它以数据为核心,通过集成不同业务系统的数据,实现跨部门、跨系统的无缝协作,为制造与服务行业带来...
在该代码中,可能会定义DDS的各个组成部分,包括上述的频率控制字生成器、相位累加器和查表器,并详细说明它们之间的数据流和控制流程。 总结,DDS是一种高效、灵活的数字信号生成技术,通过VHDL实现可以将DDS设计...
1. 引入先进管理经验,构建灵活可定制的业务流程,适应业务扩展和管理变化。 2. 采用B/S架构,突破地域限制,支持远程业务操作。 3. 利用高级查询技术进行深度数据分析,满足多角度管理需求。 4. 实现多系统无缝集成...
总结来说,这些知识点涵盖了半导体设计流程的关键步骤,包括高级数字实现系统在优化设计周期和性能方面的应用,以及在实际业务场景中,如企业级应用和数据中心环境,如何通过技术创新提高系统性能和效率。...