Skip to content

软件开发流程

简介

软件开发流程即软件设计思路和方法的一般过程,包括对软件先进行需求分析,设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编码和调试、程序联调和测试以及编写、提交程序等一系列操作以满足客户的需求并且解决客户的问题,如果有更高需求,还需要对软件进行维护、升级处理,报废处理。

软件开发流程价值

学习软件开发流程不仅能够提高开发效率和质量,还能增强项目管理、沟通协作、问题解决等多方面的能力。系统性地理解和应用这些流程和方法,对于任何希望在软件开发领域取得成功的专业人员来说,都是不可或缺的。

  • 提高开发效率和质量:理解系统化的开发方法和最佳实践,减少重复劳动和错误。
  • 增强项目管理能力:学习如何有效规划、组织和控制软件开发项目。
  • 适应不同开发模型:了解并适应各种软件开发模型和方法,如瀑布模型、敏捷开发等。
  • 加深对软件工程的理解:系统性学习软件工程的基本原理和方法,打下坚实的理论基础。

基础概念

软件

  • 与计算机系统操作有关的计算机程序、可能有的文件、文档及数据。

todo 截图

软件开发流程的演变

todo 截图

瀑布模型

瀑布模型(Waterfall Model) 是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。

瀑布模型的特点
  • 软件开发的各项活动严格按照线性方式进行
  • 当前活动接受上一项活动的工作结果
  • 当前活动的工作结果需要进行验证

todo 截图

瀑布模型的阶段
  • 需求分析:通过收集用户需求,编写需求文档,明确软件的功能、性能和其他需求,确保开发团队和客户对项目有共同的理解。产出(需求规格说明书SRS)。
  • 设计:根据需求分析阶段产出的需求文档,进行相关的设计文档指导后续的编码工作,确保系统架构和模块设计满足需求。产出(系统设计、详细设计、用户界面设计等)。
  • 编码: 根据设计文档编写代码,完成系统的各个模块和组件的开发。将设计转化为可运行的代码,确保系统的功能实现符合设计要求。在此阶段完成单元测试工作,验证每个代码模块的功能和性能。产出(单元测试文档、代码文档)。
  • 实现:将编码阶段完成的代码模块集成到系统中,保证他们能够协同工作。完成系统的部署,确保所有模块集成和配置正确,系统能够在实际环境中正常运行。在此阶段完成集成测试工作。产出(集成测试文档、系统配置文档等)。
  • 软件测试:该阶段对项目要进行多个维度的测试,全方位发现和修复缺陷,确保软件在交付给用户之前的质量和稳定性。产出(测试计划、测试用例、缺陷报告等)。
  • 完成:测试工作完成后,确保软件能够顺利交付给用户,并提供必要的支持和文档。产出包括(用户使用手册、技术文档、培训材料、部署手册等)。
  • 维护:项目上线后,需维护软件的稳定性和功能,确保软件能够适应新的需求和环境。修复线上发现的缺陷,对线上软件的性能进行优化,以及对版本的更新迭代。产出(维护日志、需求变更说明书等)。
瀑布模型优缺点
  • 优点:
    • 开发的各个阶段比较清晰。
    • 强调早期计划及需求调查。
    • 适合需求稳定的产品开发。
  • 缺点:
    • 由于开发模型是线性的,增加了开发的风险。
    • 早期的错误可能要等到开发后期的阶段才能发现。

敏捷开发模型

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

XP-极限编程

极限编程(ExtremeProgramming,简称XP)是由KentBeck在1996年提出的,是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。如同其他敏捷方法学,极限编程和传统方法学的本质不同在于它更强调可适应性能性以及面临的困难。1996年三月,Kent终于在为DaimlerChrysler所做的一个项目中引入了新的软件开发观念——XP。适用于小团队开发。

