闫鹏斌, 吴 扬, 丘仕能
(1.华北水利水电大学 信息工程学院,河南 郑州 450046; 2.广西大藤峡水利枢纽开发有限责任公司 信息中心,广西 南宁 530000)
软件产业作为我国基础性和战略性产业,在促进国民经济和社会发展中占据着举足轻重的地位。优良的软件开发模型或方法能开发出高质量软件的基础,保证客户对交付软件的满意度,提升软件组织整体的核心竞争力,从而促进软件产业的蓬勃发展。
软件工程的核心任务之一就是不断提高软件产品的质量和效率,降低软件开发预算和风险,为达到此目的,相关研究部门的研究者和实践者提出了众多的软件工程方法。1986年,为交付军方软件产品,美国卡内基·梅隆大学软件工程研究所研发了软件成熟度模型(Capability Maturity Model for Software,CMMSW),随后集成多个成熟度模型(Capability Maturity Model Integration,CMMI),其中关于软件开发的成熟度模型用于评价软件机构的软件过程能力成熟度和指导软件过程改进,CMMSW/CMMI模型在很大程度上提高了软件的质量与效率,降低了软件开发的成本与风险。
然而,随着软件行业的飞速发展,人们对软件产品的要求越来越高,高质量的软件功能、复杂的软件系统、快速变化的软件需求等,使得软件组织面临新的挑战,以Scrum和极限编程为代表的Agile软件开发逐渐得到软件组织的认可,越来越多的软件组织开始采用Agile软件开发。它们以人为核心,采用迭代的、增量的软件开发方式,能够适应多变的软件需求,快速交付高质量的工作软件,实现效益的最大化。
NAGEL R N于1991年在21stCenturyManufacturingEnterpriseStrategy中首次提出敏捷性的概念。2001年2月,BECK K和BEEDLE M等知名软件工程师、软件咨询师共同签署了“敏捷软件开发宣言”[1],代表着一种不同于传统软件开发模型的新的软件开发方法的诞生——Agile软件开发,敏捷软件开发宣言的核心体现在“四个价值”和“十二个原则”,其包含的“四个价值”:
1)个体和交互胜过过程和工具;
2)客户合作胜过合同谈判;
3)可以工作的软件胜过面面俱到的文档;
4)响应变化胜过遵循计划。
敏捷软件开发宣言中的价值观都是相对的陈述,它们代表的是选择两种方法的权重[2],敏捷软件开发宣言的价值观充分显示了其以人为本、拥抱变化的核心,“十二个原则”是对Agile软件开发价值观的践行,其具体内容见表1。
表1 Agile软件开发的原则Tab.1 Principles of Agile software development
Agile软件开发是一种包含软件开发过程和项目管理技术与方法的价值观、思想,它与传统的软件开发方法的理念是截然不同的,如瀑布模型,瀑布模型采用线性方法,开发流程为可行性分析、需求分析、概要设计、详细设计、测试、部署及维护,在前期规划的基础上有序地完成每一个步骤,而Agile软件开发是非线性方法,它强调以人为核心,通过自组织团队、与客户的密切合作,采用迭代、增量的软件开发方式,交付高价值的软件产品。Agile软件开发方法是“轻量级”方法的总称,包含一系列软件开发方法,有Scrum[3-6]、极限编程(Extreme Programming,XP)[6-8]、特征驱动软件开发(Feature Driven Development,FDD)[9]、自适应软件开发(Adaptive Software Development,ASD)、动态系统开发(Dynamic Software Development Method,DSDM)[6]、水晶方法(Crystal Method)、精益软件开发(Lean Software Development)[10]等,其中,Scrum和XP方法是最流行与最有效的敏捷项目开发方法与管理理念。Version One第13敏捷年度报告显示,Scrum和Scrum/XP混合使用是软件组织最常用的敏捷方法[11]。
Scrum源于术语橄榄球,由Sutherland和Schwaber于1995年在美国提出。Scrum包括了一系列实践和预定义角色的过程框架,采用迭代、增量的开发方式,通过内部团队与用户的高度协作,专注于交付客户高价值的软件产品,并通过开发过程中的交流和冲刺后的反思、总结来不断地提升团队能力,它能够很好地应对快速变化的需求,频繁地交付新版本。
当学生能够进入教师创设的情境之中的时候,他们就能够感受到语文学习的兴趣,而成功地调动起学生的学习兴趣又能够更好地展现出多媒体教学的效果。由于传统的语文教学过程中课堂的氛围相对沉闷,这种沉闷的气氛对教学工作的开展和学生的学习相对不利。一些心理学家通过大量的研究总结出,良好的课堂氛围能够帮助学生保持轻松的心情,学生在这种情况下进行学习往往能够得到更好的学习效果。农村小学语文教师在对学生进行教学的时候可以适当地运用多媒体技术,在创设情境的过程中考虑到学生的兴趣以及学生的好奇心,构建出一种探究的气氛。
Scrum过程框架定义了实施Scrum的流程,Scrum把整个项目开发周期分成若干个迭代,称为Sprint,时间可以根据项目需求制定为1~4 w,开发团队根据产品待开发项的优先级开发级别高的条目,通过Sprint评审会审核本次Sprint成果是否达到了效果或重新放入到项目待开发列表中,图1描述了Scrum的过程框架。
图1 Scrum过程框架Fig.1 Framework of Scrum process
2.2.1 Scrum团队中的4个主要角色
1)产品负责人:根据客户的需求和关注点定义产品功能,创建产品BackLog并维护Sprint BackLog优先级,在每次迭代交付时间同客户一起评审迭代成果。
2)敏捷教练:敏捷教练向每个参与者宣传Scrum的含义、规则,使每一位参与者遵循Scrum的实践,并为团队的相互协作提供必要的帮助,以保障Scrum开发的顺利实施。
3)开发团队:开发团队是人数在5~9人范围内的跨职能、自组织的团队,主要任务是把产品待开发事项转化为功能增量,确保完成每个Sprint的功能。
4)客户:主要负责向产品负责人传达产品的需求和关注点,确认优先级、产品的发布时间以及验收每次的迭代成果。
2.2.2 Scrum开发流程包含的4个仪式
1)每日站立会议:每日站立会议是团队成员汇报完成进度、遇到的问题以及调整计划的会议,通过团队成员间的交流和沟通,提高团队开发效率,时间控制在15 min。
3)迭代评审会议:团队成员向产品负责人及利益相关者展示本次迭代实现的增量,通过参会人员的反馈,决定本次迭代的增量是否符合迭代计划会议做出的承诺。
4)迭代回顾会议:参会人员通过回顾本次冲刺过程,讨论在本次冲刺过程中需要改进的地方和需要保留的地方,这种方式有助于团队的持续改进和优化。
2.2.3 Scrum开发流程包含的3个工件
1)产品待办事项列表:产品负责人根据估算把初期的规划适当地分解成一个个待办事项,并按照价值、复杂性以及风险进行优先级排序,它是一个持续完善的动态列表。
2)Sprint待办事项列表:通过Sprint计划会由参会人员共同决定的用户故事,它是具体的Sprint实施计划。优先级越高的产品待办事项会越早被选为Sprint待办事项。
3)Sprint燃尽图:燃尽图是用于跟踪Sprint冲刺的可视化视图,通过燃尽图可以了解到已完成的工作、将要完成的工作及时间,用来衡量本次Sprint实施与计划的一致性。
XP由BECK K在1996年提出。极限编程是一个轻量级的、灵巧的软件开发方法,同时也是一个非常严谨、科学的方法[12]。XP采用迭代、增量的软件开发方式,通过持续不断的测试结果和反馈进行修复,适合周期短、设计简单、轻量型的软件开发,它有5个非常重要的核心要素,分别是沟通、尊重、简明、反馈和鼓励[13]。
表2 XP的核心实践Tab.2 The core practices of XP
XP由一系列简单却相互依赖的实践集合组成,这些实践结合成优于部分结合的整体[14],XP提出的核心实践为软件开发提供了指导,开发团队在XP思想下根据具体情况可以灵活修改规则,表2描述了XP的核心实践[15]。
Version One作为敏捷调查报告的提供者,在探索敏捷趋势方面有较高权威,Version One的第12、13敏捷年度报告[11,16]显示,使用Agile软件开发的益处主要表现在两方面:一方面表现为下降或降低的,比如开发项目的风险、开发项目的成本、向客户交付成果的时间等;另一方面表现为提高或增强的,比如软件质量、团队生产力和效率、软件可维护性等。图2描述了第13敏捷年度报告中使用Agile软件开发的益处[11]。从图2可以看出Agile软件开发在很多方面提高了软件的成功率,但单一的软件开发方法或技术并不能完全解决软件开发所面临的问题,Agile软件开发关注的是项目开发流程和项目管理,它适合小型团队迭代、增量开发,它缺乏对整个软件组织持续改进、优化的能力,只有整个软件组织能力得到提升才能提高核心竞争力,具有软件过程能力评价和指导过程改进功能的CMM/CMMI成熟度模型可以作为一个很好的补充。
图2 使用Agile软件开发的益处Fig.2 Benefits of using Agile software development
CMM/CMMI和敏捷软件开发模型相结合使用的反对态度一直存在,但有许多国内外研究者和实践者证实了它们是可以相互结合使用的。CMMI研究机构指出,2015年约70%的软件评估组织使用一种或多种Agile软件开发方法,在最新发布的CMMI V2.0版本中,明确提出了指导Agile软件开发的使用,并有许多文献[17-22]提出将CMM/CMMI和Agile软件开发结合使用,以促进软件组织整体能力的提升,并根据实际案例效果进行了验证。虽然在敏捷软件开发和CMM/CMMI成熟度模型可以结合使用方面的证据有很多,他们验证了在大范围下某些方面可以结合使用或兼容性较低,但是并没有说明CMM/CMMI成熟度模型和敏捷软件开发在模型和过程之间详细的映射关系,这也正是笔者下一步要研究的工作。
Agile软件开发的价值观和实践原则在很大程度上改善了软件开发的质量和效率,降低了软件的开发成本和项目风险,提升了客户的满意度,被越来越多的软件组织采用。但是,Agile软件开发没有关注软件组织层次的管理。通过CMM/CMMI与Agile软件开发的结合使用,消除两者在某些方面的矛盾,相互补充,发挥各自的优势,共同提高软件组织的整体组织能力。