【从零开始学习计算机科学】软件工程(一)软件工程中的过程模型

发布于:2025-03-17 ⋅ 阅读:(14) ⋅ 点赞:(0)

软件与软件工程

软件又叫软设备,它和硬件一样,是计算机的重bai要组成部分。它是用于计算机上的各种类型的程序和有关资料的总称。它通常依附在硬设备上,例如存放在内、外存储器里。之所以耙它称为“软”件,是因为它比硬件更抽象、更灵活,有很大的弹性或适应性。它和计算机硬件的关系,有点像珠算中的算盘和口诀。如果用人来比方,硬件好比人的躯体,软件则是人所具有的知识和学问。要使计算机发挥作用,软件和硬件两者缺一不可。早期的计算机,只有硬件,没有软件。每次计算,都要由人工编好程序。由于程序的表示方式和人们常用的数学语言相差甚远,所以编写程序要占去很多的人力。而且每执行一个程序,机器便被该程序独占,因此工作效率很低。后来,人们发现可以创造一些较为通用的语言来和机器对话,于是逐渐形成了一些面向所要解决的问题的程序设计语言,即高级语言,这就是最早期的软件。此后,这种高级语言得到扩大和完善,向产品的形式过渡,这时开始“软件”的提法。为了提高计算机自身管理的能力,人们又给它配上高级管理程序,这就是操作系统。在计算机日益广泛应用的今天,面向应用对象编写的程序也越来越多。现在谈到计算机系统,绝不仅仅是指它的硬件,而必须同时指机器本身和它所配备的各类软件。

目前,软件有多种定义:

  1. 指令(计算机程序),执行时提供所需的功能、功能和性能;
  2. 数据结构,使程序能够充分操作信息
  3. 描述程序的操作和使用的文档。

软件还具有以下的特点:软件的生产和硬件不同,没有明显的制造过程。软件不会磨损。软件开发至今尚未完全摆脱手工开发方式。软件是一种逻辑实体,具有抽象性。软件的开发和运行受到计算机系统的限制,对计算机系统有不同程度的依赖性。

软件的发展大致经历五个阶段:

  1. 第一阶段1946—1953
    机器语言,汇编语言,只有少数专业人员能够编写程序,主要用于科学研究计算。

  2. 第二阶段1954—1964
    高级程序设计语言:容易学习,方便编程,提高了程序的可读性。这一时期的程序规模小,因此编写比较容易,还没有形成系统化的方法,对软件的开发过程更没有进行任何管理。

  3. 第三阶段1965—1970
    计算机得到发展:集成电路取代晶体管,处理器的运算速度大幅度提高。出现操作系统,结构化程序设计理念逐渐确立。数据规模更庞大,用户对共享数据的需求:,出现了数据库技术及数据库管理系统。出现“软件危机”:1968年北大西洋公约组织的计算机科学家召开会议,正式提出“软件工程”。

  4. 第四阶段1971—1989
    出现了结构化程序设计技术(Pascal、Modula-2、Basic)。1973年,功能强大的C语言诞生。人机交互的方式改变:引入了鼠标的概念和点击式的图形界面。20世纪80年代,微电子和数字化声像技术发展,在计算机应用程序中开始使用图像、声音等多媒体信息,出现了多用途的应用程序,面向没有任何计算机经验的用户。

  5. 第五阶段1990年—至今
    面向对象的程序设计逐步代替了结构化程序设计。HTML语言和浏览器产生,软件体系结构由集中式的主机模式变为分布式的客户端/服务器模式或浏览器/服务器模式,通信技术和计算机网络的飞速发展。计算机硬件发展,底层应用逐渐完善,软件系统趋向工程化、理论化,程序设计趋向自动化自动化,这使得软件开发工作变得越来越容易。同时,计算机网络和通信技术发展,软件面向的用户越来越多,应用领域越来越广泛,因此软件越来越复杂,软件设计也就越来越重要,越来越难。

在软件的发展历程中,存在着软件危机的问题。软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列的严重问题的现象。软件危机在1967年NATO的研究组首次被提出,直到目前,软件危机依然存在。软件危机的表现有:不提供所需的功能,构建时间过长,建造成本太高,需要太多的资源(时间、空间)才能运行,无法演变以满足不断变化的需求,质量无法保证等。软件危机产生的原因有很多,一方面是与软件的复杂性和本身的特点有关,另一方面是由软件开发、维护、管理方法不正确有关。

当然,在软件的发展中,不仅存在软件危机,还存在软件神话。软件神话(software myths)是关于软件及其开发过程的一些说法被人盲目相信。影响到几乎所有的角色:管理者、顾客、其他非技术性的角色、具体的技术人员;看起来是事实的合理描述(有时的确包含真实的成分)、符合直觉,并经常被拿来做宣传;实际上误导了管理者和技术人员对软件开发的态度,从而引发了严重的问题。

由于软件与其他产品相比,表现形式不同(看不见,摸不着,长期运行看效果),生产方式不同(人与人的沟通,容易有疏忽与失误),产品需求不同(软件不允许有误差),维护方式不同(出现bug要调整,进而引发新bug),软件的失效率曲线不同(因为软件不会磨损),在软件开发的不同阶段进行修改需要付出的代价不同。

