第一章 绪论软件工程.docx
《第一章 绪论软件工程.docx》由会员分享,可在线阅读,更多相关《第一章 绪论软件工程.docx(12页珍藏版)》请在冰点文库上搜索。
![第一章 绪论软件工程.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/2a97b6e0-0d31-43c0-90fa-f41b6ddc928e/2a97b6e0-0d31-43c0-90fa-f41b6ddc928e1.gif)
第一章绪论软件工程
第一章:
绪论
1.1软件工程的产生
1.1.1软件的特点
“软件”一词是20世纪60年代才出现的,它是指:
计算机程序及其说明程序的各种文档。
"程序"是计算任务的处理对象和处理规则的描述;“文档”是有关计算机程序功能、设计、编制、使用的文字或图形资料。
软件与硬件一起构成完整的计算机系统,它们是相互依存,缺一不可的。
软件是一种特殊的产品,它具有以下独特的特性。
(1)软件是一种逻辑产品,它与物质产品有很大的区别。
软件产品是看不见摸不着的,因而具有无形性,它是脑力劳动的结晶,它以程序和文档的形式出现,保存在计算机存储器和光盘介质上,通过计算机的执行才能体现它的功能和作用。
(2)软件产品的生产主要是研制,软件产品的成本主要体现在软件的开发和研制上,软件开发研制完成后,通过复制就产生了大量软件产品。
(3)软件产品不存在磨损、消耗问题。
(4)软件产品生产的成本主要是脑力劳动,还未完全摆脱手工开发方式,大部分产品是“定做”的。
(5)软件费用不断增加,软件成本相当昂贵。
软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本非常高。
按软件的功能划分:
系统软件:
能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效率地工作的软件。
如操作系统、数据库管理系统、设备驱动程序以及通信处理程序等。
系统软件是计算机系统中必不可少的一个组成部分。
应用软件:
是在特定的领域内开发,为特定目的服务的一类软件。
如,CAD-CAM计算机辅助制造-CAI计算机辅助教学,专家系统,模式识别,刹车系统
支撑软件:
是协助用户开发软件的工具性软件,其中包括帮助程序人员开发软件产品的工具,也包括帮助管理人员控制开发的进程的工具。
按规模划分:
1、微型--只有一个人,甚至是半时,在几天之内完成的软件。
写出的程序不到500行语句。
2、小型--一个人半年之内完成的2千行以内的程序。
例如,数值计算问题或是数据处理问题就是这种规模的课题。
这种程序通常没有与其他程序的接口。
如,有求伯君开发最初的WPS,单独完成BASIC的比尔.盖茨。
3、中型--5人以内在一年多时间里完成的5千到5万行的程序。
这种课题开始出现了软件人员之间,软件人员与用户之间的联系、协调和配合关系的问题。
4、大型--5人至10人在两年多的时间里完成5万行到10万行的程序。
例如编译程序、小型分时系统、应用软件包、实时控制系统等很可能都是这种软件。
5、甚大型--100人至1000人参加
6、极大型--2000-5000人参加,如,微软的windows2000项目就包含了近3000名工程师,他们被分成几百个小的团队。
按开发分---软件产品和软件项目
软件产品---指的是不局限于特定领域的、可以被广大用户直接使用的软件系统。
如微软的Windows,Office等。
这类系统的特点是技术含量高,开发时要考到各种不同的用户需求;
软件项目--也称定制软件,是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约如我们常说的管理信息系统(MIS)和电子商务系统。
这类软件的特点是领域知识所占的比重较大,相对技术而言工程性更强。
例如,军用防空指挥系统、卫星控制系统等均为这类软件。
1.1.2软件生产的发展
自从第一台计算机诞生以后,就开始了软件的生产,到现在为止,经过了三个阶段。
即程序设计时代,程序系统时代,软件工程时代。
1.程序设计时代(1964年~1956年)
这个阶段的生产方式是个体手工劳动,使用的工具是机器语言,汇编语言。
2.程序系统时代(1956年~1968年)
这阶段的生产方式是作坊的小集团合作生产,生产工具是高级语言,开发方法仍旧靠个人技巧,但开始提出结构化方法。
3.软件工程时代(1968年至现在)
这阶段的生产方式是工程化的生产,使用数据库、开发工具、开发环境、网络、分布式、面向对象技术来开发软件。
1.1.3软件危机
1.软件危机的产生:
软件发展到第二阶段末期,在计算机软件的开发和维护中所遇到了一系列严重问题,导致了软件危机。
(课本上的定义为:
软件开发技术的进步未能满足发展的要求。
在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。
)
2.软件危机的表现:
(1)经费预算经常突破,完成时间一再拖延。
(2)开发的软件不能满足用户要求。
(3)开发的软件可维护性差。
(4)开发的软件可靠性查。
3.软件危机产生的原因:
(1)软件的规模越来越大,结构越来越复杂。
(2)软件开发管理困难而复杂。
(3)软件开发费用不断增加。
(4)软件开发技术落后。
(5)生产方式落后。
(6)开发工具落后,生产提高缓慢。
1.1.4软件工程
1.软件工程定义:
用科学知识和技术原理来定义、开发、维护软件的一门学科。
为达到软件优质高产这个目标,从技术到管理做了大量的努力,从而逐渐已形成了"软件工程学"这一新学科。
2.软件工程性质
软件工程是一门综合性的交叉学科,它涉及计算机科学、工程科学、管理科学、数学等领域。
计算机科学中的研究成果均可用于软件工程,但计算机科学着重于原理和理论,而软件工程着重于如何建造一个软件系统。
用工程科学的观点进行费用估算,制定进度,制定计划和方案。
用管理科学的方法和原理进行生产的管理。
用数学的方法建立软件开发中的各种模型和算法。
3.软件工程目标
(1)付出较低的开发成本;
(2)达到要求的软件功能;(3)取得较好的软件性能;(4)开发的软件易于移植;(5)需要较低的维护费用;(6)能按时完成开发任务,及时交付使用;(7)开发的软件可靠性高。
4.软件工程内容
软件工程研究的主要内容是软件开发技术和软件管理两方面。
在软件开发技术中,主要研究软件开发方法、软件开发过程、软件开发工具和环境。
在软件开发管理中,主要是研究软件管理学、软件经济学、软件心理学等。
5.软件工程面临(即需要解决)的问题
(1)软件费用
(2)软件可靠性
(3)软件维护
(4)软件生产率
(5)软件重用
1.2软件工程和软件生存周期
1.2.1软件工程过程
软件工程过程规定了获取、供应、开发、操作和维护软件时,要实施的过程、活动和任务。
其目的是为各种人员提供一个公共的框架,以便用相同的语言进行交流。
软件工程过程包含如下七个过程
(1)获取过程。
(2)供应过程。
(3)开发过程。
(4)操作过程。
(5)维护过程。
(6)管理过程。
(7)支持过程。
1.2.2软件生存周期
软件生存周期是指一个软件从提出开发要求开始直到该软件报废为止的整个时期。
通常,软件生存周期包括可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等活动,可以将这些活动以适当方式分配到不同阶段去完成。
1.可行性分析和项目开发计划
明确“要解决的问题是什么?
”,“解决的问题的办法和费用”,“解决的问题所需的资源和时间”。
要回答这些问题,就要进行问题定义、可行性分析,制定项目开发计划。
2.需求分析
需求分析阶段的任务是准确地确定软件系统必须做什么,确定软件系统具备哪些功能。
写出软件需求规格说明书。
3.概要设计
概要设计的任务是把软件需求规格说明书中确定的各项功能转换成需要的体系结构。
4.详细设计
详细设计阶段就是为每个模块完成的功能进行具体描述,要把功能描述转变为精确的、结构化的过程描述。
5.编码
编码阶段就是把每个模块的控制结构转换成计算机可接受的程序代码。
6.测试
测试是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检验软件的各个组成部分。
测试分为单元测试、集成测试、确认测试。
7.维护
软件维护是软件生存周期中时间最长的阶段。
已交付的软件投入正式使用后,便进入软件维护阶段,它可以持续几年甚至几十年。
1.3软件生存周期模型、方法和工具
1.3.1软件生存周期模型
软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。
对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。
目前有若干种软件生存周期模型。
例如:
瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型。
1.瀑布模型
瀑布模型是将软件生存周期各个活动规定为自上向下,按照线性顺序连接的若干阶段的模型。
该模型支持结构化的设计方法,但它是一种理想的线性开发模式,缺乏灵活性,无法解决软件需求不明确或不准确的问题。
2.增量模型
增量模型是一种非整体开发的模型。
软件在该模型中是“逐渐”开发出来的。
该模型有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。
3.螺旋模型
螺旋模型是一种风险驱动的模型。
将瀑布模型与增量模型结合起来,加入风险分析,弥补了这两种模型的不足。
开发分四步:
制定计划,风险分析,开发实施,用户评估。
螺旋模型适合于大型软件的开发,螺旋模型由上述四个阶段组成的迭代模型,迭代的结果必须尽快收敛到客户允许的或可接受的目标范围内。
4.喷泉模型
喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法,使开发过程具有迭代性和无间隙性。
迭代性:
系统有些部分常常重复工作多次,相关功能在每次迭代中随之加入演化的系统。
无间隙:
在分析,设计,实现等开发活动之间不存在明显边界。
5.基于知识的模型
基于知识的模型又称智能模型,它把瀑布模型和专家系统结合在一起。
该模型在开发的各个阶段都利用相应的专家系统来帮助软件人员完成开发工作,使维护在系统需求说明阶段开始。
该模型还处于研究实验阶段,还未达到实用阶段。
6.变换模型
这是一种适合于形式化开发方法的模型。
从软件需求形式化说明开始,经过一系列变换,最终得到系统的目标程序。
生存周期模型作用:
确立了软件开发中各阶段的次序限制,活动准则,所要遵守的规定和限制,便于各种活动的协调,人员之间的有效通信,有利于活动重用和活动管理。
生存周期模型准则:
模型能表示各种活动的实际工作方式,能随情况变化而演化能表示各种活动间同步和制约关系,能表示活动的动态特性。
容易为开发人员理解,能适应不同软件项目,具有较强灵活性,能支持软件开发环境的建立。
1.3.2软件开发方法
软件开发方法是一种使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。
软件开发的目标是在规定的投资和时间内,开发出符合用户需求的高质量的软件。
为了达到此目的,需要成功的开发方法。
下面介绍几种常用的软件开发方法。
1.结构化方法
结构化方法由结构化分析、结构化设计、结构化程序设计构成。
它是一种面向数据流的开发方法。
该方法采用自顶向下、逐步求精的指导思想,应用较广,技术成熟。
结构化分析是根据分解与抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能模型,从而完成需求分析工作。
结构化设计是根据模块独立性准则、软件结构准则将数据流图转换为软件的体系结构,用软件结构图来建立系统的物理模型,实现系统的概要设计。
结构程序设计是根据结构程序设计原理,将每个模块的功能用相应的标准控制结构表示出来,从面实现详细设计。
结构化方法不适应规模大的项目,对于特别复杂的项目,该方法难于解决软件重用问题,难于适应需求变化的问题,难于彻底解决维护问题。
2.Jackson方法
这是一种面向数据结构的开发方法。
JSP方法是以数据结构为驱动的,适合于小规模的项目。
3.维也纳开发方法(VDM)
这是一种形式化的开发方法,软件的需求用严格的形式语言描述,然后把描述模型逐步变换成目标系统。
4.面向对象的开发方法
面向对象的开发方法完全不同于传统开发方法,它是90年代的主流开发方法。
面向对象开发方法包括面向对象分析、面向对象设计、面向对象实现。
面向对象开发方法有Booch方法、Coad方法和OMT方法等。
为了统一各种面向对象方法的术语、概念和模型,1997年推出了统一建模语言,即UML(UnifiedModelingLanguage)语言。
它是面向对象的标准建模语言,通过统一的语义和符号表示,使各种方法的建模过程和表示统一起来,将成为面向对象建模的工业标准。
结构化方法可用:
瀑布模型,增量模型,螺旋模型进行开发。
JACKSON方法可用:
瀑布模型,增量模型进行开发。
面向对象的开发方法可用:
喷泉模型,瀑布模型,增量模型进行开发。
形式化的维也纳方法只能用变换模型进行开发。
1.3.3软件开发工具
1.软件工具的重要性
软件工具一般使指为了支持软件人员开发和维护活动而使用的软件。
使用软件工具后,可提高软件生产率。
目前软件工具发生了很大变化,目的是生成软件周期各个环节的自动化。
主要用于软件的分析和设计,使用这些工具软件开发人员就能在微机或工作站上以对话方式建立各种软件系统。
2.工具箱
最初的软件工具是以工具箱的形式出现的,一种工具支持一种开发活动,然后将各种工具简单具有结合起来就构成工具箱。
但界面不统一,工具内部无联系,工具切换由人工操作。
它们对大型软件的开发和维护的支持能力有限。
3.软件开发环境
由于工具箱存在的问题,人们在工具系统的整体化及集成化方面开展一系列研究工作,使之形成完整的软件环境。
目的是使软件工具支持整个生存周期。
而且做到不仅支持各阶段的技术工作,还要支持管理和操作工作,保持项目开发的高度可见性,可控制性和可追踪性。
4.计算机辅助软件工程
计算机辅助软件工程可以简单地定义为软件开发地自动化,通常简称为CASE(ComputerAidedSoftwareEngineering)。
实质是为软件开发提供一组优化集成的,大量节省人力的软件开发工具。
是软件工具和软件开发方法的结合。
目的是实现软件生存周期各环节的自动化,并使之成为一个整体。
CASE工具与以往软件工具不同体现在:
(1)支持专用的个人计算环境;
(2)使用图形功能对软件系统进行说明并建立文档;
(3)将生存周期各阶段的工作连接在一起;
(4)收集和连接软件系统从最初的软件需求到软件维护各个环节的所有信息;
(5)用人工智能实现软件开发和维护工作的自动化。
第1章自测题及参考答案
一、名称解释
1.软件 2.文档 3.软件工程
4.软件生存周期5.软件工程过程6.软件生存周期模型
7.软件开发方法8.结构化程序设计9.软件工具
二、填空题
1.构成一个完整计算机系统的两部分是硬件与________。
(软件)
2.程序设计时代的生产方式是________。
(个体手工劳动)
3.软件工程涉及到几个学科,它是一门_____学科。
(综合性交叉)
4.软件开发划分的各阶段任务尽可能独立,同一阶段任务性质尽可能________。
(相同)
5.将软件生存周期各个活动规定为依线性顺序联接的若干阶段的模型是________模型。
(瀑布)
6.喷泉模型是一种以用户需求为动力,以_______为驱动的模型。
(对象)
7.结构化方法是一种面向数据流的开发方法。
由结构化分析、_______、结构化程序设计构成。
(结构化设计)
8.软件工程研究的主要内容是软件开发管理和_______两个方面。
(软件开发技术)
9.软件工具是支持软件开发人员的开发和维护活动而使用的________。
(软件)
10.一个软件项目的开发中,要采用一种生存周期模型,要按照某种________,使用相应的工具来进行。
(开发方法)
三、选择题
1.软件是一种( B )产品。
A.物质 B.逻辑 C.有形 D.消耗
2.软件产品的开发主要是( D)。
A.复制 B.再生产 C.拷贝 D.研制
3.个体手工劳动生产方式的时代是( A )。
A.程序设计B.软件生产自动化C.程序系统D.软件工程
4.与计算机科学的理论研究不同,软件工程是一门( C )学科。
A.理论性 B.原理性 C.工程性 D.心理性
5.软件重用的单位是( A)。
A.软件模块B.性能 C.系统 D.功能
6.软件开发费用只占整个软件系统费用的( B)。
A.1/2 B.1/3 C.1/4 D.2/3
7.软件开发中大约要付出( C)%的工作量进行测试和排错。
A.20 B.30 C.40 D.50
8.准确地解决“软件系统必须做什么”是( B)阶段的任务。
A.可行性研究B.需求分析 C.详细设计 D.编码
9.软件生存周期中最长的是( D)阶段。
A.需求分析B.概要设计 C.测试 D.维护
第1章例题分析与解答
一、填空题
1.软件与物质产品有很大的区别,软件是一种_______产品。
答案:
逻辑
2.软件工程是一门综合性交叉学科,计算机科学着重于理论和原理,软件工程着重于_______。
答案:
建造一个软件系统
3.概要设计主要是把各项功能需求转换成系统的________。
答案:
体系结构
4.最基本、应用广泛、以文档为驱动、适用于开发功能明确的软件项目生存期模型是_______。
答案:
瀑布模型
5.简单实用、应用广泛、技术成熟的开发方法是________。
答案:
结构化方法
二、选择题
1.同一软件的大量软件产品的生产主要是通过( )而得到。
A.研究 B.复制 C.开发 D.研制
答案:
B
2.作坊式小团体合作生产方式的时代是( )时代。
A.程序设计 B.软件生产自动化C.程序系统 D.软件工程
答案:
C
3.软件工程与计算机科学性质不同,软件工程着重于( )。
A.理论研究 B.原理探讨 C.建造软件系统D.原理的理论
答案:
C
4.将每个模块的控制结构转换成计算机可接受的程序代码是( )阶段的任务。
A.编码 B.需求分析 C.详细设计 D.测试
答案:
A
5.软件生存周期中时间最长的是( )阶段。
A.需求分析 B.概要设计 C.测试 D.维护
答案:
D
《软件工程》习题参考答案1
1﹑软件产品的特性是什么?
产品特性:
⑴是一种逻辑产品,与物质产品有很大的区别。
⑵软件产品的生产主要是研制,生产成本主要在开发和研制,开发研制完成后,通过复制就产生了大量软件产品。
⑶软件产品不会用坏,不存在磨损,消耗。
⑷生产主要是脑力劳动,还末完全摆脱手工开发方式,大部分产品是"定做"的。
⑸开发软件的费用不断增加,致使生产成本相当昂贵。
2﹑软件生产有几个阶段?
各有何特征?
⑴程序设计时代:
这个阶段生产方式是个体劳动,使用的生产工具是机器语言,汇编语言。
⑵程序系统时代:
这个阶段生产方式是小集团合作生产,使用的生产工具是高级语言,开发方法仍依靠个人技巧,但开始提出结构化方法。
⑶软件工程时代:
这个阶段生产方式是工程化的生产,使用数据库﹑开发工具﹑开发环境﹑网络﹑分布式﹑面向对象技术来开发软件。
3﹑什么是软件危机?
产生原因是什么?
软件开发技术的进步未能满足发展的要求。
在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。
产生原因:
⑴软件规模越来越大,结构越来越复杂。
⑵软件开发管理困难而复杂。
⑶软件包开发费用不断增加。
⑷软件开发技术落后。
⑸生产方式落后,仍采用手工方式。
⑹开发工具落后,生产率提高缓慢。
4﹑什么是软件工程?
它目标和内容是什么?
软件工程就是用科学知识和技术原理来定义、开发、维护软件的一门学科。
软件工程目标:
付出较低开发成本;达到要求的功能;取得较好的性能;开发的软件易于移植;只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。
软件工程内容:
研究内容包括开发技术和开发管理两个方面。
开发技术主要研究:
软件开发方法,开发过程,开发工具和环境。
开发管理主要研究:
软件管理学,软件经济学,软件心理学。
5﹑软件工程面临的问题是什么?
软件工程需要解决的问题:
软件的费用,可靠性,可维护性,软件生产率和软件的重用。
6﹑什么是软件生存周期?
它有哪几个活动?
软件生存周期:
一个软件从提出开发要求开始直到该软件报废为止的整个时期。
包括:
可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护。
7﹑什么是软件生存周期模型?
有哪些主要模型?
生存周期模型:
描述软件开发过程中各种活动如何执行的模型。
对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。
主要有:
瀑布模型,增量模型,螺旋模型,喷泉模型,基于知识的模型,变换模型。
8﹑什么是软件开发方法?
有哪些主要方法?
使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。
通过使用成功的软件开发方法,在规定的投资和时间内,开发出符合用户需求的高质量的软件。
软件开发方法是克服软件危机的重要方面之一,对软件工程及软件包产业的发展起了不可估量的作用。
主要有:
结构化方法,JACKSON方法,维也纳开发方法﹙VDM﹚,面向对象开发方法。