课件
项目交付工作
当开发进入尾声的时候,也随着高涨起来,这个时候的主要问题是如何把项目顺利地进行交付。对于客户委托开发的软件项目,项目的验收和交付工作主要包括:实施、培训和验收三个部分。验收之后系统就正式进入维护阶段。
项目实施
项目实施的任务是把软件系统部署到客户的计算机系统上,并且协助客户准备好基础数据,使软件系统能够顺利地上线运行。
- 首先全面做好测试工作(集成测试、功能测试、性能测试),保证软件系统的质量符合上线要求。
- 在实施之前要制定工作计划,确定要发布的代码版本、数据库创建的方式和基础数据的准备。
- 准备好程序代码和相关文档(如需求说明书、设计文档等)
客户培训
在系统部署完成之后,还要组织客户培训,使其掌握软件系统的使用和操作。
培训工作包括:
- 选择合适的人员(经验丰富、了解业务和系统)
- 准备培训内容
- 制定培训的计划,与客户沟通协调,安排时间
项目验收
客户对系统进行验收测试,检查用户需求是否实现以及软件的质量是否满足要求。在验收通过之后,客户将签署验收报告,整个项目正式完成。
软件部署定义
软件部署是软件开发的一个重要环节,它是通过配置、安装和激活等一系列活动来保证软件制品的投入运行。部署的技术会影响整个软件的运行效率和投入成本。软件配置过程也会极大地影响软件部署结果的正确性。
软件部署作用
软件部署需要保障软件系统的正常运行,并且使用有效手段提高部署的效率。即:
- 要提高软件部署的通用性和灵活性,使其能够适用于更为广泛的软件类型和应用场景。
- 要加强软件部署的可靠性和正确性,实现软件系统的正确配置、优化系统性能。
- 要提高软件部署的自动化程度,尽量减少人工参与,避免人工操作带来的错误
软件部署模式
不同的软件系统具有不同的部署模式。
面向单机软件的部署模式
包括安装、配置和卸载,该部署模式主要适用于运行在操作系统之上的单机类型的软件,主要的活动包括打包、安装、更新、激活。
集中式服务器应用部署
对于客户基于服务器结构的系统,一种方式是集中式的服务器应用部署,主要适合于小规模(500人以下)用户群的应用环境,一般情况下,这种系统只有一台或几台单独的服务器,每个服务器承担独立的任务,比如说 Web 服务器、邮件服务器、数据库服务器等:
集群式服务器应用部署
另一种方式是集群式的服务器应用部署,主要适用于并发用户访问量大(10000以上)、而且对系统稳定性和性能要求很高的分布式平台,在这种模式下不同的服务器职能是由若干服务器集群来实现,通过负载平衡把任务分配到集群中的每一台机器上:
持续集成与交付
在互联网环境下,Web 应用系统的开发主要是采用敏捷开发方法,强调持续集成和快速交付。所谓持续集成就是开发小组经常集成自己的工作,通常每人每天至少集成一次,每一次集成都通过自动化的构建来完成。
持续交付是在持续集成的基础上实现的,它是以自动化或者半自动化的方式,把构建的版本从开发环境推送到接近实际使用的交付准备环境中。例如像 flickr 系统,大概一周会平均部署几十次,几乎每一个开发人员的每一次修改就会导致一次部署,这样做可以快速地获得用户的反馈,更好地适应需求的变化。
下图是单个产品的构建流水线,从开发人员提交修改到源代码库开始,后续的所有步骤都是由构建流水线自动来完成:
- 首先是 package 打包阶段,把应用准备好到能够在实际的环境中进行部署的程度
- 打包之后,可以把产品包部署到一个 staging,也就是预演环境下,准备进行功能测试,这里要求准备一个干净的预演环境
- 在环境部署好之后,对环境中的产品运行功能测试脚本,如果测试全部通过,就可以把部署脚本和产品包发布到仓库中
- 然后进行 E2E,也就是进行端对端的测试,一这里也是要准备好所需要的服务器等设施,然后把集成测试所涉及的所有产品都部署到这个环境中再运行测试
- 如果集成测试也是通过的,那么就可以把产品包部署到实际使用环境中
常见的软件交付过程
对于单个项目来说,整个过程大体上是一个典型的瀑布开发过程:
在传统的瀑布开发过程中,开发人员完成整个代码编写工作之后,测试才正式开始启动。在测试阶段,开发人员和测试人员一起进行缺陷修复和系统测试,最后通过测试之后进行上线维护。
在实际开发过程中,会有很多并行项目同时进行,为了避免相互干扰,很多项目都是从主干中拉出分支进行开发:
比如说项目1创建一个新的分支进行开发,在开发期间项目2完成开发合并到主干进行上线。项目1完成开发之后需要先把主干上的程序合并到自己的分支进行联调,联调完成之后进行提测,这个时候测试人员和开发人员一起进行测试和bug的修复。测试通过之后,再把项目1的分支合并到主干进行上线。对于大型项自而言,项目的分支可能很多,这样整个合并的过程就非常的复杂,无法做到快速发布。
持续集成的交付过程
在敏捷开发过程中,测试和开发从一开始就密切合作,要做到持续地集成和交付,需要对前面的过程进行改进。
现在很多互联网公司都是采用主干开发,分支提测的方式,这种方式下所有的开发都在一个主干上进行,然后持续地提交和合并,在达到提测的时候产生分支进行提测,测试通过之后形成上线的版本。这样改进之后,就可以做到持续快速的进行交付。