第1章 软件工程学概述
1.1软件危机
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题
原因:一方面软件自身的原因,另一方面是开发软件和使用软件的人员。
消除途径:要有技术措施(工具和方法),又要必要的组织管理措施
1.2软件工程
1.2.1什么是软件工程?
软件工程是指导计算机软件开发和维护的一门学科。采用工程的概念,原理,技术和方法。把正确的管理技术和当前最好得到的技术结合起来。以经济的开发出高质量的软件并有效的维护它。
1.2.2定义:
(1)将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。
(2)在(1)中所述方法的研究。
1.2.3软件工程3要素
方法,工具,过程。
1.3软件生命周期
软件声明周期有软件定义,软件开发,和运行维护3个时期组成。
1.4软件过程
软件开发模型:瀑布模型、增量模型、螺旋模型、喷泉模型、智能模型等。
1.4.1瀑布模型
优点:在软件工程的第一阶段,瀑布模型得到了广泛的应用,它简单易用,在消除非结构化软件,降低软件的复杂性,促进软件开发工程化方面起了很大的作用。
缺点:由于瀑布模型是一种理想的线性开发模式,它将一个充满回溯的软件开发过程硬性分割为几个阶段,无法解决软件需求不明确或者变动的问题。这些缺点对软件开发带来了严重影响,由于需求不明确,会导致开发的软件不符合用户的需求而夭折。
1.4.2快速原型模型
所谓的快速原型是快速建立起来的可以在计算机运行的程序,它所完成的功能往往是最终才能完成的功能的一个子集。
优点:软件产品的开发基本上是线性顺序进行的。尽可能的快速开发,节约开发成本。
1.4.3增量模型
增量模型是一种非整体开发的模型。是一种进化式的开发过程。
根据增量的方式和形式的不同,分为:
基于瀑布模型的渐增模型
基于原型的快速原型模型
该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。
增量模型和瀑布模型之间的本质区别是什么?
增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。
一般的增量模型如下:
1.4.4螺旋模型
对大型软件,需要多个原型描述系统的生存期,螺旋模型将瀑布模型与原型化模型结合起来,并加入了风险分析。
该模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:
①制定计划:确定目标、方案和限制条件;
②风险分析:评估方案、标识风险和解决风险;
③实施工程:开发确认产品;
④客户评估:计划下一周期工作。
一般的螺旋模型如下图:沿着螺旋线每转一圈,表示开发出一个更完善的新的软件版本。如果开发风险过大,开发机构和客户无法接受,项目有可能就此中止;多数情况下,会沿着螺旋线继续下去,自内向外逐步延伸,最终得到满意的软件产品。
1.4.5喷泉模型
喷泉模型以面向对象的软件开发方法为基础,以用户需求作为喷泉模型的源泉。如下图:
喷泉模型是对象驱动的过程,对象是所有活动作用的实体,也是项目管理的基本内容。
喷泉模型在实现时,由于活动不同,可分为系统实现和对象实现,这既反映了全系统的开发过程,也反映了对象族的开发和重用过程
1.4.6智能模型
智能模型也称为基于知识的软件开发模型,是知识工程与软件工程在开发模型上结合的产物,以瀑布模型与专家系统的综合应用为基础建立的模型,该模型通过应用系统的知识和规则帮组设计者认识一个特定的软件的需求和设计,这些专家系统已成为开发过程的伙伴,并指导开发过程。
从图中可以清楚地看到,智能模型与其他模型不同,它的维护并不在程序一级上进行,这样就把问题的复杂性大大降低了。
智能模型的主要优点有:
① 通过领域的专家系统,可使需求说明更加完整、准确和无二义性。
② 通过软件工程的专家系统,提供一个设计库支持,在开发过程中成为设计的助手。
③ 通过软件工程知识和特定应用领域的知识和规则的应用来提供开发的帮助。
但是,要建立合适于软件设计的专家系统,或建立一个既适合软件工程由适合应用领域的知识库都是非常困难的。目前,在软件开发中正在使用AI技术,并已取得局部进展;例如在CASE工具系统中使用专家系统,又如使用专家系统实现测试自动化。