当前位置: 首页 > 科技观察

软件开发生命周期(SDLC)完整指南

时间:2023-03-20 23:45:16 科技观察

陈军审稿人|孙淑娟软件开发生命周期(SoftwareDevelopmentLifeCycle,SDLC)包括软件从开始到发布的不同阶段。它定义了一个改进软件开发质量和效率的过程。因此,SDLC的目标是用最少的资源交付高质量的软件。为了避免严重的项目失败后果,软件开发的生命周期通常可以分为以下六个阶段:需求收集设计软件开发测试和质量保证部署维护值得注意的是,这些阶段不是静态的,它们可以是进一步细分为子类别,以适应独特的开发需求和流程。图1软件开发生命周期需求收集这是整个周期中其他阶段的基础。在此阶段,所有利益相关者(包括客户、产品所有者等)收集与要开发的软件相关的信息。在这方面,项目经理和相关方经常举行会议。虽然这个过程可能比较耗时,但我们也不要急于求成,毕竟每个人都需要对要开发的产品有一个清晰的认识。涉众需要将收集到的所有信息记录到软件需求规范(SRS)文档中。完成需求收集后,开发团队需要进行可行性研究,以确定项目是否可以完成。设计此阶段旨在模拟软件应用程序的工作方式和设计软件蓝图。负责软件高级设计的开发人员组成设计团队,通过前一阶段生成的SRS文档指导设计过程,最终完成满足要求的架构。这里的高层设计是指包括用户界面、用户流程、通信设计等方面的基本要素。软件开发在此阶段,具有前端和后端等不同专业知识的开发人员或工程师通过处理设计要求来构建和实施软件。这可以由一个人或一个大型团队来执行,具体取决于项目的大小。后端开发人员负责构建数据库结构和其他必要的组件。最后,前端开发人员根据设计构建用户界面,并根据需要与后端进行连接。在支持文档方面,创建了用户指南,并在源代码中留下了适当的注释。也就是说,适当的开发指南和政策对于确保良好的代码质量也是必不可少的。测试专门的测试人员配合开发团队进行这一阶段的测试工作。测试可以与开发同时进行,也可以在开发阶段结束时进行。通常,开发人员在开发软件时会进行单元测试,以检查每个源代码单元是否按预期工作。同时,该阶段还包括以下其他测试:系统测试——测试系统以验证其是否满足所有规定的要求。集成测试——将各个模块组合在一起进行测试。测试团队通过单击按钮并执行滚动和滑动操作与软件进行交互。当然,他们不需要了解后端是如何工作的。用户验收测试-是在启动软件之前邀请潜在用户或客户进行的最终测试。这种类型的测试可以验证目标软件是否可以根据要求的规范处理各种现实世界的场景。测试对于软件开发生命周期至关重要。如果没有以正确的方式完成,软件项目团队将在开发和测试阶段之间反复折腾,这反过来又会影响成本和时间。部署完成并通过测试后,我们需要对软件进行部署,方便用户使用。在此阶段,部署团队需要遵循几个流程以确保部署过程的成功。无论是简单的流程还是复杂的部署,都会涉及到创建安装指南、系统使用指南等相关部署文档。维护作为开发周期的最后阶段,维护涉及报告和修复在测试期间未发现的错误。在修复方式上,我们既可以立即修复错误,也可以作为定期软件更新。此外,软件项目组也会在这个阶段收集用户的反馈意见,协助软件的改进,提升用户的软件体验。SDLC方法尽管SDLC通常遵循上述步骤,但它们的实施方式略有不同。下面,我将介绍前6大SDLC方法:瀑布法敏捷精益迭代螺旋DevOps方法瀑布法图2瀑布法作为最古老、最直接的SDLC方法,瀑布法遵循线性执行顺序。如上图所示,从需求收集到维护,是一步步推进的,没有逆向或倒退的步骤。也就是说,只有完成了上一步,才能继续下一步。由于在设计阶段之后这种方法没有任何更改或调整的余地,我们需要在需求收集阶段收集有关项目的所有信息,即制作软件蓝图。由此可见,对于经验不足的开发团队,如果从项目一开始就能够保证软件的需求准确稳定,可以采用瀑布法。也就是说,瀑布模型的成功很大程度上取决于需求收集阶段的输出是否清晰。当然,它也更适合那些耗时较长的项目。瀑布的优势需求可以在初期精心设计。具有易于理解的线性结构。易于管理。Waterfall的缺点是它既不灵活也不支持变化。任何阶段的任何延迟都将阻止项目向前推进。由于刚性,整体项目时间比较长。不鼓励在初始阶段之后积极与利益相关者进行沟通。敏捷方法图3敏捷方法生命周期敏捷是快速、轻松地移动的能力。以沟通和灵活性为中心的敏捷原则和方法提倡更短的周期和增量部署和发布。在敏捷开发生命周期中,每个阶段都有一个“仪式”来获得开发团队和参与项目的其他利益相关者的反馈。这些包括:冲刺计划、每日站会、冲刺回顾和冲刺回顾。一般来说,敏捷开发是以“冲刺”的形式进行的,每次冲刺通常持续约2到4周。每个sprint的目标不一定是构建一个MVP(MinimumViableProduct,最小可行产品),而是构建一个可以被客户使用的小软件。它可能提供一个功能而不是一个功能齐全的产品。换句话说,可交付成果可能只是一个功能性服务,可以在未来慢慢添加,不一定是MVP。图4构建最小可行产品的示例。在每个冲刺结束时,在冲刺评审阶段,如果利益相关者对开发的功能感到满意,则下一个冲刺可以继续进行。虽然新功能是在冲刺中开发的,但在项目持续时间内冲刺的次数没有限制。它通常取决于项目和团队的规模。因此,敏捷方法最适用于并非所有需求从一开始就明确的项目。敏捷的优势在于适应不断变化的需求。鼓励利益相关者之间的反馈和持续沟通。由于采用增量方法,因此更容易管理各种潜在风险。敏捷的缺点是文档数量最少。需要高技能的资源。如果沟通无效,它会减慢项目的速度。如果您过分依赖客户互动,可能会导致项目朝着错误的方向发展。精益方法软件开发领域的精益方法源自精益制造的原则。这种方法旨在减少生产过程中的浪费和成本,从而实现利润最大化。该方法类似于敏捷开发,但侧重于效率、快速交付和迭代开发。不同的是,敏捷方法更侧重于持续的沟通和协作来体现价值;而精益方法更侧重于消除浪费以创造客户价值。精益方法论的七个核心概念:消除浪费——鼓励开发团队尽可能多地消除浪费。这种方法在某种程度上不鼓励多任务处理。这意味着它只需完成其“共享”的处理,并通过节省构建所谓的“锦上添花”功能来节省时间。同时,在所有开发阶段都避免了不必要的文档和会议。鼓励学习——通过鼓励为所有相关成员创建有利于学习的环境,促进团队对软件开发过程的反馈。推迟决定-在做出决定之前应仔细考虑各种事实。尽快交付-由于交付是基于时间的,因此它侧重于满足交付期限的增量交付,而不是疯狂发布。团队授权——它避免了团队的微观管理,而是鼓励积极参与决策过程,让彼此感觉参与了重要的项目。它不仅为团队成员提供了方向,也为失败留下了足够的空间。构建质量-由于在开发周期的所有阶段都关注客户价值,它会定期进行质量保证测试。整体优化-通过关注整个项目而不是单个项目模块,有效地使组织战略与项目提案保持一致。精益方法的优点因为团队参与决策,激发了创造力。及早消除浪费、降低成本和加快交付的能力。精益方法的缺点它不一定是纪律较差的团队的最佳选择。项目目标和优先级可能会受到许多灵活性的影响。迭代方法图5迭代开发模型开发社区中引入了迭代方法作为瀑布模型的替代方法。它通过添加迭代和重复的开发周期来克隆瀑布方法的所有步骤。这种方法也是增量的,因为最终产品的一部分在每次迭代结束时发布,因为它们已完成。具体来说,迭代方法的初始阶段是规划,最后阶段是部署。介于两者之间:规划、设计、实施、测试和评估的迭代过程。迭代方法类似于敏捷方法,但涉及较少的客户参与,并且具有预定义的增量范围。迭代的优点是它可以在早期阶段生成产品的工作版本。它的变化成本较低。由于产品被分成更小的部分,因此更容易管理。迭代的缺点可能需要更多的资源。需要对需求有一个全面的了解。不适合小型项目。作为一种具有风险意识的软件开发方法,螺旋法着重于降低软件开发过程中的各种风险。它是一种迭代开发方法,循环推进。由于瀑布模型和原型制作的结合,螺旋方法是最灵活的SDLC方法,主要有以下四个阶段:第1阶段-定义项目目标并收集需求。第二阶段-该方法的核心是全面的风险分析和计划,以减轻已识别的风险。产品原型在此阶段交付。阶段3-执行开发和测试。阶段4-涉及评估已开发的内容并计划下一次迭代。螺旋法主要适用于高度定制化的软件开发。此外,用户对原型的反馈可以在迭代后期(开发阶段)扩展功能。螺旋式方法的优点在于,由于引入了广泛的风险分析,因此尽可能避免了风险。它适用于较大的项目。可以在迭代后期添加其他功能。螺旋式方法的缺点它更侧重于成本效益。它比其他SDLC方法更复杂。它需要专家风险分析。由于严重依赖风险分析,不这样做可能会使整个项目变得脆弱。DevOpsMethodology图6DevOpsMethodology在传统的软件开发方法中,开发人员和运维人员之间的协作很少。尤其是在运营中,开发人员往往被视为“建设者”的角色。这会在沟通和协作方面造成差距,并在反馈过程中造成混乱。软件开发的DevOps方法恰好弥合了两者之间的沟通鸿沟。其目标是通过有效结合开发和运营团队,快速开发更可靠、高质量的软件。值得一提的是,DevOps也是一种将手工开发转化为自动化软件开发的方法。通常,DevOps方法分为以下五个阶段:持续开发——这个阶段涉及软件应用程序的规划和开发。持续集成-此阶段将新功能代码与现有代码集成。持续测试-开发团队和QA测试人员将使用自动化工具(如maven和TestNG)进行测试,以确保在新功能中清除缺陷。自动化测试为各种测试用例的执行节省了大量时间。持续部署——在这个阶段,将使用puppet和容器化工具等配置管理工具将代码部署到生产环境(即服务器上)。他们还将协助安排服务器上的更新并保持配置一致。持续监控——运营团队在此阶段通过使用Nagios、Relix和Splunk等工具主动监控用户活动是否存在错误、异常、不当软件行为和软件性能。在此阶段发现的所有问题都会传递给开发团队,在持续开发阶段进行修复,以提高软件质量。DevOps的好处是促进协作。通过持续开发和部署,更快地将软件推向市场。充分利用Relix。DevOps的缺点当不同的团队使用不同的环境时,就没有办法保证软件的安全。当涉及到手动输入的过程时,它会减慢整体操作。总结综上所述,软件开发生命周期中的每个阶段都非常重要。只有正确执行每个步骤,我们才能最大限度地利用可用资源并交付高质量、可靠的软件。事实上,软件开发没有所谓的“最佳”方法,它们往往各有优缺点。因此,在选择具体的方法之前,需要了解手头的方法对于手头项目的实用性。当然,为了尽可能采用最适合现有流程的方法,很多公司会同时使用两种不同方法的组合,通过取长补短实现有效整合,取长补短,完成软件交付任务。译者简介JulianChen,社区编辑,拥有十余年IT项目实施经验,擅长管控内外部资源和风险,专注传播网络与信息安全方面的知识和经验;以多种形式分享前沿技术和新知识;经常在线上和线下开展信息安全培训和讲座。原标题:SDLC完整指南,作者:MarioOlomu