在这里插入图片描述

为了解决软件危机产生的问题,软件工程与方法学逐渐形成,然后出现了两个相辅相成又各有侧重的学科:

软件工程学:主要应用工程的方法和技术研究软件开发与维护的方法、工具和管理的一门交叉学科。

程序设计方法学:主要应用数学的方法研究程序的性质以及程序设计的理论和方法的学科。

1968年,北大西洋公约组织首次提出“软件工程”概念。其定义了软件工程是建立和使用一套合理的工程原则,以便经济地获得可靠的、可以在实际机器上运行的软件。1993年IEEE进一步给出了一个更全面更具体的定义:将系统化的、规范化、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件。

软件工程主要研究软件生产的客观规律,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率的目标。软件工程的基本原理有:1. 用分阶段的生命周期计划严格管理;2. 坚持进行阶段评审;3. 实行严格的产品控制;4. 采用现代程序设计技术;5. 结果能清楚地审查;6. 开发小组的人员应该少而精;7. 承认不断改进软件工程实践的必要性。

软件工程具有以下核心要素

  1. 软件工程必须依靠组织对质量的承诺。质量是软件产品的生命线,软件工程以质量保证为基础。

  2. 软件工程的基础是过程层。过程定义了解决特定问题或目标达成涉及的一系列步骤、活动以及交付的内容等。软件产品开发包括若干过程:开发过程、维护过程、管理过程等;过程与质量密切相关;不同过程适用于不同项目。

  3. 软件工程方法为构建软件提供了技术操作方法。方法定义“开发过程中每项活动,任务的实现方法”。方法包括广泛的任务,包括需求分析、设计、程序构造、测试和支持。

  4. 软件工程工具为流程和方法提供自动化或半自动化支持。方法的实现需要支撑工具,如分析工具、设计工具、编译工具、测试工具等。当这些工具被集成起来使得一个工具产生的信息可以被另外一个工具使用时,一个支持软件开发的系统就建立了,称为计算机辅助软件工程(CASE)。

软件工程是一种层次化的技术。任何工程方法必须构建在质量承诺的基础上。软件工程的基础是过程层。软件过程将各个技术层次结合在一起,使得合理、及时地开发计算机软件成为可能。

软件工程中的过程模型

过程是指针对一个给定目标的一系列操作步骤。例如:

目标:去火车站。

操作步骤:去南门/东门公共汽车站,乘50/17路汽车, ⋯ \cdots

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程描述为了开发出客户需要的软件,什么人(who)、在什么时候(when)、做什么事(what)以及怎样(how)做这些事以实现某一个特定的具体目标。软件过程可以定义为一系列模式的组合,这些模式定义了一系列的软件开发中需要的活动、动作、工作任务、工作产品及其相关的行为。

过程模式(process pattern)描述了软件工程工作中遇到的过程相关的问题,明确了问题环境并,给出了针对该问题的一种或几种可证明的解决方案。

软件过程模型(也称软件生命周期模型,软件工程范型)是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。所谓模型就是一种开发策略,这种策略针对软件工程的各个阶段提供了一套范型,使工程的进展达到预期的目的。软件过程模型是软件开发全部活动、动作和任务的结构框架。通过过程模型,我们可以明确软件开发的过程和步骤,促进工程化软件开发,便于制定软件项目计划;为软件开发提供了可视性,便于对软件开发过程进行管理和控制;便于细化和安排任务,使得每个人员明确各自的工作,
软件过程的通用过程框架(Generic Process Framework)是指不考虑软件系统规模和复杂性而适用于所有软件项目的活动,如图所示,它包括两类活动,一类是框架活动(Framework Activity),还有一类是普适性活动(Umbrella Activity)。即过程框架 = 框架活动 + 普适性活动。

活动:主要实现宽泛的目标,与应用领域、项目大小、结果复杂性或者实施软件工程的重要程度没有直接关系。(如:需求分析)

动作:任务集合,包含了主要工作产品生产过程中的一系列任务、工作产品、质量保证点、里程牌。

任务:每个软件工程动作由任务集合来定义,这个任务集合明确了将要完成的工作任务、将要产生的工作产品、所需要的质量保证点,以及用于表明过程状态的里程碑。任务定义要完成软件工程操作目标的实际工作。其至少包含:

  1. 要完成的任务的列表;
  2. 要生产的工作产品列表;
  3. 要应用的质量保证列表。如对”需求分析”,可能的质量保证点包括:需求变更发生后,是否及时更新需求PRD文档;PRD说明书是否符合PRD模版要求;PRD说明书是否包含了流程图?
  4. 项目里程碑的列表(里程碑是项目开发过程中某个重要的时间节点,识别标志性工作的完成情况)。如需求分析结束,软件设计开始前就应该有一个里程碑,对应标志性工作PRD的完成。

框架活动是项目的开发过程,是提炼用户需求、设计、构建和测试满足这些需求的软件并最终将其交付给客户的过程。它是软件过程中的主体过程之一。软件工程的通用过程框架定义了五种