持续集成概念
一. 软件开发生命周期(Software Development Life Cycle)主要包括以下几个阶段。
分析请求:分析用户请求,才能知道要开发什么样的软件。
设计 :针对用户请求,进行设计软件架构等。
执行:任务分派开始开发。
测试 : 测试软件的功能、代码等。
演变或者维护:发布和后期维护,如补丁更新等。
二. 软件开发中的瀑布开发模型,如下图:
从上图可以看到,开发阶段是按顺序来的。
瀑布模型的劣势:
- 开发生命周期可能持续一年或者更长时间。
- 存在着世大的不确定性
- 不适合那些新特性更新频繁的项目。比如,电子商务项目
- 持续集成的执行都是在开发阶段完成后,往往后面会存在很多问题,尤其针对于大项目而言。
- 没有向后的可追溯性。
- 在不同阶段称量进展是非常困难的,因为开发步骤相当于是线性的。后面肯定无法预估。
瀑布模型的优势:(试用于以下类型的项目)
- 项目的初期布局有很好的文档和非常的固定(很少变动)
- 有足够的金钱去维持管理团队,测试团队,开发团队,构建和释放团队,等。
- 该技术是固定的,没有变动的。
- 没有什么模糊的需求,也是最重要的。需求在需求分析阶段有之外,在其它任何阶段都没有。
三. 敏捷的救援
敏捷意味着快速、简单。 敏捷是开发的一种方法,它是通过组织内各团队合作来完成的。敏捷背后的原则是增量、快速、灵活的软件开发。提升了计划的灵活性。
1. 敏捷模型的12个原则
(1)通过早期有用的软件进行持续交付来达到客户满意度。
(2)适应不断变化的开发需求,甚至在软件开发后期。
(3)软件交付频繁(可能几周或者一个月内)
(4)在企业、人员、开者者之间密切的合作
(5)项目干系人应该是被信任的
(6)面对面的沟通方式是最好的交流方式
(7)正在开发软件是程序测量的标准
(8)可持续的发展,能够保持一个一致的步伐
(9)持续关注卓越的技术和良好的设计
(10)简单
(11)组织内部的团队成员
(12)适应不断变化的环境
2. 敏捷开发工作方式
在敏捷开发进程中,软件被分成多个功能或者模块,这些功能是在迭代中进行持续交付的。每次迭代持续三个礼拜,包括在不同区域同时工作的团队,比如计划,需求分析,设计,代码,单元测试和可接受性测试。
这样的一个结果就是,没有任何人是空闲的。这和瀑布模型是完全不同的,瀑布模型是开发人员在非常忙的时候,测试人员和其它人员都比较空闲。 下图描述了敏捷开发模型。
从上图可以看出,模型像个圈一样,不停的进行迭代。相当于以前工作是串行的,现在是并行的一样。
3. 敏捷开发的优势
- 功能可以被快速的开发和演示。
- 资源请求更少。
- 促进团队合作和交叉训练。
- 适用于那些需求经常改变的项目。
- 简约的文档
- 更少或者没有计划。
- 并行开发:功能开发可以并行来做。
四. CI的元素
1. 版本控制系统
2. 分支策略:GitFlow是另一种使用多个分支管理代码的方式。 如下图所示:
GitFlow完全的架构图如下 :
3. CI 工具
此处使用的是jenkins。 还有其它如Build Forge, Bamboo 和 TeamCity.
4. 自动触发的构建
5. 代码覆盖率测试
代码覆盖的测试方式:
Type of coverage | Description |
Function | The number of function called out of the total number of functions defined |
Statement | The number of statements in the program that are truly called out of the totoal number |
Branches | The number of branches of the control structures executed |
Condition | The number of Boolean sub-expressions that are being tested for a ture and false value |
Line | The number of lines of source code that are being tested out of the total number of lines present inside the code |
代码覆盖率测试工具:
Language | Tools |
Java | Atlassian Clover, Cobertura, JaCoCo |
C#/.NET | OpenCover, dotCover |
C++ | OpenCppCoverage,gcov |
Python | Coverage.py |
Ruby | SimpleCov |
6. 静态代码质量分析
7. 自动化测试
8. 二进制库工具
9. 自动打包
Talent without working hard is nothing.