一张图搞懂软件工程知识体系

此文章是个人对《软件工程导论 第6版》第一章的理解,可能有些例子举地不太准确,但至少你能看得懂(大概)

目录

  • 1-图
      • 解释
  • 2-理论部分
    • 2.1-软件生存周期过程(也称软件过程)与软件生存周期模型(也称软件开发模型)
      • 2.1.1-软件生存周期过程存在的意义
      • 2.1.2-软件生存周期模型存在的意义
      • 2.1.3-小总结
    • 2.2-软件开发方法
    • 2.3-适当的软件工具
  • 3-结尾




1-图

因为下面的内容全都是围绕这张图展开的,所以直接上图:
一张图搞懂软件工程知识体系_第1张图片

解释

  1. 软件工程方法学就像一个抽象类。这个抽象类中有三个“抽象方法”,它们分别是“软件开发方法”、“工具”和“过程”。

  2. 软件工程方法学这个“抽象类”有许多的“实现类”。这些“实现类”有:“传统方法学(也称结构化开发方法)”,“面向对象方法学”,“其它方法学(为了方便理解,就把前两个方法之外的方法称为"其他方法")”。

  3. 对于“抽象方法”,不同的“实现类”有不同的实现方式。拿传统方法学(结构化开发方法)来说,结构化技术是对“软件开发方法”的一种实现;数据流图,数据字典等是对“工具”的一种实现;瀑布模型等模型是对“过程”的一种实现。



2-理论部分

光看前面的解释可能会有点抽象,所以接下来会结合一些具体的“实现类”或“实现方法”来讲解。当你看完以下内容之后,再去看一些概念性的东西,至少你脑海中不会浮现“这个东西TM到底是用来干什么的?!”之类的问题。

2.1-软件生存周期过程(也称软件过程)与软件生存周期模型(也称软件开发模型)

这两个概念是为了细化“过程”这个“抽象方法”而提出的。说人话就是:

因为软件工程对“过程”的解释只有一句:它规定了完成各项任务的工作步骤(见图中的1.3)。它并没有讲清楚 软件开发的工作是什么;这些工作的步骤有哪些。所以就出现了软件生存周期过程和软件生存周期模型。软件生存周期告诉我们软件开发要“执行什么活动(做什么)”;软件生存周期模型帮助我们组织这些活动

接下来的内容就是对软件生存周期过程和软件生存周期模型的详细介绍。

2.1.1-软件生存周期过程存在的意义

先给两个问题:

  1. 如果在软件开发中你都不知道要做哪些事才算完成了软件开发,那么你如何保证你的软件的质量是没有问题的?

  2. 如何把 现实中的问题和解决问题的实现步骤(逻辑) 映射为 软件上的对应的概念和处理逻辑?

对于第2个问题,我举个例子解释一下:

如果我们要开发一个简单的实现加减乘除的计算机,那么这个时候你可能一秒钟就把输入、输出、判断等功能想好了。但是,当开发的软件涉及到非常复杂的操作和非常复杂的数据时,你如何把这些复杂的操作和数据都一一想好,并把它转变为程序呢?你能顺利地开发一个简单的计算机是因为你对计算机的操作非常熟悉。但是,我们开发的软件却设计到各行各业,你能保证你对各行各业的各种操作都了如指掌吗。

显然,在软件开发中,这种复杂的映射是无法直接完成的,所以我们在软件开发中才需要分层——分为需求分析层、设计层、实现层等等。这样的分层能比较好地控制映射的复杂性。完成这些映射并不是一蹴而就的,而是一个从问题到运行平台的逐步深化的过程。

所以,软件生存周期过程所解决的问题主要为:软件开发到底包括了哪些活动


2.1.2-软件生存周期模型存在的意义

软件生存周期过程介绍的是 软件的开发逻辑(软件开发中到底有哪些开发活动)。但是只知道软件开发中到底有哪些开发活动是不够的,因为:

我们还需要了解应该怎么组织这些活动,从而形成求解软件的逻辑。即,我们怎样才能把这些活动有机的组织好,去应对不同需求的应用系统的开发;我们如何评判开发出的软件产品是否满足用户需求。


相应的,软件生存周期模型的作用就是:对这些活软件动进行组织和划分的框架。即:

我们把一些不同的组织框架进行进一步地细化,从而形成了不同的开发模型。不同的模型适用于不同的系统开发,以及在软件开发过程中应使用哪些方法。所以才会有不同的生存周期模型,如,瀑布模型,增量模型,快速模型等


2.1.3-小总结

软件生存周期模型中的“xx模型”(如瀑布模型)是对“过程”的一种实现。这种“实现”有很多种,不同的实现方式适合不同的“软件开发方法”。所以,“软件开发方法”和“过程”是相互选择的关系,而不是相互包含的关系。




2.2-软件开发方法

软件开发方法 与 软件生存周期模型有很大的联系——软件生存周期模型为软件开发提供了理论方面的活动,软件开发方法告我们这些活动具体要“怎么做”

拿我们最熟悉的瀑布模型来说,它告诉我们软件开活动发应该按“制定计划——>需求分析——>软件设计——>程序编写——>软件测试——>运行维护”的顺序进行,但它并没有提到“制定计划”等活动是如何具体实施的。
就像你爸跟你说“帮我拧一下螺帽”,然后你就用扳手卡住螺帽,并顺时针把螺帽拧到不能再拧为止。“拧螺帽”和“制定计划”一样都是一组动作的集合,真正的具体的实施是“用扳手卡住螺帽,并顺时针把螺帽拧到不能再拧为止”。软件开发方法的目的就是明确这些“具体实施”(也就是上面所说的“回答怎么做”的问题)。




2.3-适当的软件工具

有了上面的内容,再来解释“工具”是什么就很简单了。拿上面“扳手”的例子来说,“工具”就相当于“扳手”,没有“扳手”你也可以拧螺帽,但是拧起来很费劲;没有E-R图之类的图你也可以完成软件开发,但是开发起来费时又费力。
值得注意的是,就像你拧螺帽用的是扳手 敲钉子用的是锤子一样,不同的软件开发方法使用的工具也是不同的。比如结构化开发方法使用的工具是数据流图、数据字典、结构化语言、判定表、判定树等;面向对象开发方法使用的工具则是类图,用例图等。
所以这里说的是“适合的软件工具”,因为没人会用锤子拧螺帽,用扳手敲钉子。




3-结尾

软件生存周期告诉我们软件开发要“执行什么活动(做什么)”;
软件生存周期模型帮助我们组织这些活动
软件开发方法告我们这些活动具体要“怎么做”
各种“xx图”(如,数据流图,类图等)是“工具”的具体实现,它们为软件开发方法中的具体活动提供“技术支持”

你可能感兴趣的:(软件工程)