




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章概述软件工程第1章概述软件工程1
软件及软件危机1.1软件工程
1.2本章小结1.3软件及软件危机1.1软件工程1.2本章小结1.321.1软件及软件危机1.1.1软件的含义、特点与分类1.1.2软件的发展1.1.3软件危机1.1软件及软件危机1.1.1软件的含义、特点与分类31.1.1软件的含义、特点与分类
1.软件软件是指计算机系统中与硬件相互依存的程序,数据及其相关文档的集合。这三类集合中,程序是指按事先编制的功能和性能要求执行的指令序列,数据是指能让程序正常使用信息的数据结构,文档是指与程序开发,维护及其相关的图文材料。因此,在计算机上运行的程序属于软件,与这些程序相关的文档和数据也属于软件。1.1.1软件的含义、特点与分类1.软件42.特点
(1)从形态角度来说,软件是逻辑实体,而不是具体的物理实体。软件没有大小、没有物理和化学特性。
(2)从智能角度来说,软件具有一定的智能性。对于事先编制好的程序,可以帮助我们解决复杂的计算、分析、判断和决策问题。
(3)从开发角度来说,尽管已经有了很多辅助软件帮助程序员进行开发工作,但到还是不能满足所有开发任务,软件开发仍然需要大量高水平的程序员。
2.特点(1)从形态角度来说,软件是逻辑实体,而不52.特点
(4)从生产角度来说,软件一旦设计开发出来,具有较强的复制性,低成本等特点,这是硬件或传统的制造业产品的生产所不能比拟的。
(5)从质量角度来说,目前的软件产品还无法得到完全没有缺陷的软件产品。
(6)从管理角度来说,由于上述的几个特点,使得软件的开发管理显得更为重要,更为独特。
(7)从环境角度来说,软件对于计算机系统的环境有着不同程度的依赖性。软件的开发和运行都离不开相关的计算机系统环境,包括支持它的开发和运行的相关硬件和软件。
2.特点(4)从生产角度来说,软件一旦设计开发出来62.特点
(8)从维护角度来说,软件一旦投入使用以后需要进行必要的维护,但这种维护比硬件维护更复杂。
(9)从废弃角度来说,软件的功能不能满足用户的需求,就可能被废弃,这与硬件被“用坏”而被废弃是不同的。
(10)从应用角度来说,软件的广泛应用已渗入到社会生活、国民经济和科研等各个领域,已成为现代信息社会不可缺少的一部分,具有不无可取代的地位。
2.特点(8)从维护角度来说,软件一旦投入使用以后73.分类软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。(1)系统软件(2)应用软件(3)中间件随着计算机技术与互联网的不断发展和普及,出现了一种支持跨平台开发应用软件的新型软件,即中间件。3.分类软件是用户与硬件之间的接口界面。用户8
中间件是一种位于系统软件和应用程序之间的通用服务,应用软件通过它在不同的技术之间共享资源。中间件位于客户机/服务器的操作系统之上,通过它的标准接口和协议,可以实现系统软件或应用程序之间的资源共享和信息交换。通过中间件,应用程序可以实现跨平台工作,减少重复性工作。
例如,微软公司的ODBC,SUN公司的JDBC等都属于中间件。中间件是一种位于系统软件和应用程序之间的通用91.1.2软件的发展(三个阶段)1.程序设计阶段软件发开主要是个体手工方式。时间:1945年~1960年硬件:计算机采用电子管软件:机器语言和汇编语言应用:主要用于科学计算1.1.2软件的发展(三个阶段)1.程序设计阶段10这一时期还没有软件的概念,程序设计就等于现在的软件开发,但没有任何其他的文档资料,程序主要采用批处理技术。软件开发属于个人设计、个人使用、个人操作的个体手工方式,软件无法维护。1.程序设计阶段1.程序设计阶段112.软件设计阶段软件开发主要是软件作坊方式。时间:20世纪60年代到70年代硬件:计算机先后采用晶体管、集成电路软件:操作系统、高级语言应用:主要用于科学计算、数据处理和事务处理等各个领域2.软件设计阶段软件开发主要是软件作坊方式。122.软件设计阶段此时人们开始购买软件产品,软件概念由此诞生。随着计算机的广泛应用,软件系统的规模越来越大,复杂程度越来越高,原来的个体手工方式已经不能满足软件开发的需求,需要通过多人的分工协作,以提高软件生产率,这样就出现了“软件作坊”式的开发方式。2.软件设计阶段此时人们开始购买软件产品,软132.软件设计阶段但这种方式基本上还是沿用软件发展早期所形成的个体化的开发方式,软件的可靠性无法得到保障,许多程序的个体化特性导致软件产品根本无法维护,最终导致了严重的“软件危机”大爆发。2.软件设计阶段但这种方式基本上还是沿用软件143.软件工程阶段软件开发主要是工业化生产方式。时间:20世纪70年代至今硬件:计算机采用大规模、超大规模集成电路软件:软件层出不穷应用:网络时代,应用于各个领域3.软件工程阶段软件开发主要是工业化生产方式。153.软件工程阶段为了使软件生产率更高,维护更方便,软件的开发必须以工程化为指导思想,采用工程化的原则、方法和标准来开发和维护软件产品。至此,软件开发进入软件工程时代。3.软件工程阶段为了使软件生产率更高,维护更方便161.1.3软件危机软件危机爆发于上个世纪60年代末。要解决这一危机,就要搞清楚软件危机的含义,产生的原因,才能有效地找到消除软件危机的途径。1.1.3软件危机软件危机爆发于上个世纪17软件危机是指由于落后的软件生产方式不能满足日益增长的计算机软件需求,从而在软件开发与维护过程中出现的一系列严重问题。具体来说,
(1)现在软件开发的生产率不能满足人们对软件日益增长的需求(2)大量已有的软件得不到很好的维护1.含义1.含义18(1)对软件开发进度和成本预测不准确(2)用户对交付使用的软件产品功能不满(3)软件产品的质量得不到保障(4)软件产品难以维护(5)软件产品缺少适当的文档资料软件危机的主要表现(1)对软件开发进度和成本预测不准确软件危机的主要表现19软件危机还表现为随着硬件成本的大幅下降,软件成本占计算机系统总成本的比例越来越高;随着计算机技术的迅猛发展和网络的日益普及,软件开发生产率提高的速度,仍然满足不了软件产品的供需要求。软件危机的主要表现软件危机还表现为随着硬件成本的大幅下降,软件成本20
北大西洋公约在上世纪60年代后期多次组织讨论了“软件危机”问题,并对软件在开发过程中以及维护过程中的主要表现进行了分析,发现软件危机产生的主要原因有两点,
(1)由于软件自身特点引起的(2)由于软件在开发和维护过程中方法不当造成的2.产生软件危机的原因2.产生软件危机的原因21与其说软件危机是软件在开发和维护过程中方法不当造成的,不如说是开发人员自身的缺点造成的。具体表现为:(1)部分软件开发人员缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定。(2)软件开发人员与用户的沟通不够充分,使得需求分析不充分或存在错误。与其说软件危机是软件在开发和维护过程中方法不当造成22(3)软件开发人员在软件开发过程有不规范操作。(4)软件开发人员中的组织者缺乏管理经验。(5)缺少有效的软件评测手段,提交用户的软件质量不能完全保证。此外,硬件生产率大幅度提高,而软件生产规模和复杂度虽然增大,但软件生产率却低下,导致硬软件供需失衡,也是造成软件危机的重要因素。(3)软件开发人员在软件开发过程有不规范操作。23为了消除软件危机,就要彻底消除“软件就是程序”的错误观念,并正确认识到软件是程序,数据及其相关文档的集合。消除软件为还有做到,充分吸收和借鉴以往从事各种工程项目中积累下来的有效原理、概念、技术与方法,特别是吸取计算机硬件研究和开发中的经验教训。3.消除软件危机的途径3.消除软件危机的途径24按工程化的原则和方法组织软件开发工作。为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
软件工程作为研究如何克服软件危机的新兴工程学科诞生了。3.消除软件危机的途径3.消除软件危机的途径251.2软件工程
1.2.1软件工程的定义1.2.2软件工程的基本原理1.2.3软件工程知识体系1.2.4软件工程方法学1.2软件工程
1.2.1软件工程的定义261.2.1软件工程的定义很多专家学者和组织机构都对软件工程作出了定义:1968年在北大西洋公约组织会议上,计算机科学家为了应对“软件危机”,提出了软件工程的概念,Baue认为软件工程就是,“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。这个定义强调软件工程是一门工程学课。
1.2.1软件工程的定义很多专家学者和组271.2.1软件工程的定义IEEE在1983年对软件工程进行定义,“软件工程是开发、运行、维护和修复软件的系统方法”。十年后,IEEE又对软件工程给出一个更加综合的定义:“1)将系统化的,规范的,可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中;2)对上述方法的研究”。1.2.1软件工程的定义IEEE在198281.2.1软件工程的定义计算机科学技术百科全书》给出的定义是,软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。1.2.1软件工程的定义计算机科学技术百科全书291.2.1软件工程的定义比较被认可的一个定义认为:
软件工程是一门指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发和维护软件,并将经过时间考验而证明正确的管理技术和当前能够得到的最好技术相结合,开发出质量较高又经济的软件,并对其进行有效地维护。1.2.1软件工程的定义比较被认可的一个定义认为:301.软件工程的目标软件工程的目标就是要运用先进的软件开发技术和管理方法来提高软件的质量和生产率,也就是要生产出短周期、低成本且高质量的软件产品,并最终实现软件的工业化生产。1.软件工程的目标软件工程的目标就是要运用先312.软件产品应具有以下质量特性
(1)功能性:软件所实现的功能达到它的设计要求和满足用户需求的程度;(2)效率:在规定的条件下使用软件实现某种功能所需要的计算机资源的有效性;(3)可使用性,为了使用该软件所需要具有的知识和能力;(4)可靠性:在规定的时间和条件下,软件能够正常运行;能防止因概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。2.软件产品应具有以下质量特性(1)功能322.软件产品应具有以下质量特性
(5)可维护性;当软件交付使用后,由于环境改变或软件运行发生故障时,能够对软件进行相应的修改,使其恢复正常运行。可维护性是软件工程中一项十分重要的目标,软件维护所需要的费用独立于软件开发的费用且比后者更高。(6)可移植性:软件在不同计算机系统或环境之间进行转移时仍能正常运行和工作所做努力的程度。
2.软件产品应具有以下质量特性(5)可维33软件产品质量和软件工程目标的关系
软件产品质量和软件工程目标的关系341.2.2软件工程的基本原理为了确保软件产品质量和开发效率原理的最小集合,美国著名的软件工程专家巴利·玻姆(BarryBoehm)综合大量专家学者的意见,并总结了美国天合公司(TRW)多年的开发软件的经验,于1983年提出了软件工程的七条基本原理。
这七天基本原理相互独立,且相当完备,是在此之前已经提出的100多条软件工程准则的任意组合蕴含或派生。
1.2.2软件工程的基本原理为了确保软件351.2.2软件工程的基本原理1.用分阶段的生命周期计划严格管理2.坚持进行阶段评审3.实行严格的产品控制4.采纳现代程序设计技术5.结果应能清楚地审查6.开发组织的人员应少而精7.承认不断改进软件工程实践的必要性1.2.2软件工程的基本原理1.用分阶段的生命周期计划361.2.3软件工程知识体系确立软件工程专业最重要的就是要建立软件工程本体知识的结构。因此,1999年5月,ISO和IEC的第一联合技术委员会为顺应这种需求,立即启动了标准化项目一一“软件工程知识体系指南”。1.2.3软件工程知识体系确立软件工程专371.2.3软件工程知识体系软件工程知识体系指南的目标是:(1)促使软件工程本体知识在世界范围内被认可;(2)确定软件工程学科的范围,阐明软件工程与其他相关学科之间的关系;(3)体现软件工程学科内容的特征;(4)确定软件工程本体知识的各个专题;(5)为编写相应的课程和职业资格认证材料的提供依据。
1.2.3软件工程知识体系软件工程知识体系指南的目标是381.2.3软件工程知识体系经过几十个国家的几百名软件工程专家对软件工程知识体系指南多次的修改和编制,由IEEE主持的2004版软件工程知识体系指南(SWEBOK:GuidetoSoftwareEngineeringBodyofKnowledge2004Version)终于诞生了。1.2.3软件工程知识体系经过几十个国家391.2.4软件工程方法学通常将软件开发全过程中使用的一整套技术方法的集合称为方法学(methedology),也称为范型(paradigm)。软件工程方法学包含3个要素:方法、工具和过程。1.2.4软件工程方法学通常将软件开发全401.2.4软件工程方法学方法:完成软件开发的各项任务的技术方法,解决“怎样做”的问题,是软件工程学科的核心内容;工具:为运用方法而提供的自动的或半自动的软件工程支撑环境;过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。1.2.4软件工程方法学方法:完成软件开发的各项任务的技411.2.4软件工程方法学从上世纪60年代后期开始,出现了许多软件工程方法,其中最具影响的是结构化方法、面向对象方法、形式化方法。1.2.4软件工程方法学42也称为生命周期方法学或结构化范型。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后采用结构化技术来完成每个阶段的任务。1.结构化方法1.结构化方法43(1)结构化方法的优点
每个阶段的任务相对独立且简单,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度;每个阶段都采用科学的管理技术和良好的技术方法,而且在每个阶段结之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作。不仅大大提高了软件开发的成功率,而且也提高了软件开发的生产率。1.结构化方法1.结构化方法44
(2)结构化方法的缺点
由于结构化方法要么面向行为,要么面向数据,缺乏使两者有机结合的机制,对于软件规模较大,或者对软件的需求不明确或用户提出新要求时,使用结构化方法开发软件成功率较低。此外,采用这种方法开发的软件可重用程度低,造成软件很难维护,这是一个严重的弊端。1.结构化方法1.结构化方法45面向对象方法是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。它把数据和行为看成同等重要。面向对象方法学是以面向对象技术为核心,利用类的继承等复用方式,通过逐步细化地建立对象模型,以及迭代和演化的步骤完成软件开发的模式。2.面向对象方法2.面向对象方法46概括地说,面向对象方法学具有下述4个要点。(1)把对象(Object)作为融合了数据及在数据上的操作行为的统一的软件构件。(2)把所有对象都划分成类(Class)。(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。(4)对象彼此间只能通过发送消息互相联系。2.面向对象方法2.面向对象方法47采用了面向对象的技术,降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。面向对象方法特有的继承性,进一步提高了面向对象软件的可重用性。2.面向对象方法2.面向对象方法48在开发大型软件产品时,人们常常使用面向对象方法。把一个大型软件产品分解成一系列本质上相互独立的小产品来处理,这就不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易多了。2.面向对象方法2.面向对象方法49根据形式化的程度,可以将软件工程方法划分为非形式化、半形式化和形式化三种。形式化方法是一种基于形式化数学变换的软件开发方法,它可将系统的规格说明转换为可执行的程序。形式化方法有很多种,如有穷状态机、Petri网和Z语言等。3.形式化方法3.形式化方法50形式化方法的优点,形式化的规格说明可以用数学方法研究和验证。用数学语言能够解决规格说明的二义性问题,提高其精确性;数学提供了确认手段,使得证明和验证软件程序满足用户和系统的需求成为可能。但是,由于大多数形式化的规格说明主要关注于系统的功能和数据,因此,对问题的时序、控制和行为等方面的需求很难表示。除此之外,只有极少数程序员具有应用形式化方法的背景,这就需要投入大量资金进行培训。3.形式化方法3.形式化方法51尽管使用形式化规格说明技术是进行软件产品开发时软件工程方法学的趋势,但是,目前形式化方法还没有在软件产业界广泛使用。目前使用最广泛的软件工程方法学,仍然是结构化方法学和面向对象方法学。3.形式化方法3.形式化方法523.3本章小结本章首先介绍软件是指计算机系统中与硬件相互依存的程序,数据及其相关文档的集合。然后回顾计算机软件发展的过程,说明开发软件的一些错误方法和观念是怎样形成的,列举了这些错误方法带来的软件危机。为了计算机系统更好地发展,需要认真研究开发和维护软件的科学技术。应总结计算机软件的历史经验教训,借鉴其他工程领域的管理技术,逐步使软件工程这门新学科发展和完善起来。3.3本章小结本章首先介绍软件是指计算机系统533.3本章小结本章还介绍了软件工程的相关知识,有助于读者更全面整体地认识软件工程这门工程学科。软件工程是一门指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发和维护软件,并将经过时间考验而证明正确的管理技术和当前能够得到的最好技术相结合,开发出质量较高又经济的软件,并对其进行有效地维护。确立软件工程专业最重要的就是要建立软件工程本体知识的结构。由IEEE主持的2004版软件工程知识体系指南中确定了软件工程的10个知识领域,以及相关学科知识领域,其中这10个知识域,分为两类过程。3.3本章小结本章还介绍了软件工程的相关知识543.3本章小结软件工程方法学包含3个要素:方法、工具和过程。其中,方法是完成软件开发的各项任务的技术方法,解决“怎样做”的问题,是软件工程学科的核心内容;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。从上世纪60年代后期开始,出现了许多软件工程方法,其中最具影响的是结构化方法、面向对象方法和形式化方法。3.3本章小结软件工程方法学包含3个要素:方55第1章概述软件工程第1章概述软件工程56
软件及软件危机1.1软件工程
1.2本章小结1.3软件及软件危机1.1软件工程1.2本章小结1.3571.1软件及软件危机1.1.1软件的含义、特点与分类1.1.2软件的发展1.1.3软件危机1.1软件及软件危机1.1.1软件的含义、特点与分类581.1.1软件的含义、特点与分类
1.软件软件是指计算机系统中与硬件相互依存的程序,数据及其相关文档的集合。这三类集合中,程序是指按事先编制的功能和性能要求执行的指令序列,数据是指能让程序正常使用信息的数据结构,文档是指与程序开发,维护及其相关的图文材料。因此,在计算机上运行的程序属于软件,与这些程序相关的文档和数据也属于软件。1.1.1软件的含义、特点与分类1.软件592.特点
(1)从形态角度来说,软件是逻辑实体,而不是具体的物理实体。软件没有大小、没有物理和化学特性。
(2)从智能角度来说,软件具有一定的智能性。对于事先编制好的程序,可以帮助我们解决复杂的计算、分析、判断和决策问题。
(3)从开发角度来说,尽管已经有了很多辅助软件帮助程序员进行开发工作,但到还是不能满足所有开发任务,软件开发仍然需要大量高水平的程序员。
2.特点(1)从形态角度来说,软件是逻辑实体,而不602.特点
(4)从生产角度来说,软件一旦设计开发出来,具有较强的复制性,低成本等特点,这是硬件或传统的制造业产品的生产所不能比拟的。
(5)从质量角度来说,目前的软件产品还无法得到完全没有缺陷的软件产品。
(6)从管理角度来说,由于上述的几个特点,使得软件的开发管理显得更为重要,更为独特。
(7)从环境角度来说,软件对于计算机系统的环境有着不同程度的依赖性。软件的开发和运行都离不开相关的计算机系统环境,包括支持它的开发和运行的相关硬件和软件。
2.特点(4)从生产角度来说,软件一旦设计开发出来612.特点
(8)从维护角度来说,软件一旦投入使用以后需要进行必要的维护,但这种维护比硬件维护更复杂。
(9)从废弃角度来说,软件的功能不能满足用户的需求,就可能被废弃,这与硬件被“用坏”而被废弃是不同的。
(10)从应用角度来说,软件的广泛应用已渗入到社会生活、国民经济和科研等各个领域,已成为现代信息社会不可缺少的一部分,具有不无可取代的地位。
2.特点(8)从维护角度来说,软件一旦投入使用以后623.分类软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。(1)系统软件(2)应用软件(3)中间件随着计算机技术与互联网的不断发展和普及,出现了一种支持跨平台开发应用软件的新型软件,即中间件。3.分类软件是用户与硬件之间的接口界面。用户63
中间件是一种位于系统软件和应用程序之间的通用服务,应用软件通过它在不同的技术之间共享资源。中间件位于客户机/服务器的操作系统之上,通过它的标准接口和协议,可以实现系统软件或应用程序之间的资源共享和信息交换。通过中间件,应用程序可以实现跨平台工作,减少重复性工作。
例如,微软公司的ODBC,SUN公司的JDBC等都属于中间件。中间件是一种位于系统软件和应用程序之间的通用641.1.2软件的发展(三个阶段)1.程序设计阶段软件发开主要是个体手工方式。时间:1945年~1960年硬件:计算机采用电子管软件:机器语言和汇编语言应用:主要用于科学计算1.1.2软件的发展(三个阶段)1.程序设计阶段65这一时期还没有软件的概念,程序设计就等于现在的软件开发,但没有任何其他的文档资料,程序主要采用批处理技术。软件开发属于个人设计、个人使用、个人操作的个体手工方式,软件无法维护。1.程序设计阶段1.程序设计阶段662.软件设计阶段软件开发主要是软件作坊方式。时间:20世纪60年代到70年代硬件:计算机先后采用晶体管、集成电路软件:操作系统、高级语言应用:主要用于科学计算、数据处理和事务处理等各个领域2.软件设计阶段软件开发主要是软件作坊方式。672.软件设计阶段此时人们开始购买软件产品,软件概念由此诞生。随着计算机的广泛应用,软件系统的规模越来越大,复杂程度越来越高,原来的个体手工方式已经不能满足软件开发的需求,需要通过多人的分工协作,以提高软件生产率,这样就出现了“软件作坊”式的开发方式。2.软件设计阶段此时人们开始购买软件产品,软682.软件设计阶段但这种方式基本上还是沿用软件发展早期所形成的个体化的开发方式,软件的可靠性无法得到保障,许多程序的个体化特性导致软件产品根本无法维护,最终导致了严重的“软件危机”大爆发。2.软件设计阶段但这种方式基本上还是沿用软件693.软件工程阶段软件开发主要是工业化生产方式。时间:20世纪70年代至今硬件:计算机采用大规模、超大规模集成电路软件:软件层出不穷应用:网络时代,应用于各个领域3.软件工程阶段软件开发主要是工业化生产方式。703.软件工程阶段为了使软件生产率更高,维护更方便,软件的开发必须以工程化为指导思想,采用工程化的原则、方法和标准来开发和维护软件产品。至此,软件开发进入软件工程时代。3.软件工程阶段为了使软件生产率更高,维护更方便711.1.3软件危机软件危机爆发于上个世纪60年代末。要解决这一危机,就要搞清楚软件危机的含义,产生的原因,才能有效地找到消除软件危机的途径。1.1.3软件危机软件危机爆发于上个世纪72软件危机是指由于落后的软件生产方式不能满足日益增长的计算机软件需求,从而在软件开发与维护过程中出现的一系列严重问题。具体来说,
(1)现在软件开发的生产率不能满足人们对软件日益增长的需求(2)大量已有的软件得不到很好的维护1.含义1.含义73(1)对软件开发进度和成本预测不准确(2)用户对交付使用的软件产品功能不满(3)软件产品的质量得不到保障(4)软件产品难以维护(5)软件产品缺少适当的文档资料软件危机的主要表现(1)对软件开发进度和成本预测不准确软件危机的主要表现74软件危机还表现为随着硬件成本的大幅下降,软件成本占计算机系统总成本的比例越来越高;随着计算机技术的迅猛发展和网络的日益普及,软件开发生产率提高的速度,仍然满足不了软件产品的供需要求。软件危机的主要表现软件危机还表现为随着硬件成本的大幅下降,软件成本75
北大西洋公约在上世纪60年代后期多次组织讨论了“软件危机”问题,并对软件在开发过程中以及维护过程中的主要表现进行了分析,发现软件危机产生的主要原因有两点,
(1)由于软件自身特点引起的(2)由于软件在开发和维护过程中方法不当造成的2.产生软件危机的原因2.产生软件危机的原因76与其说软件危机是软件在开发和维护过程中方法不当造成的,不如说是开发人员自身的缺点造成的。具体表现为:(1)部分软件开发人员缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定。(2)软件开发人员与用户的沟通不够充分,使得需求分析不充分或存在错误。与其说软件危机是软件在开发和维护过程中方法不当造成77(3)软件开发人员在软件开发过程有不规范操作。(4)软件开发人员中的组织者缺乏管理经验。(5)缺少有效的软件评测手段,提交用户的软件质量不能完全保证。此外,硬件生产率大幅度提高,而软件生产规模和复杂度虽然增大,但软件生产率却低下,导致硬软件供需失衡,也是造成软件危机的重要因素。(3)软件开发人员在软件开发过程有不规范操作。78为了消除软件危机,就要彻底消除“软件就是程序”的错误观念,并正确认识到软件是程序,数据及其相关文档的集合。消除软件为还有做到,充分吸收和借鉴以往从事各种工程项目中积累下来的有效原理、概念、技术与方法,特别是吸取计算机硬件研究和开发中的经验教训。3.消除软件危机的途径3.消除软件危机的途径79按工程化的原则和方法组织软件开发工作。为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
软件工程作为研究如何克服软件危机的新兴工程学科诞生了。3.消除软件危机的途径3.消除软件危机的途径801.2软件工程
1.2.1软件工程的定义1.2.2软件工程的基本原理1.2.3软件工程知识体系1.2.4软件工程方法学1.2软件工程
1.2.1软件工程的定义811.2.1软件工程的定义很多专家学者和组织机构都对软件工程作出了定义:1968年在北大西洋公约组织会议上,计算机科学家为了应对“软件危机”,提出了软件工程的概念,Baue认为软件工程就是,“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。这个定义强调软件工程是一门工程学课。
1.2.1软件工程的定义很多专家学者和组821.2.1软件工程的定义IEEE在1983年对软件工程进行定义,“软件工程是开发、运行、维护和修复软件的系统方法”。十年后,IEEE又对软件工程给出一个更加综合的定义:“1)将系统化的,规范的,可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中;2)对上述方法的研究”。1.2.1软件工程的定义IEEE在198831.2.1软件工程的定义计算机科学技术百科全书》给出的定义是,软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。1.2.1软件工程的定义计算机科学技术百科全书841.2.1软件工程的定义比较被认可的一个定义认为:
软件工程是一门指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发和维护软件,并将经过时间考验而证明正确的管理技术和当前能够得到的最好技术相结合,开发出质量较高又经济的软件,并对其进行有效地维护。1.2.1软件工程的定义比较被认可的一个定义认为:851.软件工程的目标软件工程的目标就是要运用先进的软件开发技术和管理方法来提高软件的质量和生产率,也就是要生产出短周期、低成本且高质量的软件产品,并最终实现软件的工业化生产。1.软件工程的目标软件工程的目标就是要运用先862.软件产品应具有以下质量特性
(1)功能性:软件所实现的功能达到它的设计要求和满足用户需求的程度;(2)效率:在规定的条件下使用软件实现某种功能所需要的计算机资源的有效性;(3)可使用性,为了使用该软件所需要具有的知识和能力;(4)可靠性:在规定的时间和条件下,软件能够正常运行;能防止因概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。2.软件产品应具有以下质量特性(1)功能872.软件产品应具有以下质量特性
(5)可维护性;当软件交付使用后,由于环境改变或软件运行发生故障时,能够对软件进行相应的修改,使其恢复正常运行。可维护性是软件工程中一项十分重要的目标,软件维护所需要的费用独立于软件开发的费用且比后者更高。(6)可移植性:软件在不同计算机系统或环境之间进行转移时仍能正常运行和工作所做努力的程度。
2.软件产品应具有以下质量特性(5)可维88软件产品质量和软件工程目标的关系
软件产品质量和软件工程目标的关系891.2.2软件工程的基本原理为了确保软件产品质量和开发效率原理的最小集合,美国著名的软件工程专家巴利·玻姆(BarryBoehm)综合大量专家学者的意见,并总结了美国天合公司(TRW)多年的开发软件的经验,于1983年提出了软件工程的七条基本原理。
这七天基本原理相互独立,且相当完备,是在此之前已经提出的100多条软件工程准则的任意组合蕴含或派生。
1.2.2软件工程的基本原理为了确保软件901.2.2软件工程的基本原理1.用分阶段的生命周期计划严格管理2.坚持进行阶段评审3.实行严格的产品控制4.采纳现代程序设计技术5.结果应能清楚地审查6.开发组织的人员应少而精7.承认不断改进软件工程实践的必要性1.2.2软件工程的基本原理1.用分阶段的生命周期计划911.2.3软件工程知识体系确立软件工程专业最重要的就是要建立软件工程本体知识的结构。因此,1999年5月,ISO和IEC的第一联合技术委员会为顺应这种需求,立即启动了标准化项目一一“软件工程知识体系指南”。1.2.3软件工程知识体系确立软件工程专921.2.3软件工程知识体系软件工程知识体系指南的目标是:(1)促使软件工程本体知识在世界范围内被认可;(2)确定软件工程学科的范围,阐明软件工程与其他相关学科之间的关系;(3)体现软件工程学科内容的特征;(4)确定软件工程本体知识的各个专题;(5)为编写相应的课程和职业资格认证材料的提供依据。
1.2.3软件工程知识体系软件工程知识体系指南的目标是931.2.3软件工程知识体系经过几十个国家的几百名软件工程专家对软件工程知识体系指南多次的修改和编制,由IEEE主持的2004版软件工程知识体系指南(SWEBOK:GuidetoSoftwareEngineeringBodyofKnowledge2004Version)终于诞生了。1.2.3软件工程知识体系经过几十个国家941.2.4软件工程方法学通常将软件开发全过程中使用的一整套技术方法的集合称为方法学(methedology),也称为范型(paradigm)。软件工程方法学包含3个要素:方法、工具和过程。1.2.4软件工程方法学通常将软件开发全951.2.4软件工程方法学方法:完成软件开发的各项任务的技术方法,解决“怎样做”的问题,是软件工程学科的核心内容;工具:为运用方法而提供的自动的或半自动的软件工程支撑环境;过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。1.2.4软件工程方法学方法:完成软件开发的各项任务的技961.2.4软件工程方法学从上世纪60年代后期开始,出现了许多软件工程方法,其中最具影响的是结构化方法、面向对象方法、形式化方法。1.2.4软件工程方法学97也称为生命周期方法学或结构化范型。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后采用结构化技术来完成每个阶段的任务。1.结构化方法1.结构化方法98(1)结构化方法的优点
每个阶段的任务相对独立且简单,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度;每个阶段都采用科学的管理技术和良好的技术方法,而且在每个阶段结之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作。不仅大大提高了软件开发的成功率,而且也提高了软件开发的生产率。1.结构化方法1.结构化方法99
(2)结构化方法的缺点
由于结构化方法要么面向行为,要么面向数据,缺乏使两者有机结合的机制,对于软件规模较大,或者对软件的需求不明确或用户提出新要求时,使用结构化方法开发软件成功率较低。此外,采用这种方法开发的软件可重用程度低,造成软件很难维护,这是一个严重的弊端。1.结构化方法1.结构化方法100面向对象方法是一种以数据为主线,把数据和对数据的操作紧密地结合起来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考虑冲刷条件下的黄河滩区透水桩坝水平承载特性研究
- 基于IL-25信号通路研究益气温阳护卫汤治疗支气管哮喘的作用机制
- J公司H项目施工成本控制改进研究
- 健身雇佣合同范本
- 大保洁合同范本
- 医学级去眼袋眼膜行业跨境出海战略研究报告
- 再生塑料家具系列企业制定与实施新质生产力战略研究报告
- 家用便携式血压血糖仪企业制定与实施新质生产力战略研究报告
- 卧室用藤家具企业数字化转型与智慧升级战略研究报告
- 儿童多种维生素滴剂行业跨境出海战略研究报告
- 2025年茂名市高三年级第一次综合测试(一模)物理试卷(含答案)
- 2025年重症医学科(ICU)护理工作计划
- 四川省名校2025届高三第二次模拟考试英语试卷含解析
- 2024各科普通高中课程标准
- 中小学校园课间时间巡查工作方案
- 《垂体瘤规范化诊治》课件
- 早产临床防治指南(2024版)解读
- 艾草种植基地合同(2篇)
- GB/T 30661.10-2024轮椅车座椅第10部分:体位支撑装置的阻燃性要求和试验方法
- 《电子商务法律法规》电子商务专业全套教学课件
- 空调制冷管道施工协议
评论
0/150
提交评论