项目部署之持续集成

1. 什么是持续集成

持续集成(Continuous integration, 简称CI)指的是,频繁地(一天多次)将代码集成到主干。

持续集成的组成要素

一个自动构建过程, 从检出代码、 编译构建、 运行测试、 结果记录、 测试统计等都是自动完成的, 无需人工干预。

一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般使用SVN或Git。

一个持续集成服务器,Jenkins就是一个配置简单和使用方便的持续集成服务器。

2. 持续集成的好处

  • 降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少;
  • 对系统健康持续检查,减少发布风险带来的问题;
  • 减少重复性工作;
  • 持续部署,提供可部署单元包;
  • 持续交付可供使用的版本;
  • 增强团队信心;

3. 软件开发生命周期

软件开发生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划、开发、测试和部署过程的集合。如下图所示 :

  • 需求分析

    这是生命周期的第一阶段,根据项目需求,团队执行一个可行性计划的分析。项目需求可能是公司内部或者客户提出的。这阶段主要是对信息的收集,也有可能是对现有项目的改善和重新做一个新的项目。还要分析项目的预算多长,可以从哪方面受益及布局,这也是项目创建的目标。

  • 设计

    第二阶段就是设计阶段,系统架构和满意状态(就是要做成什么样子,有什么功能),和创建一个项目计划。计划可以使用图表,布局设计或者文字的方式呈现。

  • 实现

    第三阶段就是实现阶段,项目经理创建和分配工作给开者,开发者根据任务和在设计阶段定义的目标进行开发代码。依据项目的大小和复杂程度,可以需要数月或更长时间才能完成。

  • 测试

    测试人员进行代码测试 ,包括功能测试、代码测试、压力测试等。

  • 进化

    最后进阶段就是对产品不断的进化改进和维护阶段,根据用户的使用情况,可能需要对某功能进行修改,bug修复,功能增加等。

4. 软件开发瀑布模型

瀑布模型是最著名和最常使用的软件开发模型。瀑布模型就是一系列的软件开发过程。它是由制造业繁衍出来的。一个高度化的结构流程在一个方向上流动,有点像生产线一样。在瀑布模型创建之初,没有其它开发的模型,有很多东西全靠开发人员去猜测,去开发。这样的模型仅适用于那些简单的软件开发, 但是已经不适合现在的开发了。

下图对软件开发模型的一个阐述。

优势 劣势
简单易用和理解 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
当前一阶段完成后,您只需要去关注后续阶段。 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
为项目提供了按阶段划分的检查节点 瀑布模型的突出缺点是不适应用户需求的变化。

5. 软件的敏捷开发

  • 什么是敏捷开发?

    敏捷开发(Agile Development) 的核心是迭代开发(Iterative Development) 与增量开发(Incremental Development)。

    一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

  • 何为迭代开发?

    对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次"大开发";迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次"大开发"变成多次"小开发",每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。

    每次只设计和实现这个产品的一部分, 逐步逐步完成的方法叫迭代开发, 每次设计和实现一个阶段叫做一个迭代。在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(比如一个月)的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。

  • 何为增量开发?

    软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。

    举例来说,房产公司开发一个10栋楼的小区。如果采用增量开发的模式,该公司第一个迭代就是交付一号楼,第二个迭代交付二号楼...每个迭代都是完成一栋完整的楼。而不是第一个迭代挖好10栋楼的地基,第二个迭代建好每栋楼的骨架,第三个迭代架设屋顶...

  • 敏捷开发如何迭代?

    虽然敏捷开发将软件开发分成多个迭代,但是也要求,每次迭代都是一个完整的软件开发周期,必须按照软件工程的方法论,进行正规的流程管理。

6. 敏捷开发的好处

  • 早期交付

    敏捷开发的第一个好处,就是早期交付,从而大大降低成本。 还是以上一节的房产公司为例,如果按照传统的"瀑布开发模式",先挖10栋楼的地基、再盖骨架、然后架设屋顶,每个阶段都等到前一个阶段完成后开始,可能需要两年才能一次性交付10栋楼。也就是说,如果不考虑预售,该项目必须等到两年后才能回款。 敏捷开发是六个月后交付一号楼,后面每两个月交付一栋楼。因此,半年就能回款10%,后面每个月都会有现金流,资金压力就大大减轻了。

  • 降低产品开发风险

    敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。 请想一想,哪一种情况损失比较小:10栋楼都造好以后,才发现卖不出去,还是造好第一栋楼,就发现卖不出去,从而改进或停建后面9栋楼?

  • 持续的测试和集成

    每个迭代的敏捷开发,我们都会去不断的来做两件事情,一件就是增加新的功能,另一件就是更改变化的功能需求。新的功能或需求变化总是尽可能频繁地被整合到产品中。有些是在每个迭代周期结束的时候集成, 有些则每天都在这么做。所以,我们在每个迭代的敏捷开发中,都要不断的进行持续的测试和集成工作,以达到给客户交付一个满意,可用的产品。

  • 满足用户不断变化的需求

    满足用户不断变化的需求是软件开发的长期无法解决的难题之一,经典的瀑布模式在一个迭代周期内表现优异,但一旦需求变化,瀑布模式却显得无能为力。敏捷方法满足需求的办法主要通过迭代。在每一次迭代周期结束时,都能交付用户一个可用的、可部署的系统,用户使用并体验该系统并反馈意见,在随后的迭代周期这些意见和需求的其他变化一起在产品中实现和集成。

  • 得到早期用户反馈

    每次迭代周期应尽可能短,以便能及时地处理需求变化和用户反馈。客户反馈的越早,越有助于在下个迭代的敏捷开发中,对客户反馈的意见进行修改。经过几个迭代对用户反馈的修改开发工作,使系统更加趋于完美。

​ 综上所述,敏捷开发和迭代开发相结合的项目开发方式,给我们项目管理带来的好处多多。也是我长期通过项目开实践,在不断学习和总结的中觉得最佳的项目开发方式之一。它对项目成败和最终结果起到决定性因素。因为我觉得它的思想精髓本身就值得我们采用它,它强调的是持续改进,不断完善。这相对于经典的瀑布式开发来说是无法比拟的,经典的瀑布模式虽然在一个迭代周期内表现优异,但一旦需求变化,瀑布模式却显得无能为力。瀑布模式通常会在产品起点与最终结果之间规划出一条直线,然后沿着直线不断往前走。然而当项目到达终点时,用户通常会发现那已经不是他们想要的东西。而敏捷方法则采用小步快跑,每走完一步再调整并为下一步确定方向,直到真正的终点。迭代式和敏捷开发方式的结合,既保证了产品的质量又在项目产品的持续改进中具有一定的优势。吸取精华,破其糟粕,只有这样,项目才会达到趋于完美的程度。

相关推荐
xcl092528 分钟前
北京24小时自助健身房系统软件开发实战:从架构到部署全流程指南
java·spring boot·架构
一 乐2 小时前
动漫书销售商城|基于springboot + vue动漫书销售商城(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
卓怡学长2 小时前
w214基于jsp知道特产网
java·intellij-idea
步行cgn3 小时前
Spring 注解使用详解
java·spring
一条小小yu3 小时前
Spring IoC的理解
java·后端·spring
落魄实习生3 小时前
Agent Scope Java 2.x 系列【7】工具使用
java·开发语言·ai
旺仔学长 哈哈3 小时前
springboot钓鱼爱好者交流平台APP设计与实现
java·spring boot·mysql·充电桩管理系统
自强的小白5 小时前
核心功能(Service接口)
java·mybatis
乌暮6 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习