您的万物软件开发综合指南

已发表: 2020-08-13

工厂生产车间和软件开发人员办公室有多相似?

想象一个满屋子的程序员在他们的电脑中输入代码。 如果您将他们的输出视为工厂装配线上的组装小部件怎么办? 最大化生产的东西在这里也能起作用吗? 还是开发过程更像其他工程学科?

自软件开发开始以来,项目经理一直在努力解决这个问题。 从这些问题中,出现了软件开发生命周期的定义。

什么是软件开发?

这是从头开始创建软件的过程。 虽然编写代码是核心活动,但远不止于此。

开发过程包括编写任何代码之前的构思和设计。 规划很容易被忽视。 它不像编写代码那样开发。 然而,首先回答关键问题可以增强成品。 这个项目还值得追求吗? 如果是这样,最好的方法是什么? 哪些功能是必要的,哪些功能很不错? 答案使该项目有更大的成功机会。

虽然这些步骤是恒定的,但它们的应用会有所不同。 软件开发之所以是一门新学科。 工程学科成熟,已有数百年历史。 软件开发只能追溯到 1940 年代后期。 它仍然是一门新学科。 敏捷方法只有 20 年的历史。 然而,它是软件创造理论中发生的最有影响力的事情之一。 无论如何,六个软件开发生命周期阶段对所有系统都是通用的。

软件开发生命周期 (SDLC) 的 6 个阶段

开发团队可以在整个项目或一个功能上使用软件开发生命周期。 SDLC 使用的演变一直是通过缩短每个步骤的长度来降低风险。 稍后,我们将更多地研究不同的方法。 首先,让我们检查一下这些步骤本身。

此外,值得注意的是,您会看到步骤数或其名称方面的变体。 有时会合并步骤,例如开发和测试。 其他时候,您会看到一个步骤一分为二,例如计划变成计划和分析。 在我们的例子中,我们将坚持使用这六个,因为它们清楚地定义了阶段。

SDLC

1. 规划

计划阶段是最重要的一步。 利益相关者需要考虑一切,包括项目本身的可行性。 在这里杀掉整个项目也没关系。 如果需要,一个健康的组织将授权利益相关者这样做。 在此阶段,程序员将较少参与企业环境。 产品所有者、业务分析师和其他利益相关者在此步骤中表达他们的需求。

2. 设计

计划阶段是最重要的一步。 利益相关者需要考虑一切,包括项目本身的可行性。 在这里杀掉整个项目也没关系。 如果需要,一个健康的组织将授权利益相关者这样做。 在此阶段,程序员将较少参与企业环境。 产品所有者、业务分析师和其他利益相关者在此步骤中表达他们的需求。

3. 发展

设计阶段还包括用户体验(UX)设计。 如果应用程序有任何面向用户的组件,那么 UX 设计是必须的。 这包括通过观察真人与产品模型交互来进行用户研究。 这发生在设计阶段而不是开发阶段的原因是时间安排。 用户会话需要时间。 通常,与业务利益相关者的更多来回讨论也会从收集的数据中发生。

4. 测试

接下来,开发团队测试代码。 代码编写者和测试者应该是不同的人。 更好的是非开发人员的质量保证测试员。 开发人员倾向于只考虑快乐路径场景。 专门的 QA 测试专业人​​员往往更善于思考如何破坏软件。 他们更有可能在以这种方式部署之前发现错误。 结果是发布时软件更加稳定。

自动与手动测试

单元测试和集成测试通常是自动化的。 通常,DevOps 平台在将新代码合并到主分支之前对新代码运行这些测试。

手动测试远未过时。 自动化测试一遍又一遍地做同样的事情。 然而,进行手动测试的人可能会在测试过程中意外发现错误。 手动测试的可变性是它的优势。

单元测试

单元测试仅验证方法,仅此而已。 被测函数是边界。 开发人员编写单元测试,一些 SDLC 框架要求它们。 极限编程需要它们。 它还规定了测试驱动的开发。 这是先写单元测试的做法。 然后编写实际的程序代码。

集成测试

集成测试检查代码库的部分或功能。 它们通常由 DevOps 平台自动化并运行。 他们验证的内容不止一种方法。 一个示例是验证 API 调用是否在数据库中保留了新记录。 将此与验证 API 方法的单元测试进行对比。 单元测试只能验证对数据库的调用是否应该发生。 集成测试可以证明数据按预期流过应用程序。