todo 截图

  • 编程方法:对开发人员的开发方法做出规定。
    • 简单设计:在代码和设计中只实现当前需要的功能,不做过度设计。
    • 结对编程:两名开发人员共同编写代码,一个人写代码,另一个人同时进行审查。
    • 测试驱动开发:在编写功能代码之前先编写测试代码。确保每个功能都有对应的测试,并且测试覆盖率高。
    • 重构:持续改进代码质量,优化代码结构,消除重复代码,保持代码的清晰和可维护性。
  • 小组实践:从团队合作维度规定工作方法。
    • 代码集体所有:团队成员对所有代码共同负责,任何人都可以修改代码。促进代码共享和团队合作,避免知识孤岛。
    • 编码标准:团队遵循统一的编码规范和最佳实践,确保代码一致性和可维护性。定期进行代码审查,保证代码质量。
    • 稳定高速的步伐:强调在开发过程中保持一致的工作节奏,避免过度劳累和倦怠。这种方法不仅有助于提高生产力,还能确保团队成员的长期健康和积极性。
    • 持续集成:开发人员频繁地将代码集成到主干,并立即进行构建和测试。及时发现和修复集成问题,确保代码库的稳定性。
    • 隐喻:隐喻在XP中是一种沟通工具,用来帮助团队成员和利益相关者理解复杂的系统和概念。通过使用隐喻,可以将复杂的技术概念转化为简单易懂的比喻,促进交流和理解。
  • 交付与管理:确保项目能够按时、高质量地完成,并满足客户需求。
    • 小规模发布:小规模发布是XP的一项重要原则,强调频繁地发布软件的增量版本。通过频繁的、小规模的发布,降低单次发布失败的风险。每次发布后获得用户反馈,及时调整开发方向。
    • 计划游戏:计划游戏是XP中的一个核心实践,用于规划和确定开发工作。它包括两个主要阶段:发布计划和迭代计划。发布计划用于制定总体计划,明确每个发布版本的功能集和交付时间;迭代计划用于制定短期计划,确保每次迭代都能交付可运行的软件增量。
    • 完整的团队:完整的团队是指开发团队应包括所有必要的角色,以确保项目的成功。团队成员应具备多样化的技能,包括开发、测试、设计和客户沟通等。
    • 现场客户:现场客户是指客户或客户代表应作为团队的一部分,持续参与开发过程。现场客户的存在确保团队始终能够获取准确的需求,并在开发过程中获得即时反馈。
SCRUM

Scrum 是迭代式增量软件开发过程,是敏捷方法论中的重要框架之一,通常用于敏捷软件开发。Scrum 包括了一系列实践和预定义角色的过程骨架。Scrum 中的主要角色包括同项目经理类似的 Scrum 主管角色负责维护过程和任务,产品负责人代表利益所有者,开发团队包括了所有开发人员。虽然 Scrum 是为管理软件开发项目而开发的,它同样可以用于运行软件维护团队,或者作为计划管理方法:Scrum of Scrums。

todo 截图

SCRUM循环迭代流程:

  • 产品BACKLOG:产品负责人根据需求和优先级,维护和更新产品待办列表。
  • SPRINT计划会议:团队和产品负责人一起确定本次迭代的目标和待办事项。
  • SPRINT BACKLOG: 制定迭代待办列表。
  • 迭代执行:团队在迭代期间自组织、自管理,完成选定的工作项。
  • 迭代评审:迭代结束时,团队展示完成的工作,收集反馈,调整产品待办列表。
  • 迭代回顾:团队反思迭代过程,讨论成功和不足,提出改进措施。
  • 下一迭代开始:根据反馈和改进措施,开始新一轮的迭代计划和执行。

敏捷模型总结

  • 增量迭代
  • 小步快跑

DevOps

DevOps包含development和operations,是开发和运营维护的总称。软件设计过程中,应对开发部门、运维部门进行协调,确保各项工作流程与方法高效使用,为项目管理工作提供可靠参考。基于devops软件开发源于2009年欧洲传统IT模式,对解决运维管理问题起到关键作用。为巩固软件设计与开发结果,将开发、运维与测试结合一起,形成了DevOps软件开发管理模式。

todo 截图

DevOps 生命周期
  • 持续开发:持续编写和提交代码,确保开发过程的连续性和高效性。
  • 持续测试:在开发过程的每个阶段进行自动化测试,确保代码的质量和性能。
  • 持续集成:频繁将代码集成到共享代码库,通过自动化构建和测试,确保每次集成都能快速验证代码的正确性。
  • 持续部署:自动化部署流程,使代码变更通过自动化测试后,快速部署到生产环境。
  • 持续监控:实时监控系统和应用,收集运行时数据,及时发现和解决问题,确保系统的稳定性和性能。

todo 截图

DevOps 对发布的影响
  • 减少变更范围: 通过减少每次发布的变更范围,降低风险,提高发布的稳定性和可控性。
  • 加强发布协调: 通过改进团队之间的协调和沟通,确保发布过程顺利进行。
  • 自动化:通过自动化工具和流程,提高发布的效率和准确性,减少人为错误。

CI/CD

  • 持续集成(Continuous integration,缩写为 CI)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布自动化测试)来验证,根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
  • 持续交付(Continuous delivery,缩写为CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况。它的目标在于让软件的构建、测试与发布变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

CD 与 DevOps 的关系

  • DevOps 的范围更广,是软件交付过程所涉及的多个团队之间的合作,并且将软件交付的过程自动化。
  • 持续交付是一种自动化交付的手段,关注点在于将不同的过程集中起来,并且更快、更频繁地执行这些过程。
  • DevOps 可以是持续交付下的一个产物,持续交付的成果直接汇入DevOps模型。

总结

  • 软件的定义。
  • 软件开发模型 - 瀑布模型。
  • 软件开发模型 - 敏捷开发模型 - XP。
  • 软件开发模型 - 敏捷开发模型 - SCRUM。
  • 软件开发模型 - DevOps模型。
  • CI/CD 的概念。
  • CD 与 DevOps 的关系。