软件开发生命周期 (SDLC) 是软件行业创建新软件的过程。这种方法确保软件开发人员能够在最短的时间内构建出高质量、具有竞争力的产品。
SDLC 涵盖了多个阶段,如规划、编写、测试和维护代码。软件工程师遵循软件开发生命周期来构思和开发适用于多种平台的软件应用程序,包括笔记本电脑和台式计算机、云基础设施、移动设备、视频游戏系统、自助服务终端及其他技术平台。“生命周期”这一概念最初在20世纪50年代被提出,用以描述创建新计算机系统的各个阶段。然而,它现在已被广泛用于涵盖软件生产的所有阶段。
尽管本书关注的是 DevOps 发布管理,但首先了解软件开发生命周期、它与发布管理的关系,以及两者在整体项目管理中的定位是至关重要的。简而言之,SDLC 是项目管理工具箱中的一个强大工具。它提高了团队每个人的关注点和效率,从而最大化他们的生产力。
在本章中,你将学习以下内容:
- SDLC 的定义
- SDLC 的七个阶段
- SDLC 与其他生命周期管理方法的对比
定义 SDLC 并分析其七个阶段
SDLC 是开发团队用于以最佳成本效益生产高质量软件的系统方法。其主要目标是降低风险,并确保所开发的软件超越客户的期望。使用此方法,您将首先创建一个全面的策略来指导产品开发,然后将其分解为更易管理的组件,这些组件可以被安排、完成和衡量。
SDLC 可以理解为一个概念框架,它概述了所选择的方法所涵盖的各个阶段,而不是一种方法本身。也就是说,SDLC 过程在不同的团队和产品之间表现出不同的变体。然而,值得注意的是,大多数常见的 SDLC 模型通常共享许多相同的阶段,这些阶段包括规划与分析、设计、构建、测试、实施以及维护/支持。
1. 规划与分析
SDLC 的第一个阶段是项目规划阶段,在此阶段,你需要从客户和利益相关者处收集业务需求。此阶段的主要目标是帮助你定义客户面临的根本问题并找到适当的解决方案。规划阶段有助于识别开发新系统所需的关键组件,从而通过一个有计划且系统的方法来满足项目需求。分析阶段则让你在开始新的软件开发工作之前获取必要的资源。在这个阶段,会对成功完成项目所需的资源、成本和时间进行估算。
为了有效地确定生产范围、优先安排生产项目并建立开发节奏,业务分析师会与客户沟通以收集需求,确定目标受众,并咨询行业专家。所有这些都是为了制定一份全面的业务规范 (BS) 文档。该文档在不同的组织和团队中可能被称为客户需求规范 (CRS)。虽然创建 BS 文档被视为良好实践,但有些开发团队可能会选择不使用,转而采用更不正式的方法,正如你即将了解的那样。
BS 文档的目标是列出当前存在的客户问题,以便程序员可以通过软件来解决这些问题。它是帮助团队以创新思维提升产品的有价值工具。一旦确定软件项目符合业务和利益相关者的目标、可行且能满足用户需求,你就可以将该文档交给开发团队。
2. 定义需求
这个阶段的意义在于将你在规划与分析阶段获得的数据转化为开发团队成员的明确需求。定义需求有助于创建许多重要文档,包括软件需求规范 (SRS)、用例文档以及需求可追溯矩阵文档(如有必要)。
根据业务规范文档,开发团队的高级成员会与利益相关者和专家合作,规划软件开发项目。该项目可能涉及开发新软件产品或改进现有产品。在这个早期阶段识别潜在问题至关重要。如果发现问题,经理和开发人员会提出各种解决方案,并对这些解决方案进行分析,以确定最优选项。
在开发的初期阶段,团队成员将合作制定与以下内容相关的详细计划:
- 项目的意图
- 项目的需求
- 预期问题
- 机会
- 风险
这个阶段的主要目标是准确确定项目的功能需求。进行这些必要的分析,确保最终交付的产品符合客户的具体要求和期望,并包括必须采取的主动措施,以确保满足客户的需求和偏好。
简而言之,SDLC 的这一阶段被用作全面的技术蓝图,客户在此阶段表达他们对项目的期望、需求和要求。通过定义所有这些元素,你可以确保在设计和开发过程中,软件项目的所有元素都得到了公平的考虑。
3. 设计
设计阶段是将想法转化为具体形式的阶段。在此阶段,初步的策略和愿景会进一步开发,并记录在软件设计文档 (SDD) 中,定义了系统架构、编程语言选择、模板使用、平台选择以及应用安全措施的实施等多个方面。在此过程中,你还可以创建图表和流程图,展示软件对用户操作的响应。有时,设计过程还包括创建最小可行产品或概念验证。产品的预生产版本可以帮助你想象最终产品的样子。这有助于将所需调整保持在较小范围内,并帮助团队避免从头开始完全重写代码。
SDD 在生产过程中,尤其是在开发阶段(见第4阶段)中起着至关重要的作用。开发人员在编写代码时会严重依赖 SDD 作为主要参考。此外,为了减轻在早期阶段识别的潜在问题和风险,你还必须参考 SRS 文档。它作为设计产品的参考点,确保产品设计中包含了防护团队免受先前识别的潜在风险的措施。
一个展示设计阶段作用的实际例子是地方和联邦政府机构如何利用它来建立一致且可重复的可扩展框架。为实现这一目标,SDLC 的设计阶段可能包括由中央部门创建的预先安排的模板和指南,这些模板和指南用于定义、实施和沟通所有项目方面。例如,这有助于扩展用于签发和管理驾驶执照、选民登记卡和图书馆卡的软件应用程序,这些应用程序在多个司法辖区之间都是互操作的。这对那些资源水平和领导风格各异但必须保持联邦化的司法管辖区特别有用。这种前瞻性的思考有助于确定实际实施的成本或确保最终结果能够满足所有相关利益相关者的需求。
在 SDLC 的第三阶段,你需要记住的一点是,最终用户应该有机会审查设计并对预期系统提出任何修改建议。在这里,你将合作创建最终的技术设计文档,然后再进入生产。在这一点上,开发新软件或系统所需的所有必要需求都应该得到确定,并且可以创建一个待办工作列表。
4. 开发
SDLC 的第四阶段是项目实际开始工作的阶段。在此阶段,程序员、系统工程师和业务开发人员组成的团队开始软件开发过程。此时,通常会创建甘特图或看板,以确保项目工作能够顺利进行。开发团队通常会采用两种方法之一来组织工作:通过实施短期冲刺或持续的开发工作。无论采用何种方法,团队都会努力尽快完成任务。
重要说明
- 冲刺:冲刺是一种限定的时间段,开发团队在这段时间内需要完成一定量的工作。冲刺的持续时间可以从一周到一个月不等,但通常为两周左右。冲刺的短期时间约束鼓励开发人员优先考虑小幅度的、渐进式的改进,而不是发布大规模的全面变更。这样可以减少程序调试的时间,并改善最终用户的体验。
- 持续开发:持续开发与敏捷软件开发方法有许多相似之处。与其对软件进行大规模、一次性的改进,开发团队会持续地进行小幅度的改进,从而允许代码一旦完成并经过测试就立即发布给用户。通过持续开发,可以简化和自动化软件开发、测试和发布更新到生产环境的过程。
在开发阶段,产品代码将按照 SDD(见第3阶段)的要求进行编写,以便有效地生产产品。这涉及开发团队从头开始构建一个新系统,或以新的需求和全新的视角处理现有项目。这可能包括从现有系统到云端新系统的顺利且具有成本效益的数字化转型。
在此阶段,开发人员会将项目分解为更小的软件组件,这些组件最终将成为成品。为了构建代码,开发人员会使用各种工具和编程语言。这些工具和语言的选择将依据所开发的软件产品的要求进行。
一些可能使用的编程工具包括:
-
集成开发环境 (IDE):
- Eclipse
- Microsoft Visual Studio
- PyCharm
-
版本控制系统:
- Git
- GitHub
- Gitlab
- Bitbucket
一些常见的编程语言包括:
- C#
- C++
- Python
- JavaScript
- Go
高级管理层在此阶段的密切参与对实现项目目标至关重要,因为 SDLC 的这一阶段可能会耗费大量时间。你需要有一个预定的时间框架以及里程碑,以便软件开发人员了解目标是什么,并且你可以监控他们的进展。在此阶段结束时,大部分产品代码将完成。
在某些情况下,开发阶段可能与测试阶段同时进行,在此期间会进行特定测试以确保不存在重大软件缺陷。
5. 测试
在不对软件功能和特性进行全面测试的情况下生产软件既不可行也不明智;第五阶段专门用于测试。为了确认一切正常,QA 工程师会进行各种测试,包括代码分析、安全测试、集成测试、性能测试和功能测试。通过反复测试和分析可以成功解决错误和缺陷。在系统设计满足客户需求之前,持续测试是你需要做的事情。虽然团队手动执行软件测试比不测试要好,但最好在可能的情况下将其自动化。
在将软件发布到生产环境之前,你的质量保证团队应该对产品进行测试,以确保它功能齐全并实现其预定目标。用户体验或安全性方面的重大问题也可以在测试阶段解决。无论如何,适当的测试将确保软件的每个组件都按预期工作。产品开发的最后一步包括验证、确认和用户验收测试。如果产品能达到这一点,它很可能已经准备好发布。
除了测试外,软件还应经过正式的质量保证 (QA) 程序,以确保产品的质量。软件测试通常包括以下几种测试:
- 性能测试:性能测试是一种常用的测试策略,旨在评估系统在特定工作负载下的响应能力和稳定性。此外,它还可以用于检查、量化、验证或证实系统的其他质量特性,包括可扩展性、可靠性和资源利用率。
- 功能测试:功能测试,或称黑盒测试,是一种质量保证过程,根据被评估的软件组件的文档需求创建测试用例。功能软件测试的目的是确定系统或其各个部分是否满足预定义的功能需求。通过观察系统对输入的反应来测试功能,而通常不会考虑代码的底层结构。
- 安全测试:安全测试帮助信息系统保护数据并正常工作,通过检测安全问题来进行保护。由于安全测试的逻辑限制,测试通过并不保证系统是完美的或符合安全标准。安全需求可能包括机密性、完整性、认证、可用性、授权和不可否认性。系统安全需求决定了需要测试的安全需求。安全测试有很多定义和方法。通过建立基础,安全分类法帮助我们理解这些技术和含义。
- 单元测试:单元测试是一种通过评估离散代码部分或“源代码单元”来验证软件质量的技术,如一个或多个计算机程序模块及其相应的控制数据、使用过程和操作程序。
- UI/UX 测试:在用户界面 (UI) 测试中,测试人员验证屏幕上的元素(包括按钮、字段和标签)是否按预期运行。屏幕上有控件,例如工具栏、颜色、字体、大小、按钮和图标,它们会根据用户输入的响应进行测试。UI 测试软件的目的是模拟最终用户对产品或服务的体验。
- 回归测试:回归测试是在进行更改后重新执行功能和非功能测试,以确认程序继续按预期运行。软件回归是一种软件缺陷,即之前工作正常的功能停止工作。软件更新、功能添加,甚至是小的配置更改都可能需要进行额外测试以确保兼容性。由于每次发现缺陷都会导致测试套件的数量成倍增长,回归测试通常采用测试自动化。
- 用户验收测试:软件开发的最后阶段是用户验收测试 (UAT),在此阶段,最终用户和客户在真实世界场景中评估产品的功能和实用性。UAT 关注的是软件能否在用户的真实系统中工作,而不是其设计或功能。开发团队必须执行 UAT,因为由于沟通不畅、理解错误、疏忽或需求变化,他们的软件假设可能在日常工作中并不成立。Beta 测试人员在真实环境中测试软件,并在 UAT 期间向开发人员提供反馈,以在发布前修复任何缺陷。
6. 部署
测试完成后,产品就会发布到市场上,但这可能仅限于你所在组织的内部。根据业务模型,产品部署可能涉及多个步骤或采用多种策略,从大规模发布到渐进式发布或介于两者之间的某种方式。如果产品分阶段发布,例如蓝/绿或金丝雀部署,将会有更多的时间进行测试。最终产品的发布或是否需要进一步调整代码取决于收到的反馈。部署阶段通常会产生一些未知的、不理想的结果,你应该预料到这些情况。
7. 维护
在 SDLC 的第七阶段,维护和升级是优先事项。在此阶段,系统可以进行调整以提高性能,并随着时间的推移增加新功能。软件部署将进行持续监控,以减少潜在的性能和安全问题。此外,管理员或站点可靠性工程师一旦发现错误或缺陷,必须及时报告,以便尽快修复。
客户会根据自己的需求以不同方式使用软件产品;这意味着可能需要修复特定问题。这是因为用户可能会发现开发人员和测试人员未发现的缺陷和错误。为了增强用户体验并提高用户留存率,立即解决这些缺陷至关重要。在某些情况下,这些条件可能需要返回到软件开发生命周期的第一阶段。你可能希望为支持的软件产品在后续版本和升级中添加新功能时,也可以重新开始 SDLC 的各个阶段。
普遍认为,维护阶段是 SDLC 的最后阶段。特别是如果你的软件开发过程遵循瀑布发布管理的方式时尤为如此。不过,该行业正在向更加敏捷的软件开发方法转变,例如 DevOps,在这种方法中,维护只是进一步改进的迭代步骤。
定义一些常用术语
以下是一些你在本书中经常会遇到的术语及其定义的简要列表:
- 大爆炸:大爆炸方法缺乏其他发布管理模型中的面向过程的特征,不需要提前准备。这种策略的主要重点是软件开发,它允许程序员跳过规划阶段,直接进入代码生产。
- 滚动发布:滚动发布,也常被称为滚动更新,是一种软件开发模型。软件改进是通过持续的、渐进的步骤开发的,而不是通过离散的版本发布。用户可以随时升级程序以获得最新版本,并且鼓励他们经常这样做。
- 蓝/绿部署:蓝/绿部署创建两个相同的环境。一个环境(蓝色)运行现有的程序版本,另一个环境(绿色)运行新的版本。通过绿色环境的测试后,实际应用流量将被引导到那里,而蓝色环境则被弃用。通过简化失败时的回滚,蓝/绿部署策略提高了应用程序的可用性并降低了部署风险。
- 金丝雀部署:金丝雀部署是一种应用程序的渐进且受控的发布策略,其中流量在现有版本和新版本之间分配。这种方法首先将新版本引入一部分用户,然后逐步扩大其部署范围。通过这种方法,可以在广泛分发给消费者之前确定更新版本的可靠性。
在部署阶段结束时,你的最终产品会交付给终端用户。在这个阶段,部署工程师会在企业内设置软件,并/或帮助用户启动和运行程序。根据你的团队所遵循的 SRLC 类型,你可以自动化此过程并安排部署。例如,在实施单一功能更新的情况下,可以通过最初将其发布给有限的客户子集来执行该过程;这就是之前提到的“金丝雀发布”。如果你正在创建全新的软件,你可能会选择首先以内部 alpha 版本的形式发布。稍后我们会简要扩展 SRLC,但该主题超出了本书的讨论范围。
现在我们已经涵盖了 SDLC 的七个阶段,让我们来看看它与其他生命周期管理方法的比较。
SDLC 与其他生命周期管理方法的比较
如果你熟悉产品管理概念,你会知道 SDLC 并不是唯一的生命周期管理程序。以下是一些相关概念,以及它们与 SDLC 的区别。
软件开发生命周期 (SDLC) 与系统开发生命周期 (SDLC)
系统开发生命周期是规划和构建信息技术系统的过程。有时,人们会将此过程称为 SDLC 的缩写;你可以看到当提及软件开发生命周期时,这会导致混淆。在系统开发方面,系统通常由多个独立的硬件和软件组件组成,这些组件协同工作,执行复杂的任务和计算。只需注意,当你看到 SDLC 这个缩写时,注意上下文线索,以便正确区分你所阅读的是指软件开发还是系统开发。
重要说明
在本书中,我们将软件开发生命周期称为 SDLC。
SDLC 与系统开发生命周期之间存在一些关键差异。SDLC 仅限于创建和测试软件组件。相比之下,系统开发包括设置和管理硬件、软件、人员和流程,这些都是构建完整系统所需的。此外,SDLC 完全专注于程序本身,而系统开发可能包括如组织培训和变更管理等活动,这些活动不一定与软件开发相关。
SDLC 与发布管理
发布管理是对 SDLC 的系统监督和控制。职责包括监督软件产品开发的各个阶段,即规划、设计、测试、部署和发布。发布管理是 SDLC 的一个重要补充组件。发布管理的主要目标是确保开发团队有效地实现业务目标,并生产出高质量的软件。简而言之,发布管理是开发和运营领域之间的重要桥梁。
SDLC 与发布管理之间存在一些关键差异。SDLC 的主要目标是降低风险,并保持开发工作结构化。相比之下,发布管理的主要目标是确保开发团队组织良好,并成功实现业务目标。此外,SDLC 主要关注新软件的持续集成,而发布管理则关注其持续交付。然而,两者都属于发布或项目经理的职责范围。
SDLC 与 ALM(应用生命周期管理)
应用生命周期管理 (ALM) 是一个全面的概念,涵盖了从初步构思和设计阶段到开发、测试、生产、支持,最终到程序退役的整个软件应用开发过程。虽然它与 SDLC 概念相似,但深入探讨时会发现它们之间存在显著差异。
SDLC 主要强调应用程序的开发阶段,而 ALM 则采用更全面的方法,涵盖程序生命周期的全部。有效管理应用程序开发的各个阶段需要多个 ALM 工具、流程和团队的协作与整合。需要注意的是,应用程序的生命周期可能包含在更广泛的 ALM 框架内的多个 SDLC。
SDLC 与 PDLC(产品开发生命周期)
产品开发生命周期 (PDLC) 是一个完整的过程,涵盖从概念构思到产品退出生产的整个生命周期。这包括产品规划、市场调研、产品设计、开发、测试、发布、营销和支持等活动。
SDLC 与 PDLC 之间存在一些关键差异。SDLC 主要关注软件开发过程,而 PDLC 则侧重于产品的整体开发。此外,SDLC 包括几个不同的阶段,如规划、设计、编码、测试和部署。相比之下,PDLC 包括补充阶段,如市场调研、产品规划和产品营销。此外,SDLC 旨在开发符合最终用户特定需求的软件,而 PDLC 则专注于创造满足市场需求并为企业创造收入的产品。
SDLC 与 SRLC(软件发布生命周期)
软件发布生命周期 (SRLC) 的主要目标是收集、记录和验证软件需求。这一过程包括从各方收集需求、按重要性排序、将其记录在需求规范中,并验证其准确性的方法。
SDLC 与 SRLC 之间存在一些关键差异。与 SDLC 相比,SRLC 关注的是管理软件需求。SDLC 包括规划、设计、编码、测试和部署等阶段,而 SRLC 则增加了需求获取、分析和验证等阶段。虽然 SDLC 力求创建满足用户需求的软件,但 SRLC 确保在任何编码之前需求已经明确定义。
发布管理与变更管理
发布管理和变更管理是两个关键过程,对成功交付软件更新和增强至关重要。
发布管理和变更管理领域是相互关联的,但范围和目标有所不同。发布管理的主要目标是监督软件发布的全面交付,而变更管理则主要关注管理构成发布的各种变更。发布管理主要关注软件发布的技术方面,包括发布计划、环境和部署。相反,变更管理主要处理软件变更的业务方面,包括变更请求、审批和沟通。发布管理和变更管理涵盖了不同的角色和职责,包括发布经理、发布工程师、变更经理、变更分析师和变更审查员。
发布管理指的是在多个环境(包括开发、测试、预生产和生产)中组织、协调、评估和实施软件发布的系统方法。发布管理的主要目标是确保软件发布按时交付,同时遵守预算限制,并尽量减少最终用户体验到的潜在干扰。变更管理旨在跟踪新功能、错误修复、增强和配置更改等变化。变更管理的目的是使变更得到批准、记录并传达给相关方,以便它们对企业及其目标、需求和标准产生尽可能大的正面影响。变更管理的核心是在部署前测试和验证对软件系统的任何修改。
发布管理与项目管理
发布管理一词用于描述监督软件发布的创建和分发过程,包括其规划、调度、测试和部署。它提高了开发团队交付的软件产品和升级的速度和质量。简而言之,发布管理是确保从开发到预生产再到生产顺利过渡的过程。更广泛地说,项目管理的目标是确保特定项目在预先设定的范围内成功完成。这包括时间限制、日程安排、财务和沟通的规划。每当产品收到新版本或更新时,这都算作项目的一部分。
项目管理和发布管理共同提高了团队成功完成项目的几率。发布管理与项目管理相似,尽管方法各异,但它们都有明确的结构和一系列阶段。项目管理方法的例子包括以下几种:
- Scrum
- 精益生产 (Lean)
- 六西格玛 (Six Sigma)
- 极限编程 (XP)
- PriSM
- PRINCE2
本章到此结束。在本章中,你了解了软件开发生命周期 (SDLC) 的定义,并探索了它的七个阶段。最后,你还了解了 SDLC 与其他生命周期管理方法的不同之处。在下一章中,我们将详细探讨软件发布管理,以理解其含义。
总结
通过使用 SDLC 策略,可以实现有效的项目管理。管理者、设计师、开发人员和客户都能从这一工具提供的全面基础中受益。SDLC 的七个阶段都至关重要,它们相互依赖,逐步构建。
在模型的初始阶段,高级成员负责收集需求。同时,IT 专业人员收集产品生命周期中所需的所有数据和资源。在确定所需信息后,起草相应的文件。随后的阶段涉及设计和编码过程,接着是测试阶段,用以评估软件的功能性。最后的阶段是部署和维护。团队可以选择使用不同的模型,包括广为人知的瀑布模型和敏捷方法。在软件开发过程中,遵循 SDLC 是关键。如前所述,了解 SDLC 的不同阶段是产品经理建立跨职能和以客户为中心的活动之间的共同理解和联系的有效方法。这有助于在更广泛的公司目标、计划和努力范围内明确划分产品的定位。