课件

15.1 软件部署与交付.pdf

项目交付工作

当开发进入尾声的时候,也随着高涨起来,这个时候的主要问题是如何把项目顺利地进行交付。对于客户委托开发的软件项目,项目的验收和交付工作主要包括:实施培训验收三个部分。验收之后系统就正式进入维护阶段

项目实施

项目实施的任务是把软件系统部署到客户的计算机系统上,并且协助客户准备好基础数据,使软件系统能够顺利地上线运行。

  1. 首先全面做好测试工作(集成测试、功能测试、性能测试),保证软件系统的质量符合上线要求。
  2. 在实施之前要制定工作计划,确定要发布的代码版本、数据库创建的方式和基础数据的准备。
  3. 准备好程序代码和相关文档(如需求说明书、设计文档等)

客户培训

在系统部署完成之后,还要组织客户培训,使其掌握软件系统的使用和操作。

培训工作包括:

  • 选择合适的人员(经验丰富、了解业务和系统)
  • 准备培训内容
  • 制定培训的计划,与客户沟通协调,安排时间

项目验收

客户对系统进行验收测试,检查用户需求是否实现以及软件的质量是否满足要求。在验收通过之后,客户将签署验收报告,整个项目正式完成。

软件部署定义

软件部署是软件开发的一个重要环节,它是通过配置、安装和激活等一系列活动来保证软件制品的投入运行。部署的技术会影响整个软件的运行效率和投入成本。软件配置过程也会极大地影响软件部署结果的正确性。

软件部署作用

软件部署需要保障软件系统的正常运行,并且使用有效手段提高部署的效率。即:

  • 要提高软件部署的通用性和灵活性,使其能够适用于更为广泛的软件类型和应用场景。
  • 要加强软件部署的可靠性和正确性,实现软件系统的正确配置、优化系统性能。
  • 要提高软件部署的自动化程度,尽量减少人工参与,避免人工操作带来的错误

软件部署模式

不同的软件系统具有不同的部署模式。

面向单机软件的部署模式

包括安装、配置和卸载,该部署模式主要适用于运行在操作系统之上的单机类型的软件,主要的活动包括打包、安装、更新、激活。

集中式服务器应用部署

对于客户基于服务器结构的系统,一种方式是集中式的服务器应用部署,主要适合于小规模(500人以下)用户群的应用环境,一般情况下,这种系统只有一台或几台单独的服务器,每个服务器承担独立的任务,比如说 Web 服务器、邮件服务器、数据库服务器等:
CleanShot 2022-05-14 at 8 PM.02.08@2x.png

集群式服务器应用部署

另一种方式是集群式的服务器应用部署,主要适用于并发用户访问量大(10000以上)、而且对系统稳定性和性能要求很高的分布式平台,在这种模式下不同的服务器职能是由若干服务器集群来实现,通过负载平衡把任务分配到集群中的每一台机器上:
CleanShot 2022-05-14 at 8 PM.05.07@2x.png

持续集成与交付

在互联网环境下,Web 应用系统的开发主要是采用敏捷开发方法,强调持续集成和快速交付。所谓持续集成就是开发小组经常集成自己的工作,通常每人每天至少集成一次,每一次集成都通过自动化的构建来完成。
CleanShot 2022-05-14 at 8 PM.10.01@2x.png

持续交付是在持续集成的基础上实现的,它是以自动化或者半自动化的方式,把构建的版本从开发环境推送到接近实际使用的交付准备环境中。例如像 flickr 系统,大概一周会平均部署几十次,几乎每一个开发人员的每一次修改就会导致一次部署,这样做可以快速地获得用户的反馈,更好地适应需求的变化。

下图是单个产品的构建流水线,从开发人员提交修改到源代码库开始,后续的所有步骤都是由构建流水线自动来完成:
CleanShot 2022-05-14 at 8 PM.13.44@2x.png

  • 首先是 package 打包阶段,把应用准备好到能够在实际的环境中进行部署的程度
  • 打包之后,可以把产品包部署到一个 staging,也就是预演环境下,准备进行功能测试,这里要求准备一个干净的预演环境
  • 在环境部署好之后,对环境中的产品运行功能测试脚本,如果测试全部通过,就可以把部署脚本和产品包发布到仓库中
  • 然后进行 E2E,也就是进行端对端的测试,一这里也是要准备好所需要的服务器等设施,然后把集成测试所涉及的所有产品都部署到这个环境中再运行测试
  • 如果集成测试也是通过的,那么就可以把产品包部署到实际使用环境中

常见的软件交付过程

对于单个项目来说,整个过程大体上是一个典型的瀑布开发过程:
CleanShot 2022-05-14 at 8 PM.37.47@2x.png
在传统的瀑布开发过程中,开发人员完成整个代码编写工作之后,测试才正式开始启动。在测试阶段,开发人员和测试人员一起进行缺陷修复和系统测试,最后通过测试之后进行上线维护。

在实际开发过程中,会有很多并行项目同时进行,为了避免相互干扰,很多项目都是从主干中拉出分支进行开发:
CleanShot 2022-05-14 at 8 PM.39.29@2x.png
比如说项目1创建一个新的分支进行开发,在开发期间项目2完成开发合并到主干进行上线。项目1完成开发之后需要先把主干上的程序合并到自己的分支进行联调,联调完成之后进行提测,这个时候测试人员和开发人员一起进行测试和bug的修复。测试通过之后,再把项目1的分支合并到主干进行上线。对于大型项自而言,项目的分支可能很多,这样整个合并的过程就非常的复杂,无法做到快速发布。

持续集成的交付过程

在敏捷开发过程中,测试和开发从一开始就密切合作,要做到持续地集成和交付,需要对前面的过程进行改进。
CleanShot 2022-05-14 at 8 PM.44.32@2x.png
现在很多互联网公司都是采用主干开发,分支提测的方式,这种方式下所有的开发都在一个主干上进行,然后持续地提交和合并,在达到提测的时候产生分支进行提测,测试通过之后形成上线的版本。这样改进之后,就可以做到持续快速的进行交付。