1.1 软件交付三要素
软件交付在本书中是指项目、产品、解决方案和服务的交付。具体来说,就是在确定的范围和资源内,能够按照预定的成本、进度和质量,顺利完成预定的服务。软件作为一种服务正变得日益复杂,需要通过持续交付来快速、可靠地构建。交付团队为了掌握强有力的市场竞争优势,需要提升软件交付能力来支撑和提供有价值的、高质量的软件。软件交付已经成为信息化建设参与者、贡献者和受益者的共同焦点,软件交付的效果取决于交付能力、交付标准和交付成果三要素。
1.合理建设交付能力
软件交付能力是集设计、技术、协作、服务于一体的综合交付能力,是项目管理的原理和方法在软件工程领域的应用。软件交付是否成功,取决于软件交付能力的强弱和交付能力建设的好坏。
软件交付能力的建设过程,是一个随“需”应变、不断调优、持续提升的循环过程。例如,某个交付团队首先发现自己的需求变更、发布管理比较弱,于是从这两方面入手进行改进,通过使用交付理论和知识,借助交付工具和方法,对协作能力和服务能力进行构建和完善。在后续过程中,又发现功能设计、客户端开发能力相对较弱,需要对设计能力和技术能力进行优化和提升。在这个持续优化的过程中,该团队的不同交付能力得到了合理的建设,通过聚集和平衡这些能力,最后形成了综合的软件交付能力。
因此,从某种程度上说,交付团队的成长过程就是合理建设软件交付能力的过程,软件交付能力是软件交付的命脉。
在软件交付能力建设过程中要注意以下两个问题。
(1)不同过程的交付能力水平是不均衡的,这是因为软件交付的总体生产力是由整个软件交付团队的效率决定的,而交付团队的效率又由整个软件交付过程中最弱的能力决定。
(2)软件交付能力的建设思维模式是先局部后整体,导致整个软件生命周期中存在较多的能力竖井。这是因为不同的工作团队使用不同的流程,不同的流程由不同的工具实现,最后导致不同工具间的信息无法互通,整个软件生命周期缺乏可追踪性,阻碍了端到端的治理,降低了软件交付能力。
因此,合理建设软件交付能力是做好软件交付的基础,是交付团队的内在基本功。
2.深刻领会交付标准
软件交付团队在执行软件交付过程前,必须明确交付物,并且深刻领会交付物的交付标准。在执行过程中要严格执行标准,避免发生偏差,造成不必要的损失,影响正常的软件交付。软件交付标准主要是指软件的文档交付标准、源代码交付标准和可执行程序交付标准。交付标准用于确定所交付的软件是否符合预期的各项要求,它是用户正常验收交付物的依据。
1)文档交付标准
(1)文档完备性,即交付的文档是否按照合同及附件的要求涵盖全周期和全类型。
(2)内容针对性,即是不是用户要求的文档,文档的内容是否与功能要求吻合。
(3)内容充分性,即文档全面、详细的程度。
(4)内容一致性,即在不同文档中是否存在前后矛盾的内容。
(5)文档价值性,即文档应该能够反映软件全生命周期的整个过程,需求中提到的内容应该在设计中体现、开发中实现、测试中检验、交付中出现。
2)源代码交付标准
(1)版权明晰,即明确交付的代码没有版权问题。
(2)代码完整,即所有实现用户需求的代码能正常编译、运行,而不需要安装额外的工具、控件或插件。
(3)可读性强,即源代码结构要分层、前后要分离,程序注释量不少于程序编码量的30%。
(4)配置规范,即对交付源代码中的配置文件要事先定好规范和要求,需要对配置项、配置参数做统一约定,确保完整性和一致性。
3)可执行程序交付标准
可执行程序交付标准是通过软件测试来检验可执行程序是否满足需求设计的一组交付标准。为了完成检验,需要对测试用例、测试规程和测试方案提出要求,因此可执行程序交付标准包括以下内容。
(1)测试用例要求,列出用于输入的具体值及预期的输出结果,要求将测试用例与测试设计分开,使测试用例能用于多个设计并能在多个场景中重复使用。
(2)测试规程要求,规定运行系统和执行测试用例以实现测试设计所要求的所有步骤。
(3)测试方案要求,分为针对性测试方案和抽样测试方案,前者满足耗时短、大面积试用后的标准,后者适合耗时可长可短、未大面积试用的标准。
包含文档、源代码和可执行程序的软件交付标准是评价软件交付质量的依据,根据软件交付质量评价结果,可以确定软件交付是否合格。因此,软件交付标准是衡量软件交付质量的重要标尺,也是评价软件交付成果的重要依据。
3.全程聚焦交付成果
合格的软件交付成果,是软件交付的最终目标,是软件交付团队的工作方向。软件交付成果是指软件交付物,一般通过软件交付物清单列出。软件交付物是借助软件工程和项目管理中的理论、方法、工具,对软件全生命周期进行管理的交付成果,分为过程交付成果和验收交付成果。
1)过程交付成果
过程交付成果通常以文档的形式进行交付。以下是不同过程交付成果的示例:
(1)需求过程,如用户需求说明书、软件规格说明书等。
(2)设计过程,如总体设计说明书、概要设计说明书、数据库详细设计说明书、后台详细设计说明书、接口详细设计说明书、前端详细设计说明书等。
(3)开发过程,如模块开发卷宗、开发进度月报、项目开发总结报告、开发功能说明书等,本过程还包括版本对应功能的源代码,源代码也是交付成果。
(4)测试过程,如测试计划、测试分析报告、性能测试报告、验收测试报告等,本过程还包括对应版本相关功能的测试用例、测试报告等。
(5)发布过程,如版本发布功能说明书、用户手册、操作手册等。
(6)部署过程,如系统安装部署手册、主机集成部署方案、数据库集成部署方案等。
2)验收交付成果
软件项目在验收时,除了提供过程交付物外,还需要根据合同提供源代码或可执行程序的应用版本,以及最终的软件交付验收报告。不同的软件项目,其软件交付验收报告的内容存在差异,软件质量管理中的“软件交付验收报告”模板是目前通用的,并且可以满足大多数软件项目的验收交付的,该模板主要包括以下几个部分。
(1)项目基本情况。
(2)项目进度审核,细分为实施进度、变更情况、投资结算情况。
(3)项目验收计划,细分为验收原则、验收方式、验收内容。
(4)项目验收情况汇总,细分为验收情况汇总表、验收附件明细、专家组验收意见。
(5)项目验收结论,细分为建设方结论、承建方结论、监理方结论。
(6)附件,细分为软件平台验收、功能模块验收、项目文档验收、硬件设备验收(如果有硬件设备)。
软件交付是项目管理的核心,项目管理的过程就是合理建设交付能力、深刻领会交付标准、全程聚焦交付成果,这是软件交付团队一切工作的出发点。没有软件项目管理,软件交付就会面临许多挑战,软件项目就很难成功。因此,要做好软件交付,还需要深刻认识软件全生命周期中面临的主要挑战。