软件开发的全面指南

2020年8月13日

软件开发

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

想象一个满屋子的程序员在他们的电脑里输入代码。如果你把他们的输出当成从工厂装配线上组装出来的小部件,会怎么样呢?生产最大化的东西在这里也能起作用吗?还是开发过程更像其他工程学科?

从软件开发开始,项目经理就一直试图解决这个问题。从这些问题中,可以看出软件开发生命周期的定义出现了。

什么是软件开发?

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

开发过程包括编写任何代码之前的构思和设计。规划很容易被忽视。这感觉不像写代码那样是开发。然而,回答关键问题首先会强化成品。这个项目是否值得继续?如果是的话,最好的办法是什么?哪些特性是必要的,哪些特性是最好的?这些答案会让项目更有可能成功。

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

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

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

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

SDLC

1.规划

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

2.设计

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

3.发展

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

4.测试

接下来,开发团队测试代码。代码编写人员和测试人员应该是不同的人。最好是一个非开发人员的质量保证测试人员。开发人员倾向于只考虑愉快的场景。专用的QA测试专业人士往往更善于思考如何破解软件。通过这种方式,他们更有可能在部署之前发现bug。结果是在发布时软件更加稳定。

自动测试与手动测试

单元测试和集成测试通常是自动化的。DevOps平台通常会在将新代码合并到主分支之前对其运行这些测试。如果您在开发人员技能方面有限制,请检查trusted无代码自动化测试工具满足您的业务需求。

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

单元测试

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

集成测试

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

系统测试

测试的最后一种形式是全系统测试。重述一下,单元测试只验证一个函数。集成测试验证一个特性。但是系统测试将整个应用程序视为单个单元。烟雾测试是系统测试的一种轻量级形式。在其中,测试人员与系统进行交互,就像一个自然用户一样,并确保它的行为符合预期。与完整的端到端系统测试相比,后者更加严格。完整系统测试将系统的所有部分作为单个实体进行检查。同样,一套集成测试可以作为一个完整的系统测试。

5.部署

部署阶段是将测试过的代码投入生产。自动化部署使其更加可靠。此外,实践生产部署也会增加顺利部署的几率。开发团队使用一个称为登台环境的测试环境进行实践。它应该和生产的一模一样。两个环境越相似,实践部署的价值就越大。

6.维护

到目前为止,SDLC中的所有东西都只占总拥有成本的四分之一左右。最初的开发成本的软件是业务支出的25%维护阶段将花费业务占总拥有成本的75%.防止维护成本膨胀的方法是更多地关注早期阶段。这意味着更好的技术设计、开发和更彻底的测试。另一种选择是技术债务。就像真正的债务一样,随着时间的推移,它的成本会越来越高。

5种主要的软件开发方法

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

1.敏捷

敏捷的独特之处在于对人的关注。的敏捷方法重新集中了行业的注意力。在此之前,公司的重点是产品和软件。敏捷对这一观点提出了挑战,并将注意力集中在个人所做的过程上。还有,在敏捷宣言极限编程(XP)和Scrum没有任何联系。然而,后来,他们的实践者在敏捷的旗帜下团结起来。

敏捷本身并不是一个框架。它是框架的框架。它的核心在于关注人和快速迭代。顾名思义,敏捷。如果做得好,就可以灵活地实现结果。过程从不以牺牲人为代价,而是由人从中获得价值。

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

2.极限编程

极限编程(通常缩写为XP)始于20世纪90年代早期。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个核心子类型的软件

成品软件是三种类型之一。这些类型包括系统软件、编程软件和应用软件。为了说明这一点,我们打个蛋糕烘焙的比方。搅拌机或抹刀是编程软件。在这个类比中,它可以让你做出更多的蛋糕或更多的软件应用程序。组装蛋糕时,底层是系统软件。这是基础。没有它,你就不能有一个分层蛋糕。顶层是应用软件。这是大多数普通观察者都能看到的。

系统软件

计算机的操作系统是系统软件。这对它的有用性至关重要。想象一台没有操作系统的计算机。你只能通过机器语言与它互动。那是纯粹的二进制——只有1和0。你会发现在任何规模下都不可能使用它。系统软件使计算机变得有用。

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

编程软件

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

编程软件

应用软件

应用软件是最常见的类型。它是一种让你用电脑做事的软件。它使计算机有用。流行的例子是像微软Word和Excel这样的程序。

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

结论

软件开发的方法仍然很成熟。然而,无论使用何种方法,步骤都是一样的。敏捷团队可能会更快地迭代它们,而瀑布实践者则会慢慢地从一个转向下一个。然而,为了构建更好的软件,您必须加强每个步骤的过程。它们是相互依存的。软件开发生命周期不是一个没有步骤的东西。部分构成整体。

想想如果你漏掉任何一步会发生什么。没有计划你在做什么?没有设计,开发过程将是杂乱无章的。省略开发步骤是不可能的。缺乏测试会导致产品不能像预期的那样运行。如果没有部署,就没有人有权使用该产品。未维护的应用程序将不再使用。每一步对于软件产品的成功都是至关重要的。

不要错过任何一篇文章。

订阅,让你的手指紧盯科技脉搏。

提交此表格,即表示您同意接收来自G2的营销通讯。
Baidu
map