当前课程知识点:软件工程 > 第14章 软件交付与维护 > 14.1 软件部署与交付 > 讲课视频
当开发进入尾声的时候
项目组的气氛
也随着高涨起来
这个时候的主要问题
是如何把项目顺利地进行交付
对于客户委托开发的软件项目
项目的验收和交付工作
主要包括 实施
培训和验收三个部分
验收之后
系统就正式进入维护阶段
项目实施的任务
是把软件系统
部署到客户的计算机系统上
并且协助客户准备好基础数据
使软件系统能够顺利地上线运行
首先 要做好系统的测试
保证软件系统的质量
符合上线要求
在实施之前要制定工作计划
确定要发布的代码版本
数据库创建的方式
和基础数据的准备
另外
还要准备好程序代码
和相关文档
在系统部署完成之后
还要组织客户培训
使其掌握软件系统的使用
和操作
培训工作包括选择合适的人员
准备培训内容
以及制定培训的计划
最后
客户对系统进行验收测试
检查用户需求是否实现
以及软件的质量是否满足要求
在验收通过之后
客户将签署验收报告
整个项目正式完成
软件部署
是软件开发的一个重要环节
它是通过配置
安装和激活等一系列活动
来保证软件制品的投入运行
部署的技术
会影响整个软件的运行效率
和投入成本
软件配置过程也会极大地影响
软件部署结果的正确性
软件部署
需要保障软件系统的正常运行
并且使用有效手段
提高部署的效率
具体说来
就是要提高软件部署的通用性
和灵活性
使其能够适用于
更为广泛的软件类型
和应用场景
要加强软件部署的可靠性
和正确性
实现软件系统的正确配置
优化系统性能
要提高软件部署的自动化程度
尽量减少人工参与
避免人工操作带来的错误
不同的软件系统
具有不同的部署模式
对于像类似Windows
这种单机软件来说
它的署模式就是一般的
安装和更新过程
主要包括打包 安装 更新 激活
对于客户基于服务器结构的系统
一种方式
是集中式的服务器应用部署
主要适合于小规模用户群的
应用环境
一般情况下
这种系统只有一台
或几台单独的服务器
每个服务器承担独立的任务
比如说 Web服务器
邮件服务器 数据库服务器等
另一种方式
是集群式的服务器应用部署
主要适用于并发用户访问量大
而且对系统稳定性和性能
要求很高的分布式平台
在这种模式下
不同的服务器职能
是由若干服务器机群来实现
通过负载平衡
把任务分配到集群中的
每一台机器上
在互联网环境下
Web应用系统的开发
主要是采用敏捷开发方法
强调持续集成和快速交付
所谓持续集成
就是开发小组
经常集成自己的工作
通常每人每天至少集成一次
每一次集成
都通过自动化的构建来完成
持续交付
是在持续集成的基础上实现的
它是以自动化
或者半自动化的方式
把构建的版本从开发环境推送到
接近实际使用的交付准备环境中
例如像flickr系统
大概一周会平均部署几十次
几乎每一个开发人员的
每一次修改就会导致一次部署
这样做可以快速地获得用户的反馈
更好地适应需求的变化
这里显示的
是单个产品的构建流水线
从开发人员提交修改
到源代码库开始
后续的所有步骤
都是由构建流水线自动来完成
首先是package打包阶段
它把应用准备好
到能够在实际的环境中
进行部署这样的程度
打包之后
可以把产品包部署到一个staging
也就是预演环境下
准备进行功能测试
这里要求
准备一个干净的预演环境
在环境部署好之后
对环境中的产品
运行功能测试脚本
如果测试全部通过
就可以把部署脚本和产品包
发布到仓库中
然后进行E2E
也就是进行端对端的测试
这里也是要准备好
所需要的服务器等设施
然后把集成测试
所涉及的所有产品
都部署到这个环境中
再运行测试
如果集成测试也是通过的
那么就可以把产品包
部署到实际使用环境中
在传统的瀑布开发过程中
开发人员
完成整个代码编写工作之后
测试才正式开始启动
在测试阶段
开发人员和测试人员
一起进行缺陷修复和系统测试
最后通过测试之后
进行上线维护
在实际开发过程中
会有很多并行项目同时进行
为了避免相互干扰
很多项目都是从主干中
拉出分支进行开发
比如说
项目1创建一个新的分支
进行开发
在开发期间
项目2完成开发
合并到主干进行上线
项目1完成开发之后
需要先把主干上的程序
合并到自己的分支进行联调
联调完成之后进行提测
这个时候测试人员和开发人员
一起进行测试和bug的修复
测试通过之后
再把项目1的分支
合并到主干进行上线
显然 对于大型项目而言
项目的分支可能很多
这样整个合并的过程
就非常的复杂
无法做到快速发布
在敏捷开发过程中
测试和开发
从一开始就密切合作
要做到持续地集成和交付
需要对前面的过程进行改进
现在很多互联网公司
都是采用主干开发
分支提测的方式
这种方式下所有的开发
都在一个主干上进行
然后持续地提交和合并
在达到提测的时候
产生分支进行提测
测试通过之后形成上线的版本
这样改进之后
就可以做到持续快速的进行交付
-1.1 软件无处不在
--讲课视频
-1.2 软件的本质特性
--讲授视频
-1.3 软件工程的产生与发展
--讲授视频
-1.4 软件工程的基本概念
--讲授视频
-1.5 软件质量实现
--讲授视频
-1.6 业界人士谈软件工程
-测验题--作业
-讨论题
--讨论题
-作业题
--第一张 作业题
-2.1 编程过程与规范
--讲课视频
-2.2 良好的编程实践
--讲课视频
-2.3 Python集成开发环境
--讲课视频
-2.4 代码静态检查
--讲课视频
-2.5 代码性能分析
--讲课视频
-2.6 结对编程实践
--讲课视频
-2.7 刘贺谈软件工程
--讲课视频
--讨论
-测验题--作业
-作业题
--第二章 作业题
-3.1 单元测试概述
--讲课视频
-3.2 黑盒测试方法
--黑盒测试方法
-3.3 白盒测试方法
--基本概念
--代码覆盖标准
--基本路径测试
-3.4 单元测试工具
--单元测试工具
--html
-测验题--作业
-作业题
--第三章 作业题
--作业题附件
-4.1 软件过程
--讲课视频
-4.2 软件过程模型
--讲课视频
-4.3 敏捷开发过程
--讲课视频
-4.4 微软公司开发过程
--邹欣经理自我介绍
--微软开发过程之一
--微软开发过程之二
-测验题--作业
-5.1 团队组织与管理
--讲课视频
-5.2 项目沟通管理
--讲课视频
-5.3 软件项目计划
--讲课视频
-5.4 软件项目估算
--讲课视频
-测验题--作业
-讨论题
--讨论
-6.1 敏捷开发之Scrum
-- 敏捷开发之Scrum
--html
-6.2 用户故事与估算
--讲课视频
-6.3 团队协作工具Tower
-6.4 配置管理
--讲课视频
-6.5 配置管理工具Git
--讲课视频
-测验题--作业
-作业题--作业
-7.1 需求工程师
--讲课视频
-7.2 需求定义
--讲课视频
-7.3 需求的类型
--讲课视频
--讲课视频(2)
-7.4 需求工程过程
--讲课视频
-7.5 需求的主要来源
--讲课视频
-7.6 需求获取技术
--讲课视频
--讲课视频二
--讲课视频三
-7.7 撰写需求文档
--讲课视频
-测验题--作业
-讨论题
--讨论
-8.1 用例建模概念
--讲课视频
-8.2 用例建模过程
--讲课视频
-8.3 用例建模精讲
--讲课视频
-8.4 建模工具介绍
--讲课视频
-8.5 微信抢票应用案例
--讲课视频
-测验题--作业
-讨论题
--讨论
-9.1 面向对象分析
--讲课视频
-9.2 CRC卡片分拣法
--讲课视频-1
--讲课视频-2
-9.3 面向对象设计
--讲课视频-1
--讲课视频-2
-9.4 类图建模
--讲课视频-1
--讲课视频-2
-第9章 面向对象分析与设计--测验题
-讨论题
--讨论
-10.1 顺序图概念
--讲课视频
-10.2 顺序图建模
--讲课视频
-10.3 顺序图风格
--讲义视频
-10.4 状态建模
--讲课视频
-10.5 状态图
--讲课视频
-10.6 状态图精讲
--讲义视频
-测验题--作业
-讨论题
--讨论
-11.1 软件体系结构概念
--讲授视频
-11.2 软件设计原则
--讲授视频
-11.3 软件体系结构风格(一)
--讲授视频
-11.4 软件体系结构风格(二)
--讲授视频
-11.5 软件体系结构风格(三)
--讲授视频
-11.6 软件设计过程
--讲授视频
-11.7 Web系统架构设计
--讲授视频
-11.8 数据库选择策略
--讲授视频
-测验题--作业
-作业题
--html
--html
--html
-作业题--作业
-12.1 交互设计概述
--讲授视频
-12.2 交互设计目标
--讲授视频
-12.3 GUI设计原则
--讲课视频
-12.4 KLM效率模型
--Video
-12.5 Fitts定律
--讲授视频
-12.6 交互设计过程
--讲授视频
-测验题--作业
-13.1 软件测试概念
--讲课视频
-13.2 软件测试类型
--讲课视频
-13.3 软件功能测试
--讲课视频
-13.4 软件性能测试
--讲课视频
-测验题--作业
-14.1 软件部署与交付
--讲课视频
-14.2 软件演化与维护
--讲课视频
-测验题--作业
-第一部分:基础知识
-第二部分:编程与测试(选做)