系统测试

最终的测试形式是完整的系统测试。 回顾一下,单元测试只验证一个功能。 集成测试验证功能。 但是系统测试将整个应用程序视为一个单元。 冒烟测试是一种轻量级的系统测试。 在其中,测试人员像自然用户一样与系统交互,并确保其行为符合预期。 与更严格的完整端到端系统测试相比。 完整的系统测试将系统的所有部分作为单个实体进行检查。 此外,一套集成测试可以作为一个完整的系统测试。

5. 部署

部署阶段是将经过测试的代码推送到生产环境中。 自动化部署使其更加可靠。 此外,练习生产部署也会增加顺利部署的几率。 开发团队使用称为暂存环境的测试环境进行实践。 它应该与生产的相同。 两个环境越相似,实践部署的价值就越大。

6. 维护

到目前为止,SDLC 中的所有内容仅占总拥有成本的四分之一左右。 软件的初始开发成本是企业支出的 25%。 维护阶段将花费企业大约 75% 的总拥有成本。 对膨胀的维护成本的防御更多地关注早期阶段。 这意味着更好的技术设计、开发和更彻底的测试。 另一种选择是技术债务。 就像真正的债务一样,随着时间的推移,它会变得更加昂贵。

5种主要的软件开发方法

虽然 SDLC 的步骤是不变的,但它们的实现和执行顺序会有所不同。 让我们看看组织进行软件开发过程的最流行的方式。

1.敏捷

敏捷的独特之处在于对人的关注。 敏捷方法重新引起了业界的关注。 之前,重点是产品、软件。 敏捷挑战了这一点,并专注于执行该过程的个人。 此外,在敏捷宣言之前,极限编程(XP)和 Scrum 没有任何联系。 然而,之后,他们的实践者在敏捷的旗帜下团结起来。

敏捷本身并不是一个框架。 它是框架的框架。 它的核心是关注人和快速迭代。 顾名思义,敏捷。 做得好有实现结果的灵活性。 流程绝不会以牺牲人员为代价,而是从流程中获取价值。

敏捷的另一个关键租户是迭代方法。 这个想法是在更短的时间内完成工作块。 这样,企业可以更快地适应市场的变化。 快速改变开发方向的能力使它变得敏捷。 同时,开发团队可以从每一次迭代中的经验中学习并改进。 敏捷团队在每次迭代后的回顾会议上这样做。

2.极限编程

极限编程(通常缩写为 XP)始于 1990 年代初期。 Martin Fowler 是敏捷宣言的最初签署者之一。 他认为敏捷之所以受欢迎,是因为 XP 框架。 此外,他认为这是开始进行敏捷软件开发的最佳方式。

XP 得名于它的方法。 它需要常见的良好软件实践并需要它们。 这就是它“极端”的原因。 XP 需要诸如单元测试、结对编程、更频繁地发布之类的东西。

使 XP 成为一种独特方法的原因是:

  • 迭代周期短(1 到 2 周很常见)
  • 在当前迭代中替换工作项的开放性(Scrum 不允许的)
  • 强调自动化测试和结对编程

3. 精益

精益在技术上不是敏捷,但在实践中却有类似的感觉。 现在它被大多数人接受为敏捷的一部分。 它的重点不同于传统的敏捷。 根据敏捷宣言,“个人和互动优于流程和工具。” 精益比制造商更关注软件。

它的根源是丰田的精益制造原则。 以下是定义它的七个部分。 如果您熟悉精益生产,这些听起来很相似。 他们是:

  1. 消除浪费
  2. 扩大学习
  3. 尽可能晚做出决定
  4. 尽快交付
  5. 赋能团队
  6. 建立诚信
  7. 优化整体

4. Scrum

Scrum 是最流行的敏捷方法。 根据第 14 次敏捷状态报告,58% 的软件公司使用 Scrum。 如果包括人渣混合体,则该百分比将跃升至 84%。 这就引出了一个问题,为什么它最受欢迎?

答案是 Scrum 就是在更短的时间内完成更多的工作。 这对企业很有吸引力。 Scrum 中的每次迭代都是一个“冲刺”。 这个名字强化了速度的概念。 通常,冲刺的时间为 2 到 3 周。 一旦 Scrum 团队计划了一个 sprint,任何人都不应更改它。 新工作必须等到下一个 sprint 开始。 这需要业务利益相关者的纪律。 在实践中,这个 Scrum 规则经常被违反。 这就是为什么团队报告经常使用 Scrum 混合。

