1.1 软件开发概述
1.1.1 软件开发过程
软件开发过程一般包括需求、设计、编码和测试等阶段,同时也包括系统运行与维护阶段,这些阶段都可以看成一个个独立的软件开发活动(软件开发组成部分),也可以把这些有内在联系的活动看成一个有机整体,即软件开发过程,在软件工程中称之为软件生命周期(Softwace Development Life Cycle, SDLC)。
软件开发过程的基本组成部分如表1-1所示。
表1-1 软件开发的基本组成部分
资源是稀缺的,在软件产品生产过程中,最重要的资源是人,同时由担任不同角色的人组成的开发团队也是软件企业的最大资源。从软件开发基本组成部分来看看,项目定义时需要高层管理者支持;做需求调研分析时,需要需求分析师;软件设计时,需要系统分析师和架构师;程序编码时,需要开发工程师;软件测试时,需要测试工程师……总之,一个软件团队一般包括的角色和人员有:项目管理人员、系统分析师、软件架构师、开发工程师、测试工程师和项目相关人员(参与项目的其他人员)等。软件开发的成功依赖于整个软件团队协作,并非项目经理一个人的努力。团队成员之间、特别是不同分工的团队成员(架构设计人员和开发人员、开发人员和测试人员等)之间高效率的协同工作,不但可以提高工作效率,更是项目质量的保证。
不管是大至拥有几万员工、世界各地都有研发机构的大型软件企业或者只拥有三五个人七八条枪的作坊式的小型软件公司,软件开发过程中的团队成员和软件生命周期大都是相同的。从具体的应用上来说,软件生命周期是指软件开发团队共同参与的一系列过程(包括软件开发全部过程、活动和任务)的结构框架。
软件生命周期包括可行性研究、需求分析、系统设计、编码实现、软件测试、软件发布和软件运维等。软件生命周期体现了按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档供交流或备查,以提高软件的质量的思想和方法。
根据软件生命周期模型,在实践中产生了不同的软件开发模式,以目前广泛采用的两种开发模式为例,一种是传统的软件开发模式(瀑布模型、演化模型和螺旋模型),另一种是敏捷开发模式。对传统模式以瀑布模型为例,软件开发过程如图1-1所示。
图1-1 瀑布模型
敏捷模型以SCRUM为例,SCRUM开发模式通常以30天(或者更短的一段时间)为一个阶段,由客户提供新产品的需求规格开始,开发团队与客户于每一个阶段开始时挑选该完成的规格部分,开发团队必须尽力于30天后交付成果,团队每天利用15分钟开会检查每个成员的进度与计划,了解所遭遇的困难并设法排除,SCRUM模型如图1-2所示。
图1-2 SCRUM模型
计算机软件不仅仅只有软件产品,更重要的是体现软件思想、管理思想,为工作和实践提供指导、减少工作量和提高劳动效率。敏捷开发的核心管理理念是强调沟通交流和协作,及时应对需求变化,提高团队成员的开发效率。在敏捷开发中每个迭代周期的设置都非常短,所以团队成员对开发工作的全身心投入以及保持畅通的沟通渠道非常重要。
案例&场景:SCRUM与CMMI的融合
笔者以前所在的某公司采用SCRUM开发模式且公司已经通过了CMMI5级认证。CMMI为敏捷团队带来的不仅是文档和相对严格的过程,更多的是如何采用量化的方式对项目进行管理,并通过过程持续改进达到更高的客户满意度。
笔者所在的开发团队根据公司的要求,在项目进行过程中把项目相关基础数据和信息录入到公司级软件管理工具中,并把从工具中得到的进度、质量和生产率等方面的量化指标和分析结果以天、星期、迭代和里程碑为周期向客户方进行报告。依据量化指标,通过与客户的交流和沟通,对开发过程进行不断的微调。
公司还从组织架构和工具等多方面对敏捷团队予以支持和帮助,成立了TEC (Technology Excellence Committee,技术卓越委员会), PMO(Project Management Office,项目管理办公室)和DOO(Delivery Operation Office,项目交付办公室)分别对项目的技术能力、管理能力和过程能力进行管理和监控。比如:TEC进行的代码质量审查,PMO对项目经理进行的周期性项目管理审查,DOO对项目量化指标和过程执行的审查等。各种审查的结果就是要找到各个敏捷团队存在的问题和弱点,并从公司角度采用各种培训和论坛帮助项目团队在各个方面进行提高。