Scrum 的另一个特点是 Scrum Master。 这是一名被提名负责将冲刺保持在目标上的团队成员。 通常,Scrum Master 是来自开发团队的开发人员。

Scrum 最常见的变体是 ScrumBan,它是 Scrum 和看板的混搭。 看板起源于日本丰田制造过程,如精益。 这是一个准时制工作系统。

每一项工作都像是一次迭代。 开发人员一次只做一件事。 该规则是每个开发人员一个“进行中”项目。 这种严格的在制品限制可以揭示任何瓶颈。 开发人员通过看板跟踪正在进行的工作项目。 作为旁注,这就是名称的来源。 在日语中,看板的意思是“招牌”。

5. 瀑布

瀑布方法是所有软件开发实践中最早的。 它至少比敏捷早了几十年。 这种方法也比它的名字更古老。

这是公司一直以来的自然工作方式。 这是一个线性过程,你从头开始。 首先,利益相关者编译需求。 他们这样做不是为了一两个功能。 不,业务利益相关者立即确定整个项目。 之后,工作开始。 开发人员无需任何迭代即可完成所有工作。

瀑布方式在概念上是最容易理解的。 人们一次只做一件事。 也就是说,这是商业成功的最大风险。 如果某些事情偏离目标,利益相关者在项目完成之前无法纠正它。 原因是在项目完成之前它甚至不会被注意到。

软件的 3 个核心子类型

成品软件是三种类型之一。 这些类型是系统、编程和应用软件。 为了说明,这里有一个蛋糕烘焙的类比。 搅拌机或抹刀是编程软件。 在这个类比中,它使您能够制作更多蛋糕或更多软件应用程序。 组装蛋糕时,最底层是系统软件。 这是基础。 没有它,你就不可能有分层蛋糕。 顶层将是应用软件。 这是大多数不经意的观察者都能看到的。

系统软件

计算机的操作系统是系统软件。 这对它的有用性至关重要。 想象一台没有操作系统的计算机。 您只能通过机器语言与之交互。 那是纯二进制——只有一和零。 你会发现不可能在任何规模上工作。 系统软件开启了计算机的实用性。

Windows、macOS 和 Linux 是最流行的系统软件示例。 设备驱动程序也是系统软件。 它们扩展了操作系统的基本功能。 没有操作系统的智能设备使用固件来启用它们的功能。 它也是系统软件。

编程软件

编程软件是应用软件的一个子集。 开发人员用来创建新程序的任何程序都会进行分类。 它们的范围从简单的文本编辑器到复杂的集成开发环境 (IDE)。 大多数开发人员喜欢更复杂的编程软件工具。 Microsoft 的 Visual Studio 等程序有助于加快开发速度。

编程软件

应用程序软件

应用软件是最常见的类型。 它是让你用电脑做事的软件。 它使计算机变得有用。 流行的例子是 Microsoft Word 和 Excel 等程序。

云软件也属于这一类。 Google Docs、Dropbox 甚至 Instagram 都是应用软件。 如果您对某个东西是否是应用软件感到困惑,这里有一个简单的测试。 程序是否需要其他东西才能运行? Windows 或 Android 没有。 它们是系统软件。 PowerPoint,甚至像《使命召唤》这样的游戏确实需要其他东西才能运行,这意味着它们是应用软件。 没有设备驱动程序和操作系统,它们就无法执行。

结论

软件开发的方法仍在成熟中。 然而,无论使用哪种方法,步骤都保持不变。 敏捷团队可能会更快地迭代它们,而瀑布实践者会慢慢地从一个转移到另一个。 然而,要构建更好的软件,您必须加强每一步的流程。 他们建立在彼此之上。 没有一个步骤,软件开发生命周期就不是一回事。 零件构成整体。

想想如果你离开了任何一步会发生什么。 没有计划你在做什么? 没有设计,开发过程将是杂乱无章的。 省略开发步骤是不可能的。 缺乏测试可确保产品无法按预期运行。 如果没有部署,则没有人可以使用该产品。 未维护的应用程序将被废弃。 每个步骤对于软件产品的成功都至关重要。