搜档网
当前位置:搜档网 › 第01章软件工程概述

第01章软件工程概述

第01章软件工程概述
第01章软件工程概述

第一章软件工程概述

我们知道,计算机软件是整个计算机系统中具体实现各种功能和操作的核心部分。软件工程即采用工程的概念、原理、技术和方法来开发和维护软件,将工程管理技术成功的经验和思想与具体软件的开发过程、研究技术相结合,形成一整套适合于计算机软件开发的方法、规范和技术。因此,软件工程这门课程,对于从事软件开发研究的专业人员,特别是高层次的管理、分析、开发人员,显得比以往更加重要。

1.1 软件工程的基本概念、特点、分类

1.1.1软件的概念、特点

计算机软件是程序、数据及相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列,数据是使程序能正常操纵信息的数据结构,文档是与程序开发、维护和使用有关的图文材料。

要深入进行计算机软件的开发和研究,首先要了解计算机软件的特点和计算机软件开发的规律。计算机软件可归结具有如下几个共同特点:

1、软件是一种逻辑实体,而不是具体的物理实体。因此,它具有抽象性。

2、软件的生产与硬件不同,软件是由开发或工程化而形成的,它没有明显的制造过程。对软件的质量控制,必须立足于软件开发方面。软件成为产品之后,其制造只是简单的拷贝而已。

3、任何机械、电子设备在运行和使用过程中,其失效率大致遵循如图1-1所示的U型曲线(即浴盆曲线)。软件的情况与此不同,它不存在磨损和老化问题。然而,它存在退化问题,设计人员必须多次修改(维护)软件,图1-2(a)给出了软件故障率的理想曲线,图1-2(b)

给出了实际的软件故障率曲线。

4、软件的开发和运行往往受到计算机系统的限制,对计算机系统有着不同程度的依赖性。为了解除这种依赖性,在软件开发中提出了软件移植的问题。

5、迄今为止,软件的开发尚未完全摆脱手工艺的方式。

6、软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。

7、软件的成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它投入的成本是比较高的。

8、相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构设置、体制运作及管理方式等问题,甚至涉及到人们的观念和心理,这些因素直接影响到项目的成败。

9、从市场上买到的软件,它本身就是一个完整的软件,而不能作为构件再组装成新的程序。但目前已有大量的支持“软件复用”的软件和中间件作为相对独立的构件。

1.1.2 软件的分类

软件按其功能进行划分,可分为如下几大类:

1、系统软件能与计算机硬件紧密配合,使计算机系统的各个部件、相关的软件和数据协调、高效地工作的软件。例如,操作系统、数据库管理系统、设备驱动程序以及通信处理程序等。

2、支撑软件协助用户开发软件的工具性软件,包括帮助程序人员开发软件产品的工具,也包括帮助管理人员控制开发进程的工具。

3、应用软件在特定领域内开发,为特定目的服务的软件。

按软件的规模进行划分

按开发软件所需的人力、时间以及完成的源程序行数,可确定6种不同规模的软件,如表1-1所示。

表1-1 软件规模分类参考表

规模大、开发时间长、参加人数多的软件项目,其开发工作必须有软件工程的知识做指导。而规模小、开发时间短、参加人员少的软件项目也要有软件工程的概念,遵循一定的开发规范。其基本原则是一样的,只是对软件工程技术依赖的程度不同而已。从表中还可看出,随着项目规模的不断增大,平均开发效率将不断降低,

按软件的工作方式进行划分

1、实时处理软件指在事件或数据产生时对其立即处理,并及时反馈信号以控制需要监测的过程的软件。实时处理软件主要包括数据采集、分析、输出3个部分。

2、分时软件允许多个联机用户同时使用计算机的软件。

3、交互式软件能实现人机通信的软件。

4、批处理软件把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理的软件。

按软件服务对象的范围进行划分

1、项目软件也称定制软件,是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发的软件,如军用防空指挥系统、卫星控制系统等。

2、产品软件由软件开发机构开发并直接提供给市场,或是为众多用户服务的软件,如文字处理软件、文本处理软件、财务处理软件、人事管理软件等。

按软件失效的影响进行划分

有的软件在工作中因出现故障而失效,可能对整个软件系统的影响不大。有的软件一旦失效,可能带来灾难性后果,如财务金融软件、交通通信软件、航空航天软件等,称这类软件为关键软件。

1.1.3 软件工程概述

许多计算机软件专家尝试,把其它工程领域中行之有效的工程学知识运用到软件开发工作中来。经过不断的实践和总结,最后得出结论:按工程化的原则和方法组织软件开发工作是有效的,是缓解软件危机的一个有效办法。

(1)软件工程过程(Software Engineering Process)

软件工程过程是指为了获得软件产品,在软件工具的支持下由软件开发人员完成的一系列软件工程活动。软件工程过程通常包含以下4种基本活动:

① P(Plan) 软件计划及规格说明过程。规定软件的功能及其运行时的限制。

② D(Do) 软件开发过程。产生满足规格说明的软件。

③ C(Check) 软件确认过程。确认软件能够满足客户提出的要求。

④ A(Action) 软件演进过程。为满足客户的变更要求,软件必须在使用的过程中演进。事实上,软件工程过程是一个软件开发机构针对某类软件产品为自己规定的工作步骤,它应当是科学的、合理的,否则必将影响软件产品的质量。

(2)软件生存周期(Life Cycle)

同其他任何事物一样,软件也存在从开始到衰亡的生存过程,通常称其为计算机软件的生存周期。针对不同的模型、不同的开发对象、不同的开发方法,对于软件的生存周期可以有不同的划分,如果不考虑上述因数及应用领域、项目规模和复杂性,与软件工程相关的工作可分为以下三个阶段。

定义阶段:集中于“做什么”。即在定义过程中,软件开发人员试图弄清楚要处理什么信息,预期完成什么样的功能和性能,希望有什么样的系统行为,建立什么样的界面,有什么设计约束,以及定义一个成功系统的确认标准是什么。即定义系统和软件的关键需求。虽然在定义阶段采用的方法取决于使用的软件工程范型(或范型的组合),但在某种程度上均有三个主要任务:系统或信息工程,软件项目计划,和需求分析。

开发阶段:集中于“如何做”。即在开发过程中,软件工程师试图定义数据如何结构化,功能如何转换为软件体系结构,过程细节如何实现,界面如何表示,设计如何转换成程序设计语言(或非过程语言),测试如何执行。在开发阶段采用的方法可以不同,但都有三个特定的任务:软件设计,代码生成,和软件测试。

维护阶段:集中于“改变”,与以下几种情况相关:纠正错误;随着软件环境的演化,而要求的适应性修改;及由于用户需求的变化而带来的增强性修改。维护阶段重复定义和开发阶段的步骤,但却是在已有软件的基础上发生的。

在维护阶段可能遇到四类修改要完成:

纠错:即使有最好的质量保证机制,用户还是有可能发现软件中的错误。纠错性维护是为了改正错误而使软件发生变化。

适应:随着时间的推移,原来的软件被开发的环境(如CPU、操作系统、商业规则、外部产品特征)可能发生了变化。适应性维护是为了适应这些外部环境的变化而修改软件。

增强:随着软件的使用,用户可能认识到某些新功能会产生更好的效益。完善性维护是由于扩展了原来的功能需求而修改软件。

预防:计算机软件由于修改而逐渐退化,因此,预防性维护,常常称为软件再工程,就必须实行,以使软件能够满足其最终用户的要求。本质上讲,预防性维护对计算机程序的修改,可使得能够更好地纠错软件的错误,提高软件的适应性和增强软件的需求。

(3)软件开发中对问题的分析方法

软件开发人员通常要处理的问题与计算机系统有关,但在进行软件开发的初期,问题本身往往与计算机没有直接的关系。因此,首先理解问题的本质是很重要的。特别地,我们必须要小心,不要把计算机技术强加于我们遇到的每个问题上。首先必须解决这个问题。然后,如果需要,使用技术作为工具来实现我们的解决方案。

大多数问题是庞大而复杂的,有时处理起来棘手。因此人们一般是从对问题的分析入手,进行调查,将一个复杂的问题分解为若干个相对比较简单的子问题,如果处理起来还有困难,则可将子问题继续进行二次划分,直到分解成为我们能理解并尽量能处理的问题片。因而我们能够把这个大问题用小问题集和它们间的相互关系来描述。图1-3解释了如何分析。重要的是要记住关系(图中的箭头,及子问题的相对位置)跟子问题本身一样重要。有时,正是关系保持着怎样解决大问题的线索,而不简单是子问题的本身特性。

一旦分析了问题,我们必须从表述问题各方面的部件来构建解决方案。图1-4解释了这个相反的过程:综合(Synthesis),就是把从小建筑块装配成一个大建筑。随着分析,单个解决方案的合成可能跟寻找这些方案本身一样富有挑战性。为了弄清为什么,考虑写一本小说的过程。字典包含了所有你可能想在作品里使用的词。但是,写作最困难的部分就是决定怎样组字成句,同样的,组句成段、章以形成这部完整的书。因此,任何解决问题的技巧必须有两部分:分析问题以弄清它的本质,然后基于分析综合/合成出一个解决方案。

为了有助于解决问题,我们使用各种方法(method )、工具(tool )、程序(procedure )及范例(paradigm )。一种方法(method/technique )就是一种用于产生某种结果的正式的程序(procedure )。例如,一个厨师准备调料时,他使用一系列成分并结合一套仔细排好的时、序步骤以便调料变浓但又不凝固或分散。准备调料的程序与时间选择和成分有关但可能并不依赖于使用何种类型的烹饪设备。

一件工具(tool )是一件能以更好的方式完成某件事情的设备或自动化系统。在这里“更好方式”可能意味着这件工具使用我们更准确、更有效率、或更多产、或增强了所得产品的质量。例如,我们使用打字机或键盘和打印机来写信是因为所得文档比手写更易于阅读。或者我们用一把剪刀作为一种工具是因为比起撕一张纸使用剪刀会剪得更快更直。然而,工具并不总是更好地做某件事所必须的。例如,一个烹饪方法能做出更好的调料而不是厨师所使用的罐也非勺。

一个程序(procedure )就象一个秘诀:是一致地产生特别产品的工具和方法的组合。打个比方,就象将在后面章节看到的,我们的测试计划描述了我们的测试程序;它们告诉我们在何种情形下用何种工具作用在何种数据集上以便让我们检查出软件是否满足要求。

最后,范例就象一种烹饪风格;它提供了一个特别的构建软件的方案或哲学。恰就象我们能区别出法国烹饪和中国烹饪一样,我们也能区别出象面向对象开发和过程化开发这样的范例。一种范例比不比另一个好;每一种都有它自己的优势和劣势,一个比另一个更恰当是有条件的。

软件工程师使用工具、方法、程序和范例来增强他们软件产品的质量。他们的目标就是使用有效的富有成果的途径来产生有效的问题解决方案。在后续几章中,我们将突出一些支持我们所述的开发维护活动的特别途径。 1.2 软件发展和软件危机

1.2.1软件的发展

自从20世纪40年代中期出现了世界上第一台计算机,就产生了程序的概念。当时,大多数人把软件看成是不需预先计划的事情。计算机编程很简单,没有什么系统化的方法。软件的开发没有任何管理,一旦计划延迟了或成本提高了,程序员才开始手忙脚乱地弥补,而他们的努力一般情况下也会取得成功。

在通用的硬件已经非常普遍的时候,软件却相反,对每一类应用均需自行再设计,应用范围很有限。软件产品还在婴儿阶段,大多数软件均是由使用它们的人员或组织自己开发的,如你写软件,使其运行,如果它有问题,你负责改好。工作的可变性很低,管理者必须得到

保证:一旦发生了错误你必须在那里。因为这种个人化的软件环境,设计往往仅是人们头脑中的一种模糊想法,而文档就根本不存在。

其后经过几十年的发展,计算机软件经历了4个发展阶段:

(1)程序设计阶段,约为20世纪五六十年代。

(2)程序系统阶段,约为20世纪六七十年代。

(3)软件工程阶段,约为20世纪七十年代以后。

(4)面向对象软件工程阶段,约为20世纪八十年代以后。

图1-5 软件的发展

软件发展最根本的变化体现在以下几个方面:

(1)人们改变了对软件的看法。在20世纪五六十年代时,程序设计曾经被看做一种任人发挥创造才能的技术领域。当时人们认为,程序运行后只要能在计算机上得出正确的结果,程序的写法可以不受任何约束。随着计算机的使用范围日趋广泛,人们要求这些程序易懂、易使用,并且容易修改和扩充。于是,程序便从按个人意图创造的“艺术品”转变为能被广大用户接受的工程化产品。

(2)软件的需求是软件发展的动力。早期的程序开发只是为了满足开发者自己的需要,这种自给自足的生产方式是其低级阶段的表现。进入软件工程阶段后,软件开发的成果具有社会属性,它要在市场中流通以满足广大用户的需要。

(3)软件工作的考虑范围从只顾及程序的编写扩展到涉及整个软件生存周期。

1.2.2软件危机过程

从60年代中期到70年代中期是计算机系统发展的第二代时期,随着计算机硬件技术的进步,要求软件能与之相适应,这个时期的一个重要特征是出现了“软件作坊”,广泛使用产品软件。但是,“软件作坊”基本上仍然沿用早期形成的个体化软件开发方法。随着计算机应用的日益普及,软件数量急剧膨胀,软件技术的进步一直未能满足形势发展提出的要求,致使问题堆积起来,形成日益尖锐的矛盾,在程序运行时发现的错误必须设法改正;用户有了新的需求时必须相应地修改程序;硬件或操作系统更新时,通常需要修改程序以适应新的环境。上述种种软件维护工作,以令人吃惊的比例耗费资源。更严重的是,许多程序的个体化特性使得它们最终成为不可维护的。“软件危机”就这样开始出现了。1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了“软件工程”这个名词,软件工程学由此产生。

软件危机的主要表现

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是“不能正常运行的”软件才具有的,实际上几乎所有软件都不同程度地存在这些问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,怎样满足对软件的日益增长的需求;如何维护数量不断膨胀的已有软件。具体地说,软件危机主要有下述一些表现形式:

(1)对软件开发成本和进度的估计常常很不准确。实际成本比估计成本有可能高出一个数量级,实际进度比预期进度拖延几个月甚至几年的现象并不罕见。这种现象降低了软件开发组织的信誉。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量,从而不可避免地会引起用户的不满。

(2)用户对“已完成的”软件系统不满意的现象经常发生。软件开发人员常常在对用户要求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就仓促上阵匆忙着手编写程序。软件开发人员和用户之间的信息交流往往很不充分,“闭门造车”必然导致最终的产品不符合用户的实际需要。

(3)软件产品的质量往往靠不住。软件可靠性和质量保证的确切的定量概念刚刚出现不久,软件质量保证技术(审查、复审和测试)还没有坚持不懈地应用到软件开发的全过程中,这些都导致软件产品发生质量问题。

(4)软件常常是不可维护的。很多程序中的错误是非常难改正的,实际上不可能使这些程序适应新的硬件环境,也不能根据用户的需要在原有程序中增加一些新的功能。“可重用的软件”还是一个没有完全做到的、正在努力追求的目标,人们仍然在重复开发类似的或基本类似的软件。

(5)软件通常没有适当的文档资料。计算机软件不仅仅是程序,还应该有一整套文档资料。这些文档资料应该是在软件开发过程中产生出来的,而且应该是“最新式的”(即和程序代码完全一致的)。软件开发组织的管理人员可以使用这些文档资料作为“里程碑”,来管理和评价软件开发工程的进展状况;软件开发人员可以利用它们作为通信工具,在软件开发过程中准确地交流信息;对于软件维护人员而言,这些文档资料更是至关重要必不可少的。缺乏必要的文档资料或者文档资料不合格,必然给软件开发和维护带来许多严重的困难和问题。

(6)软件成本在计算机系统总成本中所占的比例逐年上升。由于微电子学技术的进步和生产自动化程度不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本随着通货膨胀以及软件规模和数量的不断扩大而持续上升。美国在1985年软件成本大约已占计算机系统总成本的90%。

(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。

以上列举的仅仅是软件危机的一些明显的表现,与软件开发和维护有关的问题远远不止这些。

产生软件危机的原因

在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。

软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量,软件开发的质量也较难评价,因此,管理和控制软件开发过程相当困难。此外,软件在运行过程中不会因为使用时间过长而被“用坏”,如果运行中发现错误,很可能是遇到了一个在开发时期引入的在测试阶段没

能检测出来的故障。因此,软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护。

软件不同于一般程序,它的一个显著特点是规模庞大。例如,美国四代宇宙飞船的软件规模呈指数增长,70年代末穿梭号宇宙飞船的软件包含4000万行目标代码。假设一个人一年可以开发出一个一万行的程序,为了开发一个4000万行的软件,是否集中4000人的力量一年就可以完成呢?绝对做不到!因为代码长度增加了4000倍,程序复杂程度的增加远远超过4000倍。而且如何保证每个人完成的工作合在一起确实能构成一个高质量的大型软件系统,更是一个极端复杂困难的问题,不仅涉及许多技术问题,诸如分析方法、设计方法、形式说明方法、版本控制等,更重要的是必须有严格而科学的管理。

软件本身独有的特点确实给开发和维护带来一些客观困难,但是人们在开发和使用计算机系统的长期实践中,也确实积累和总结出了许多成功的经验。如果坚持不懈地使用经过实践考验证明是正确的方法,许多困难是完全可以克服的,过去也确实有一些成功的范例。但是,目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。

与软件开发和维护有关的许多错误认识和作法的形成,可以归因于在计算机系统发展的早期软件开发的个体化特点。错误认识和作法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等。

事实上,对用户要求没有完整准确的认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。只有用户才真正了解他们自己的需要,但是许多用户在开始时并不能准确具体地叙述他们的需要,软件开发人员需要做大量深入细致的调查研究工作,反复多次地和用户交流信息,才能真正全面、准确、具体地了解用户的要求。对问题和目标的正确认识是解决任何问题的前提和出发点,软件开发同样也不例外。急于求成,仓促上阵,对用户要求没有正确认识就匆忙着手编写程序,这就如同不打好地基就盖高楼一样,最终必然垮台。

作好软件定义时期的工作,是降低软件成本提高软件质量的关键。如果软件开发人员在定义时期没有正确全面地理解用户需求,直到测试阶段或软件交付使用后才发现“已完成的”软件不完全符合用户的需要,这时再修改就为时已晚了。

严重的问题是,在软件开发的不同阶段进行修改需要付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;而在开发的中期软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”时再引入变动,当然需要付出更高得多的代价。根据美国一些软件公司的统计资料,在后期引入一个变动比在早期引入相同变动所需付出的代价高 2~3个数量级。

通过上面的论述不难认识到,轻视维护是一个最大的错误。许多软件产品的使用寿命长达10年甚至20年,在这样漫长的时期中不仅必须改正使用过程中发现的每一个潜伏的错误,而且当环境变化时(例如硬件或系统软件更新换代)还必须相应地修改软件以适应新的环境,特别是必须经常改进或扩充原来的软件以满足用户不断变化的需要。所有这些改动都属于维护工作,而且是在软件已经完成之后进行的,因此维护是极端艰巨复杂的工作,需要花费很大代价。统计数据表明,实际上用于软件维护的费用占软件总费用的55%~70%。软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。

了解产生软件危机的原因,澄清错误认识,建立起关于软件开发和维护的正确概念,还仅仅是解决软件危机的开始,全面解决软件危机需要一系列综合措施。

缓解软件危机的途径

软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员

协同配合、共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,特别要吸取几十年来人类从事计算机硬件研究和开发的经验教训。

应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。

应该开发和使用更好的软件工具。正如机械工具可以“放大”人类的体力一样,软件工具可以“放大”人类的智力。在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好。如果把各个阶段使用的软件工具有机地集合成一个整体,支持软件开发的全过程,则称为软件工程支撑环境。

总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。

1.3 软件模型

软件模型是从软件项目需求定义直至软件使用后废弃为止,针对系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。在此,我们介绍几种常用和具有代表性的模型供大家参考。

1、瀑布模型:瀑布模型(线性顺序模型)规定了各项软件工程活动,包括制定开发计划、

进行需求分析和说明、软件设计、程序编码、测试及运行维护,如图1-6所示。并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

图1-6瀑布模型示意图

瀑布模型包含以下活动:

系统/信息工程和建模:因为软件总是一个大系统的组成部分,所以一开始应该建立所有系统成分的需求,然后再将其中某个子集分配给软件。整个系统基础是,以软件作为其他成分如硬件、人及数据库的接口。系统工程和分析包括了系统级收集的需求,以及一小部分顶层分析和设计。信息工程包括了在战略商业级和商业领域级收集的需求。

软件需求分析:需求收集过程特别集中于软件上。要理解待建造程序的本质,软件工程师(“分析员”)必须了解软件的信息领域,以及需求的功能、行为、性能和接口。系统需求和软件需求均要文档化,并与用户一起复审。

设计:软件设计实际上是一个多步骤的过程,集中于程序的四个完全不同的属性上:数据结构、软件体系结构、界面表示及过程(算法)细节。设计过程将需求转换成软件表示,在编码之前可以评估其质量。象需求一样,设计也要文档化,并且是软件配置的一部分。

代码生成:设计必须转换成机器可读的形式。代码生成这一步就是完成这个任务的。如果设计已经表示得很详细,代码生成可以自动完成。

测试:一旦生成了代码,就可以开始程序测试。测试过程集中于软件的内部逻辑——保证所有语句都测试到,以及外部功能——即引导测试去发现错误,并保证定义好的输入能够产生与预期结果相同的输出。

维护:软件在交付给用户之后不可避免地要发生修改(一个可能的例外是嵌入式软件)。在如下情况下会发生修改:当遇到错误时;当软件必须适应外部环境的变化时(例如,因为使用新的操作系统或外设);或者当用户希望增强功能或性能时。软件维护重复以前各个阶段,不同之处在于它是针对已有的程序,而非新程序。

线性顺序模型是最早,也是应用最广泛的软件工程范例。但是,对于该模型的批评使得即使是最积极的支持者也开始怀疑其功效。在使用线性顺序模型过程中有时会遇到如下一些问题:

●实际的项目很少按照该模型给出的顺序进行。虽然线性模型能够容许迭代,但却是

间接的。结果,在项目组的开发过程中变化可能引起混乱。

●用户常常难以清楚地给出所有需求,而线性顺序模型却要求如此,它还不能接受在

许多项目的开始阶段自然存在的不确定性。

●用户必须有耐心。程序的运行版本一直要等到项目开发晚期才能得到。大的错误如

果直到检查运行程序时才被发现,后果可能是灾难性的。

●开发者常常被不必要地耽搁。在对实际项目的一个有趣的分析中,Bradac发现传

统生命周期的线性特征会导致“阻塞状态”,其中某些项目组成员不得不等待组内

其他成员先完成其依赖的任务。事实上,花在等待上的时间可能会超过花在开发工

作上的时间阻塞状态经常发生在线性顺序过程的开始和结束。

这些问题都是真实存在的。但不管怎样,传统的生命周期范型在软件工程中仍占有肯定的和重要的位置。它提供了一个模板,使得分析、设计、编码、测试和维护的方法可以在该模板的指导下层开。传统的生命周期模型仍然是软件工程中应用最广泛的过程模型。虽然它确实有不少缺陷,但很显然它比起软件开发中随意的状态要好得多。

然而软件开发的实践表明,各项活动之间并非完全是自上而下、呈线性图式。实际情况是,每项开发活动均处于一个质量环(输入--处理--输出--评审)中。只有当前工作得到确认,才能继续进行下一项活动,在图1-6中用向下的箭头表示;否则重做,在图 1-6中用向上的箭头表示。

2、AD模型:快速应用开发(RAD)也是一个线性顺序的软件开发模型,强调极短的开发周期。

RAD模型是线性顺序模型的一个“高速”变种,通过使用基于构件的建造方法获得了快速开发。如果需求理解得很好,且约束了项目范围,RAD过程使得一个开发组能够在很短时间内(如60到90天)创建出“功能完善的系统”。RAD方法主要用于信息系统应用软

件的开发,它包含如下几个开发阶段:

业务建模:业务活动中的信息流被模型化,以回答如下问题:什么信息驱动业务流程?生成什么信息?谁生成该信息?该信息流往何处?谁处理它?

数据建模:业务建模阶段定义的一部分信息流被精化,形成一组支持该业务所需的数据对象。标识出每个对象的特征(称为属性),并定义这些对象间的关系。

小组 #3

图1-7 RAD模型

处理建模:数据建模阶段定义的数据对象变换成为要完成一个业务功能所需的信息流。创建处理描述以便增加、修改、删除或获取某个数据对象。

应用生成:RAD假设使用第四代技术。RAD过程不是采用传统的第三代程序设计语言来创建软件,而是复用已有的程序构件(如果可能的话)或是创建可复用的构件(如果需要的

话)。在所有情况下,均使用自动化工具辅助软件建造。

测试及反复:因为RAD过程强调复用,许多程序构件已经是测试过的,这减少了测试时间。但新构件必须测试,所有接口也必须测到。

RAD过程模型如图1-7所示。很显然,加之于一个RAD项目上的时间约束需要有“一个可伸缩的范围”。如果一个商业应用能够被模块化,使得其中每一个主要功能均可以在不到三个月时间内完成(使用上述的方法),它就是RAD的一个候选件。每一个主要功能可由一个单独的RAD组来实现,最后再集成起来形成一个整体。

像所有其他过程模型一样,RAD方法也有其缺陷:

·对于大型的、但可伸缩的项目,RAD需要足够的人力资源以创建足够的RAD组。

·RAD要求承担必要的快速活动的开发者和用户在一个很短的时间框架下完成一个系统。如果两方中的任何一方没有完成约定,都会导致RAD项目失败。

并非所有应用软件都适合使用RAD。如果一个系统难以被适当地模块化,那么建造RAD 所需的构件就会有问题;如果高性能是一个指标,且该指标必须通过调整接口使其适应系统构件才能赢得,RAD方法就有可能失败了;RAD不适合技术风险很高的情况,当一个新应用要采用很多新技术,或当新软件要求与已有计算机程序有高可互操作性时,这种情况就会发生。

评审

图1-8螺旋模型

3、演化模型:在项目开发的初始阶段,人们对软件的需求认识往往不够清晰,因而使得

项目开发难以做到一次便成功,进行再开发在所难免。因此,可以先做试验开发,其目标只是探索可行性,弄清软件需求。然后,在此基础上获得较为满意的软件产品。通常,把第一次得到的试验性产品称为“原型”。

4、螺旋模型:对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模

型与演化模型结合起来,并且添加两种模型均忽略的风险分析。螺旋模型沿着螺线旋转,如图1-8所示,在笛卡儿坐标的4个象限上分别表达了4个方面的活动。

(a)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件。

(b)风险分析:分析所选方案,考虑如何识别和消除风险。

(c)实施工程:实施软件开发。

(d)客户评估:评价开发工作,提出修正建议。

沿螺旋线自内向外每旋转一圈,便开发出一个更为完善的、新的软件版本。

5、喷泉模型:喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,主要

支持面向对象的开发方法。“喷泉”一词体现了迭代和无间隙的特性。迭代是指系统的某个部分常常重复工作多次,相关功能在每次迭代中被加入演进的系统。无间隙是指在开发活动,(即分析、设计和编码)之间不存在明显的边界。

6、智能模型:智能模型是基于知识的软件开发模型,它综合了上述若干模型的特点,并

与专家系统相结合。该模型应用基于规则的系统,采用归约和推理机制,帮助软件人员完成开发工作,并使维护工作在系统规格说明级进行。

1.4 软件工程的基本目标

(1)软件工程项目的基本目标

组织实施软件工程项目是为了获得项目的成功,即达到以下几个主要的目标:

●付出较低的开发成本。

●达到预期的软件功能。

●取得较好的软件性能。

●使开发的软件易于移植。

●需要较低的维护费用。

●能按时完成开发工作,及时交付使用。

在项目的实际开发中,使以上几个目标都达到理想的程度往往是非常困难的。

(2)软件工程的原则

软件工程基本目标适用于所有软件工程项目。为达到这些目标,在软件开发过程中必须遵循下列软件工程原则。

抽象:抽取事物最基本的特性和行为,忽略非基本细节。采用分层次抽象,自顶向下、逐层细化的办法控制软件开发过程的复杂性。

信息隐蔽:将模块设计成“黑箱”,实现细节隐藏在模块内部,不让模块的使用者直接访问。这就是所谓信息封装(使用与实现分离)的原则。使用者只能通过模块接口访问模块中封装的数据。

模块化:模块是程序中在逻辑上相对自主的成分,是独立的编程单位,应有良好的接口定义。如C语言程序中的函数过程, C++语言程序中的类。模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。

局部化:在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间有松散的耦合,模块内部有较强的内聚。这有助于控制各个解的复杂性。

确定性:软件开发过程中所有概念的表达应是确定的、无歧义的、规范的。这样有助于人们在交流时不会产生误解、遗漏,保证整个开发工作的协调一致。

一致性:整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号和术语;程序内、外部接口应保持一致;软件同硬件、操作系统的接口应保持一致;系统规格说明与系统行为应保持一致;用于形式化规格说明的公理系统应保持一致。

完备性:软件系统不丢失任何重要成分,可以完全实现系统所要求的功能。为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。

可验证性:开发大型的软件系统时需要对系统自顶向下、逐层分解。系统分解应遵循使系统易于检查、测试、评审的原则,以确保系统的正确性。

除上述原则外,在现代软件开发过程中,还需特别注意的一个原则是事物分离原则(Principle of Separation of Concerns)。它强调分析模型和设计模型应该分别建立,分析模型用于捕捉事物的本质或逻辑的需求,不考虑基于实现的系统需求。而设计模型则以考虑描述在某一特定的实现环境下,如何建立一个特定的软件系统为主要任务。

使用一致性、完备性和可验证性的原则可以帮助开发者设计一个正确的系统。随着计算机技术和理论的发展,软件工程理论和应用也在不断地发展中。

小结

本章对软件工程的发展过程及背景做了一些介绍,对软件工程的一些基本概念、特点以及软件工程的一些主要模型进行了讨论,最后,简述了软件工程的基本原则。通过对本章内容的学习,应能对软件工程的基本概念、方法、原则有一个总体认识和了解,为进一步学习后续章节的课程打下基础。

习题

1、计算机软件具有哪些共同特点,它们和硬件的主要区别有哪些?

2、软件工程过程含哪几种基本活动?P、D、C、A各代表什么意思?

3、简述软件生存周期的各个环节及各环节的主要内容。

4、软件危机主要包含哪些表现?结合自身实际,谈谈你对软件危机的认识和体会。

5、软件模型的意义、作用是什么?

6、软件工程的基本目标是什么?有何措施和方法尽可能达到理想的程度?

第1章_软件工程学概述练习题

第一章练习题 一、判断题 1.螺旋模型是在瀑布模型和增量模型的基础上增加了风险分析活动。(√) 2..软件是指用程序设计语言(如PASCAL ,C,VISUAL BASIC 等)编写的程序,软件开 发实际上就是编写程序代码。(X) 3.在面向对象的软件开发方法中,每个类都存在其相应的对象,类是对象的实例,对象是 生成类的模板。(X) 4.快速原型模型可以有效地适应用户需求的动态变化。(√) 5.类是关于对象性质的描述,由方法和数据组成。(√) 6.如果把软件开发所需的资源画成一个金字塔,人是最基本的资源。(√) 二、名字解释: 1.软件:完成特定功能的程序+数据结构+文档。 2.软件危机:软件危机指在计算机软件的开发和维护过程中,所遇到的一系列严重问题。 3.软件工程:指导计算机软件开发和维护的一门工程学。 4.软件生命周期:一个软件从定义、开发、使用和维护直至最终被废弃,要经历的漫长时 期。 5.软件过程:为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任 务的工作步骤。 6.瀑布模型:是将软件生存各个活动规定为依线性顺序联接的若干阶段的模型。它包括可 行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试盒维护。它规定了由前至后,相互衔接的固定次序,如同瀑布流水,逐级下落。 7.快速原型模型:是快速建立起来的可以再计算机上运行的程序,它所能完成的功能往往 是最终产品能完成的功能的一个子集。 8.增量模型:是在项目的开发工程中以一系列的增量方式开发系统。增量方式包括增量开 发和增量提交。增量开发是指在项目开发过程中以一定的时间间隔开发部分工作软件; 增量提交是指在开发周期内,以一定的时间间隔增量方式向用户提交工作软件及相应文档。增量开发和增量提交可以同时使用,也可以单独使用。 9.螺旋模型:是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模 型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型更适合大型的昂贵的系统级的软件应用。 对象。

软件工程概论课后习题答案

软件工程概论郑人杰等版 第1章软件与软件工程的概念 1.1 举出你所知道的应用软件的例子。 办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。 1.2 认为“软件就是程序,软件开发就是编程序。”这种观点是否正确?为什么? 认为“软件就是程序,软件开发就是编程序。”这种观点是错误的。 首先,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合,程序只是软件的组成部分之一;其次,在软件开发中,编程只是软件开发过程的一个阶段。 1.3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么? 可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。 1.4 什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现: (1)对软件开发成本和进度的估计常常很不准确。 (2)用户对“已完成的”软件系统不满意的现象经常发生。 (3)软件产品的质量往往靠不住。

(4)软件常常是不可维护的。 (5)软件通常没有适当的文档资料。 (6)软件成本在计算机系统总成本中所占的比例逐年上升。 (7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用 迅速普及深入的趋势。 产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面: (1) 缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作计划很难制定。 (2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。 (3) 软件开发过程不规范。如,没有真正了解用户的需求就开始编程序。 (4) 随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。 (5) 缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。 1.5 什么是软件工程? 软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。 1.6 简述软件生存期由哪些主要的阶段组成,每一阶段的主要任务是什么? (1)问题定义与可行性研究:问题定义必须回答的关键问题是:“要解决的问题是什么”。 可行性研究要回答的关键问题是:“在成本和时间的限制条件下能否解决问题?是否值

软件工程习题测验解答第一章概述

软件工程习题解答 第一章概述 1.软件产品的特性是什么? a.软件产品是一种逻辑产品。 b.软件产品的生产主是研制,软件产品的成本主要体现在软件的开发和研制上,软件开发完成 后,复制就产生了大量软件产品。 c.软件产品不会用坏,不存在磨损、消耗问题。 d.软件产品的生产主要是脑力劳动,还未完全摆脱手工开发方式,而且碰分是"定做"的。 e.软件费用不断增加,成本相当昂贵。 2.软件产品有几个阶段?各有何特征? 阶段A.程序设计时代(1946-195 6) B.程序系统时代(1956-1968) C.软件工程时代(1968-今) 生产方式个体手工劳动小集团合作生产工程化的生产 工具机器语言、汇编高级语言数据库、开发工具、开发环境、 网络、分布式、面向对象技术开发方法追求编和技巧,追求程序运 行效率 个人技巧,开始提出结构化方法 硬件特征价格贵、存储容量小、运行 可靠性差速度、容量、工作可靠性有明显提 高,价格降低,销售有爆炸性增长 向超高速、大容量、微型化以 及网络化方 软件特征只有程序、程序设计概念, 不重视程序设计方法程序员数量猛增,已意识到软件开 发的重要性,开发技术没有新的突 破,大量软件开发的需求已提出,开 发人员的素质和工程兵的开发技术 不适应规模大、结构复杂的软件开 发,产生了尖锐矛盾,导致软件危机 的产生 开发技术有很大进步,但未能 获得突破性进展,软件价格不 断上升,没有完全摆脱软件危 机 3.什么是软件危机?其产生的原因是什么? 软件危机:软件发展第二阶段的末期,由于计算机硬件技术的进步。一些复杂的、大型的软件开发项目提出来了,但,软件开发技术的进步一直未能满足发展的要求。 在软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。主要表现在以下几个方面: a.经费预算经常突破,完成时间一再拖延。 b.开发的软件不通满足用户要求。 c.开发的软件可维护性差。 d. 开发的软件可靠性差。 软件危机产生的原因是由于软件产品本身的特点以及开发软件的方式、方法、技术和人员引起的: a.软件的规模越来越大,结构越来越复杂。 b.软件开发管理困难而复杂。 c.软件开发费用不断增加。 d.软件开发技术落后。 e.生产方式落后。 f.开发工具落后,生产率提高缓慢。

软件工程概述习题及答案

第一章软件工程概述 一. 填空题 1. 软件的发展过程, , , . 2. 基于软件的工作方式,软件可以划分为, , , . 3. 在软件发展的第四阶段计算机体系结构迅速地从环境转变为环境. 4. 在计算机系统中,软件是, 而硬件是. 5. 软件危机是在软件发展第阶段末期,随着第代计算机和诞而产生。 6. 文档一般可分为面向的文档,面向的文档,面向的文档和面向的文档。 7. 软件生存期若分为三个大的阶段,,. 8. 它是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。 9. 在软件的生存周期开发阶段要经三个步骤, , 。 10. 瀑布模型是以文档为驱动、适合于的软件项目的模型。 11. 螺旋模型将开发过程分为几个螺旋周期,在每个螺旋周期内为,, 和四个步骤。 12. 软件开发的螺旋模型综合了瀑布模型和演化模型的优点,还增加了____。采用螺旋模型时,软件开发沿着螺线自内向外旋转,每转一圈都要对____ 进行识别和分析,并采取相应的对策。螺旋线第一圈的开始点可能是一个____ 。从第二圈开始,一个新产品开发项目开始了,新产品的演化沿着螺旋线进行若干次迭代,一直运转到软件生命期结束。 13. 软件开发模型, , , , , . 14. 软件工程面临的问题有, , , . 15. 面向对象方法学把客观世界的事物或实体都看成对象,把对象作为分析设计的元素,把所有对象都划分成对象类,类可以派生和. 16.基于软件的功能划分可以把软件划分为, ,和。 17.计算机系统发展的早期所形成的一系列错误概念和做法,已经严重地阻碍了计算机软件的开发,甚至有的根本无法维护,只能提前报废,造成大量人力、物力的浪费,从而导致软件危机。为了研究解决的方法,计算机科学技术领域中的一门新兴的学科逐步形成了,这就是。18.软件工程是指导的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。 19.为了开发出低成本高质量的软件产品,软件工程学应遵守以下基本原则:, ,和, 。 20.原型模型是从需求分析开始。软件开发者和用户在一起定义,说明需求,并规划出定义的区域。然后快速设计软件中对用户/客户可见部分的表示。快速设计导致了原形的建造,原形由用户/客户评估,并进一步求精。

软件工程概论知识点

软件工程概论知识点总结 第一章 软件定义:是计算机系统中及硬件相互依存的另一部分,包括程序、数据和相关文档的完整集合。 软件特性:形态特性、智能特性、开发特性、质量特性、生产特性、管理特性、环境特性、维护特性、废弃特性、应用特性。 软件分类。 (1) 系统软件 (2) 应用软件 (3) 支撑软件 (4) 可复用软件 软件危机的原因:1)缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定。2)软件人员及用户的交流存在障碍,除了知识背景的差异,缺少合适的交流方法和需求描述工具也是重要的一个原因。3)软件开发过程不规范,缺少方法论和规范的指导,软件难以维护。4)随着软件规模的增大,其复杂性往往会呈指数级升高。5)缺少有效的软件评测手段,提交用户的软件质量差 软件工程的定义: 1.指导软件开发和维护的工程性学科,它以计算机科学理论和其他相关学科的理论为指导,采用工程化的概念、原理技术和方法进行软件的开发和维护,把经过时间考虑而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,以较少的代价获得高质量的软件并维护 2.软件工程的目标:运用先进的软件开发技术和管理方法来提高软件的质量和生产率,也就是要以较短周期、较低的成本生产出高质量的软件产品,并最终实现软件的工业化生产。 3.软件的生存周期:软件孕育、诞生、成长、成熟、衰亡的生存过程。由软件定义、软件开发和运行维护三个时期组成。软件定义:解决“做什么”的问题;软件开发:解决“如何做”的问题,分为概要设计、详细设计、编码和测试四个阶段;维护:使软件持久的满足用户的需求。 4.开发过程中的典型文档 a.软件需求规格说明书:描述将要开发的软件做什么。 b.项目计划:描述将要完成的任务及其顺序,并估计所需要的时间及工作量。 c.软件测试计划:描述如何测试软件,确保软件应实现规定的功能,并达到预期的性能。 d.软件设计说明书:描述软件的结构,包括概要设计及详细设计。 e.用户手册:描述如何使用软件 各阶段基本任务:问题定义及可行性研究、需求分析、软件设计、程序编码和单元测试、集成测试和系统测试。 5.软件生存期模型: 瀑布模型。优点:强迫开发人员规范化方法、严格规定每个阶段必须提交的文档、要求每个阶段交出的所有产品必须经过验证。缺点:完全依赖书面规格说明,可能会导致产品及用户需求有差异、只适用于项目开始时需求已确定的情况。需求分析、规格说明、设计、编码、综合测试、维护 快速原型模型。优点:易于满足用户真实需求、已通过及用户的交互验证,能正确描述用户需求、产品开发基本上按线性顺序、规格文档说明正确描述了用户需求,后期错误率和返工率很低、开发人员建立原型

软件工程概论

软件工程 1 、软件危机:软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题。包含两方面的问题:(1 )如何开发软件,以满足对软件日益增长的需求;(2)如何维护数量不断膨胀的已有软件。 2、软件危机的主要表现: ( 1 )对软件开发成本和进度的估计经常很不准确; ( 2 )用户对“已完成的”软件系统不满意的现象经常发生; ( 3 )软件产品的质量往往靠不住; ( 4 )软件常常是不可维护的; ( 5 )软件通常没有适当的文档资料; ( 6 )软件成本在计算机系统总成本中所占的比例逐年上升; (7 )软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 3、产生软件危机的原因 ( 1 )从软件特点上看,软件是逻辑部件,不是物理部件; ( 2 )软件是很大的程序,复杂且有很多技术问题,但缺少严格而科学的管理; (3 )软件的参与人员多且成分复杂(需求人员,开发人员,用户,维护人员等); (4 )在软件实践过程中或多或少的采用的错误的(但当时无法知晓的)方法和技术(这是主要原因) 4、消除软件危机的途径 ( 1 )首先应该对计算机软件有一个正确的认识; ( 2 )更重要的是,必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目; ( 3 )应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法; ( 4 )应该开发和使用更好的软件工具总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。 5、软件工程:软件工程是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。(1 )1968 年NATO 会议:软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。 ( 2 )1993IEEE 定义:软件工程是①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。 6、软件工程的本质特征 (1)软件工程关注于大型程序的构造; (2)软件工程的中心课题是控制复杂性; ( 3 )软件经常变化; (4)开发软件的效率非常重要; (5)和谐地合作是开发软件的关键; (6)软件必须有效地支持它的用户; (7)在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。 7、软件工程的基本原理 (1)用分阶段的生命周期计划严格管理 ( 2 )坚持进行阶段评审 (3)实行严格的(阶段性)产品控制 (4)采用现代程序设计技术 ( 5 )结果应能清楚地审查 (6)开发小组的人员应该少而精 (7)承认不断改进软件工程实践的必要性

第01章软件工程概述

第一章软件工程概述 我们知道,计算机软件是整个计算机系统中具体实现各种功能和操作的核心部分。软件工程即采用工程的概念、原理、技术和方法来开发和维护软件,将工程管理技术成功的经验和思想与具体软件的开发过程、研究技术相结合,形成一整套适合于计算机软件开发的方法、规范和技术。因此,软件工程这门课程,对于从事软件开发研究的专业人员,特别是高层次的管理、分析、开发人员,显得比以往更加重要。 1.1 软件工程的基本概念、特点、分类 1.1.1软件的概念、特点 计算机软件是程序、数据及相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列,数据是使程序能正常操纵信息的数据结构,文档是与程序开发、维护和使用有关的图文材料。 要深入进行计算机软件的开发和研究,首先要了解计算机软件的特点和计算机软件开发的规律。计算机软件可归结具有如下几个共同特点: 1、软件是一种逻辑实体,而不是具体的物理实体。因此,它具有抽象性。 2、软件的生产与硬件不同,软件是由开发或工程化而形成的,它没有明显的制造过程。对软件的质量控制,必须立足于软件开发方面。软件成为产品之后,其制造只是简单的拷贝而已。 3、任何机械、电子设备在运行和使用过程中,其失效率大致遵循如图1-1所示的U型曲线(即浴盆曲线)。软件的情况与此不同,它不存在磨损和老化问题。然而,它存在退化问题,设计人员必须多次修改(维护)软件,图1-2(a)给出了软件故障率的理想曲线,图1-2(b) 给出了实际的软件故障率曲线。

4、软件的开发和运行往往受到计算机系统的限制,对计算机系统有着不同程度的依赖性。为了解除这种依赖性,在软件开发中提出了软件移植的问题。 5、迄今为止,软件的开发尚未完全摆脱手工艺的方式。 6、软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。 7、软件的成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它投入的成本是比较高的。 8、相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构设置、体制运作及管理方式等问题,甚至涉及到人们的观念和心理,这些因素直接影响到项目的成败。 9、从市场上买到的软件,它本身就是一个完整的软件,而不能作为构件再组装成新的程序。但目前已有大量的支持“软件复用”的软件和中间件作为相对独立的构件。

软件工程概论知识点汇总

软件工程概论知识点汇总-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。 。 软件生命周期由 软件生存周期是指一个软件从提出开发要求开始直到 软件定义分3 可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 3个方面。 开发时期由4 实现。 的规则组成。 需求。 3种基本控制接口进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。 一类错误。 Jackson 4个阶段。 模块化是指把程序划分成独立命名切可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。 软件复杂性度量的参数包括: ①规模②难度③结构④智能度 数据字典应该有下列4类元素的定义组成: 1、数据流; 2、数据流分量(即数据元素) 3、数据存储 4、处理 产生软件危机的原因 一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。 可行性研究的任务完成的过程

1、首先需要进一步分析和澄清问题定义。 2、在澄清了问题定义之后,分析员应该导出系统的逻辑模型 3、然后从系统逻辑模型出发,探索若干种可供选择的主要解法 4、为每个可行的解法制定一个粗略的实现进度(进度表) 怎样进行可行性研究呢(可行性研究过程有哪些) 1、复查系统规模和目标 2、研究目前正在使用的系统 3、导出信系统的高层逻辑模型 4、进一步定义问题 5、导出和评价供选择的解法 6、推荐行动方针 7、草拟开发计划 8、书写文档提交审查 设计原理 模块化; 抽象; 逐步求精; 信息隐藏和局部化; 模块独立; 从哪些方面验证软件需求的正确性 (1)一致性:所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾; (2)完整性:需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能; (3)现实性:指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的; (4)有效性:必须证明需求是正确有效的,确实能解决用户面对的问题。 对系统的综合要求(需求分析的任务) 1、功能需求 2、性能需求 3、可靠性和可用性需求 4、出错处理需求 5、接口需求 6、约束 7、逆向需求 8、将来可能提出的要求 使用基本路径测试结束设计测试用例的步骤 第一步,根据过程设计结果画出相应的流图。 第二步,计算流图的环形复杂度。 第三步,确定先行独立路径的基本集合。 层次方框图与层次图的区别 ①层次方框图描绘的是数据结构;层次图描绘的是软件的层次结构。 ②层次方框图方框代表数据的子集或数据元素;层次图中方框代表一个功能模块。 ③层次方框图连线表示组成关系;层次图中连线表示模块间调用关系。 简述软件生命周期开发方法的基本过程及每个阶段的任务。 软件生存周期:可行性分析和项目开发计划;需求分析;概要设计;详细设计;编码;测试;维护。 基本任务: ①问题定义:要解决的问题是什么 ②可行性研究:研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。 ③需求分析:确定目标系统必须具备哪些功能。 ④总体设计:设计出实现目标系统的几种可能的方案;制定出实现最佳方案的详细计划,设计程序的体系结构。

软件工程概论课后习题答案

软件工程概论郑人杰等版 第1 章软件与软件工程的概念 1.1 举出你所知道的应用软件的例子。 办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。 1.2 认为“软件就是程序,软件开发就是编程序。”这种观点是否正确?为什么?认为“软件就是程序,软件开发就是编程序。”这种观点是错误的。 首先,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档 的完整集合,程序只是软件的组成部分之一;其次,在软件开发中,编程只是软件开发过程的一个阶段。 1.3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么?可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。 1.4 什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现: (1) 对软件开发成本和进度的估计常常很不准确。 (2) 用户对“已完成的”软件系统不满意的现象经常发生。 (3) 软件产品的质量往往靠不住。 (4) 软件常常是不可维护的。 (5) 软件通常没有适当的文档资料。 (6) 软件成本在计算机系统总成本中所占的比例逐年上升。 (7) 软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋 势。 产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面: (1) 缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作计划很难制定。 (2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。 (3) 软件开发过程不规范。如,没有真正了解用户的需求就开始编程序。 (4) 随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。 (5) 缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。

第一讲软件工程概述.doc

第一讲:软件工程概述 软件的定义 软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。 程序是按事先设计的功能和性能要求执行的指令序列 数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料 软件危机 软件危机是指计算机软件开发和维护过程中所遇到的一系列严重问题。概括的说即为:能否满足对软件日益增长的需求?能否维护数量日益增长的现有软件? 软件工程的定义 B o e h m:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料 I E E E:软件工程是开发、运行、维护和修复软件的系统方法 F r i t z B a u e r:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法 软件工程要素 三要素:方法、工具和过程(缺乏一个过程,洗厕所的都有方法和工具,但没有一个好的过程)软件工程方法为软件开发提供了“如何做”的技术 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境 软件生命周期(Life Cycle) 软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生命周期 软件生存期的六个步骤,即制定计划、需求分析、设计、实现、测试及运行维护 软件生命周期:制订计划 确定要开发软件系统的总目标 给出功能、性能、可靠性以及接口等方面的要求 完成该软件任务的可行性研究 估计可利用的资源(硬件,软件,人力等)、成本、效益、开发进度 制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查 软件生命周期:需求分析 对用户提出的要求进行分析并给出详细的定义,得到系统逻辑模型,可用数据流程图、数据字典和简要算法加以表示。 编写软件需求说明书或系统功能说明书及初步的系统用户手册 提交管理机构评审 软件生命周期:软件设计 概要设计—把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应。 详细设计—对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。通常用的H I P O (层次图加输入/处理/输出图)或P D L(过程设计语言)描述。 编写设计说明书,提交评审。 软件生命周期:实现编码

软件工程第一章概述

第一章:概述 目标: 什么是软件工程,为什么它很重要; 开发不同类型的软件系统可能需要不同的软件工程方法; 道德和职业问题对于软件工程的重要性; 介绍3个不同类型的软件系统,这3个系统将作为贯穿全书的例子; 1.1专业化软件开发 一.对于软件工程的一些常见问题 1.什么是软件? 计算机程序和相关文档。软件产品可针对特定客户开发或为通用市场开发。 2.什么是优良软件的特点? 好的软件应具有用户所需的功能与性能,而且应该可维护,可靠,可用。 3.什么是软件工程? 软件工程师关于软件生产的各个方面的工程学科。 4.什么是基本的软件工程活动? 软件描述,软件开发,软件验证以及软件进化。 5.软件工程和计算机科学有何区别? 计算机科学侧重理论和基础,而软件工程则侧重于软件开发和交付的实际活动。 6.软件工程和系统工程有何区别? 系统工程侧重基于计算机系统的开发的所有方面,包括硬件,软件和过程工程。 7.软件工程面临的主要挑战是什么? 不断增长的多样性,减少交付时间以及开发可靠的软件的要求。 8.什么是软件工程的成本? 软件开发成本约占总成本的60%,测试成本占40%。对于定制软件而言,进化成本常常高于开发成本。 9.什么才是最好的软件工程技术和方法? 由于所有的软件项目都必须进行专业化的管理和开发,所以不同的技术应适用于不同类型的系统。例如,游戏开发需要一系列原型,而安全要求极高的控制系统开发需要一个完整的和可分析的描述。因此,你不能单纯的评判一种方法比另一种方法更好。 10.Web给软件工程带来了哪些不同? Web带来了软件服务的可用性,以及开发高品质的基于服务的分布式系统的可能性。基于Web的系统开发极大地促进了编程语言和软件复用的发展。 二.软件产品有以下两类 1.通用软件产品 2.定制软件产品 这两类产品的一个重要区别在于:在通用软件产品中,软件描述由开发者自己完成,而定制软件产品,其软件描述通常是由客户给出,开发者必须按客户要求进行开发。 三.软件除了提供相应的功能外,作为一个产品它还有一系列相关的反映质量的属性。这些属性不直接涉及软件的功能,而是反映软件在执行时的行为以及源程序的结构,组织及相关的文档。软件对用户查询的响应时间和程序代码的可理解性就属于这类属性(有时也称为非

软件工程概论期末大作业

软件工程概论期末大作 业 集团档案编码:[YTTR-YTPT28-YTNTL98-UYTYNN08]

软件工程概论期末大作业火车票订票管理信息系统 专业年级: 学号: 姓名: 成绩:

目录 (3) 二、可行性研究 (3) 三、需求分析 (4) 3.1系统IPO图 (8) 3.2系统的数据流图 (9) 四 (10) 五、详细设计 (10) 5.1系统主要功能模块界面图 (11) 5.2画出系统某一模块的程序流程图 (15) 六、UML模型 (16) 6.1 画出系统的用例图 (17) 6.2系统客户(功能)的时序图 (18) 七、总结 (20) 八、附录 (21) 一、项目概述 1.1项目简介 火车票售票系统是一款针对全国各大乘客集散地,方便工作人员和乘客顺利抵达目的地的便捷操作软件,乘客集散地只需安装本系统,配备专业的操作人员,即可安全、有序地完成人员输送任务。 1.2项目功能 火车票售票系统可登记全国各地的客运专线、包括发车时间、到达时间、经过各中转站时间、在各中转站等待时间及发车时间、各站点间距离、票价、各列车车厢容量、座位分布、列车类型、列车车号、车票信息、预定信息、乘客身份信息、乘客携带物品限定信息、车票代售点信息、网络购票、货运信息、网络购票常见问题解决方式、铁路常识等。 1.3功能模块介绍

车票票面信息:包含乘车区间(始发站、终点站)、发车时间、发车日期、乘客身份信息(身份证号、姓名)、乘客所乘列车座位信息(列车车厢号、座位号)、乘客乘车须知、票价、座位类型(硬座、硬卧、软座、软卧)。 网络购票信息:查询列车信息(列车时刻表、列车车次)、余票信息、票价信息、退票信息、列车正晚点信息、车票代售点信息、预订信息、货运运费、货运业务咨询。 列车信息:列车车次、列车所属类型(普快、动车、空调特快等)、列车始发站、终点站、中转站、始发时间、到达时间、各站点停靠时间、乘车区间及价格、列车运行时长、已运行时长。 候车室信息:列车车次、列车运行时间(发车时间、到达时间)、对应车次所在候车区域、对应区域所要发车车次。 二、可行性研究 2.1可行性研究过程 本系统是针对全国各地的旅客,因此这一问题的解决,这一项目的实现,将更简化整个操作流程,减少人工操作以及由人工操作所引起的人为失误,大大降低了对数据的操作量。本系统所需的是项目人员的研究及整个操作过程所需的步骤及对所出现的问题的正确操作。 2.2可行性研究要解决的问题 项目研究人员:对于项目研究人员所需的操作即为界面功能实现的后台代码,这不仅仅是最需要解决的问题,项目人员最需要的是对整个系统所要实现的功能的整合,针对某一问题所需要的操作,所对应的模块,所调用的数据,这些都需要借助于日常出现问题的总结,因此项目开发人员是要对列车整个运行过程十分了解,并熟知所面对问题的解决方法。 系统操作人员:对于系统操作人员,需要了解整个系统所能实现的功能以及对应的处理,如何操作,怎么操作这是需要解决的问题。 2.3对于项目的技术支撑 面对当今社会技术的飞速发展、计算机科学技术已经发展的相当成熟。C语言、C++、C#、JAVA、.NET等高级语言完全可以驾驭各项功能。Access、SQLServer、Oracle等数据库可以完成对数据的存储,只需将后台程序与数据库连接即可实现对数据的操作。 2.4项目在经济上的可行性 任何一个软件公司对于所要开发的项目,都需要对整个功能实现的解决有深入了解,因此调查是必不可少的。当然由此产生费用视该系统所要解决问题的范围而定,针对本系统,一个面对大众,一劳永逸的工程,所需花费与收益相比,可谓九牛一毛。对于相关人员的培训费用和从程序入手到系统实现的费用也不值一提。因此,相对于系统所带来的经济价值和社会效益而言,在经济可行性上是完全可行的。 2.5项目在法律允许的可行性 本项目是在大范围内需求而产生的,针对的是大众群体,使用对象是国家,而并非个人,所以不会存在侵权行为。因此,在法律范围之内,无侵权行为。2.6方案的具体实现 对于程序实现者来说,一个大的程序可以分解为若干个子程序,进而一步步实现。对于售票系统,我们可以将其拆分为票面信息版块、网络售票信息版块、

软件工程概论样本

软件工程 1、软件危机:软件危机是指在计算机软件开发和维护过程中遇到一系列严重问题。包括两方面问题:(1)如何开发软件,以满足对软件日益增长需求;(2)如何维护数量不断膨胀已有软件。 2、软件危机重要体现: (1)对软件开发成本和进度预计经常很不精确; (2)顾客对“已完毕”软件系统不满意现象经常发生; (3)软件产品质量往往靠不住; (4)软件经常是不可维护; (5)软件普通没有恰当文档资料; (6)软件成本在计算机系统总成本中所占比例逐年上升; (7)软件开发生产率提高速度,远远跟不上计算机应用迅速普及进一步趋势。 3、产生软件危机因素 (1)从软件特点上看,软件是逻辑部件,不是物理部件; (2)软件是很大程序,复杂且有诸多技术问题,但缺少严格而科学管理; (3)软件参加人员多且成分复杂(需求人员,开发人员,顾客,维护人员等); (4)在软件实践过程中或多或少采用错误(但当时无法知晓)办法和技术(这是重要因素) 4、消除软件危机途径 (1)一方面应当对计算机软件有一种对的结识; (2)更重要是,必要充分结识到软件开发不是某种个体劳动神秘技巧,而应当是一种组织良好、管理严密、各类人员协同配合、共同完毕工程项目; (3)应当推广使用在实践中总结出来开发软件成功技术和办法,并且研究摸索更好更有效技术和办法,尽快消除在计算机系统初期发展阶段形成某些错误概念和做法; (4)应当开发和使用更好软件工具 总之,为理解决软件危机,既要有技术办法(办法和工具),又要有必要组织管理办法。 5、软件工程:软件工程是从管理和技术两方面研究如何更好地开发和维护计算机软件一门新兴学科。(1)1968年NATO会议:软件工程就是为了经济地获得可靠且能在实际机器上有效地运营软件,而建立和

软件工程概论课后答案

第1章软件与软件工程的概念 1.1 举出你所知道的应用软件的例子。 办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。 1.2 认为“软件就是程序,软件开发就是编程序。”这种观点是否正确?为什么? 认为“软件就是程序,软件开发就是编程序。”这种观点是错误的。 首先,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合,程序只是软件的组成部分之一;其次,在软件开发中,编程只是软件开发过程的一个阶段。 1.3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么? 可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。 1.4 什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现: (1)对软件开发成本和进度的估计常常很不准确。 (2)用户对“已完成的”软件系统不满意的现象经常发生。 (3)软件产品的质量往往靠不住。 (4)软件常常是不可维护的。 (5)软件通常没有适当的文档资料。 (6)软件成本在计算机系统总成本中所占的比例逐年上升。 (7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速 普及深入的趋势。 产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面: (1) 缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作计划很难制定。 (2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。 (3) 软件开发过程不规范。如,没有真正了解用户的需求就开始编程序。 (4) 随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及 技术问题,更重要的是必须有科学严格的管理。 (5) 缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。

软件工程概论

软件工程概论

————————————————————————————————作者:————————————————————————————————日期:

。 第1章软件与软件工程的概念 1.软件的概念? 软件是计算机系统中与硬件相互依存的另一部分,软件包括程序、数据及其相关文档的完整集合。 2.软件的特性? (1)形态特性(2)智力特性(3)开发特性(4)质量特性(5)生产特性(6)管理特性(7)环境特性(8)维护特性(9)废弃特性(10)应用特性。 3.按照软件作用,一般可以将软件做如下分类? (1)系统软件(2)应用软件(3)支撑软件(4)可复用软件。 4.什么是软件危机?主要表现在哪些方面? 软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。 表现方面:(1) 用户对开发出的软件很难满意(2) 软件产品的质量往往靠不住(3) 一般软件很难维护(4) 软件生产效率很低(5) 软件开发成本越来越大。(6) 软件成本与开发进度难以估计(7)软件技术的发展远远满足不了计算机应用的普及与深入的需要。 5.除了软件本身的特点,软件危机发生的原因主要有以下几个方面? (1)缺乏软件开发的经验和有关软件开发数据的积累(2)软件人员与用户的交流存在障碍(3)软件开发过程不规范(4)随着软件规模的增大,其复杂性会呈指数级升高(5)缺少有效的软件评测手段,提交用户的软件质量差。 6.什么是软件工程?它目标和内容是什么? 软件工程:就是用科学的知识工程和技术原理来定义,开发,维护软件的一门学科。 目标:付出较低开发成本;达到要求的功能;取得较好的性能;开发的软件易于移植;只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。 内容:研究内容包括开发技术和开发管理两个方面。开发技术主要研究:软件开发方法,开发过程,开发工具和环境。开发管理主要研究:软件管理学,软件经济学,软件心理学。 7.概括地说,软件生存期由软件定义、软件开发和运行维护三个时期组成,每个时期又可划分为若干个阶段(1)定义时期的主要任务是解决“做什么”的问题。它通常又被分为三个阶段,问题定义、可行性研究和需求分析(2)开发时期的主要任务是解决“如何做”的问题。通常由概要设计、详细设计、编码和测试四个阶段组成(3)维护时期的主要任务是使软件持久地满足用户的需要。通常有四类维护活动:改正性维护,也就是诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件为将来的维护活动预先做准备;完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护,即修改软件为将来的维护活动预先做准备。 8.什么是软件生存周期模型?有哪些主要模型? 生存周期模型:描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。 主要有:瀑布模型,增量模型,螺旋模型,喷泉模型,基于知识的模型,变换模型。 9.什么是软件生存周期?它有哪几个活动? 软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。 包括:可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护。10.瀑布模型的特点如下? (1)阶段具有顺序性和依赖性(2)推迟实现的观点(3)质量保证的观点。 11.瀑布模型的优点是? (1)可强迫开发人员采用规范化的方法(2)严格地规定了每个阶段必须提交的文档(3)要求每个阶段交出的所有产品都必须是经过验证的。 12.瀑布模型的缺点是? (1)由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要(2)瀑布模型只用于开始时需求已确定的情况。13.快速原型模型的优点是? (1)有助于满足用户真实需求(2)原型系统已经 通过与用户的交互而得到验证,据此产生的规 格说明文档能够正确地描述用户需求(3)软件 产品的开发基本上是按线性顺序进行(4)因为 规格说明文档正确地描述了用户需求(5)开发 人员通过建立原型系统已经学到了许多东西 (6)快速原型的本质是“快速”。 14.增量模型的优点是? (1)能够在较短的时间内向用户提交一些有用 的工作产品(2)逐步增加产品的功能可以使用 户有较充裕的时间学习和适应新产品(3)项目 失败的风险较低(4)优先级最高的服务首先交 付,然后再将其他增量构件逐次集成进来。 15.螺旋模型的优点是? (1)对可选方案和约束条件的强调有利于已有 软件的重用,也有助于把软件质量作为软件开 发一个重要目标(2)减少了过多测试或测试不 足所带来的风险(3)在螺旋模型中,维护只是模 型的另一个周期。 16.螺旋模型的缺点是:? 螺旋模型是风险驱动的,因此要求软件开发人 员必须具有丰富的风险评估经验和这方面的 专门知识,否则将出现真正的风险:当项目实 际上正在走向灾难时,开发人员可能还以为一 切正常。 17.螺旋线上的每个循环可划分为四个象限, 分别表达了四个方面的活动? (1)目标设定—定义在该阶段的目标,弄清对过 程和产品的限制条件,制定详细的管理计划, 识别项目风险,可能还要计划与这些风险有关 的对策(2)风险会计与弱化—针对每个风险进 行详细分析,设想弱化风险的步骤(3)开发与验 证—评价风险之后选择系统开发模型(4)计划 —评价开发工作,确定是否继续进行螺旋线的 下一个的循环。 18在统一过程中有5个核心工作流,即需求、 分析、设计、实现和测试工作流;统一过程有 4个阶段,分别是初始阶段、细化、构造阶段 和移交阶段。 19.SWEBOK指南的目标是? (1)促使软件工程本体知识成为世界范围的知 识(2)澄清软件工程与其他相关学科(3)反映软 件工程学科内容的特征(4)确定软件工程本体 知识的各个专题(5)为相应的课程和职业资格 认证材料的编写奠定基础。 20.软件工程知识体系指南的内容? SWEBOK指南将软件工程知识体系划分为10 个知识域,分为两类过程。一类是开发与维护 过程,包括软件需求、软件设计、软件构造、 软件测试和软件维护;另一类是支持和组织过 程,包括软件配置管理、软件工程管理、软件 工程过程、软件工程工具与方法、软件质量。 21.软件产品的特性是什么? ⑴是一种逻辑产品,与物质产品有很大的区别 ⑵软件产品的生产主要是研制,生产成本主要 在开发和研制,开发研制完成后,通过复制就 产生了大量软件产品⑶软件产品不会用坏,不 存在磨损,消耗⑷生产主要是脑力劳动,还末 完全摆脱手工开发方式,大部分产品是"定做" 的⑸开发软件的费用不断增加,致使生产成本 相当昂贵。 22.软件生产有几个阶段?各有何特征? ⑴程序设计时代:这个阶段生产方式是个体劳 动,使用的生产工具是机器语言,汇编语言⑵ 程序系统时代:这个阶段生产方式是小集团合 作生产,使用的生产工具是高级语言,开发方 法仍依靠个人技巧,但开始提出结构化方法⑶ 软件工程时代:这个阶段生产方式是工程化的 生产,使用数据库﹑开发工具﹑开发环境﹑网 络﹑分布式﹑面向对象技术来开发软件。 23.软件工程面临的问题是什么? 软件工程需要解决的问题:软件的费用,可靠 性,可维护性,软件生产率和软件的重用。 24.什么是 使用早已软件开发方法?有哪些主要方法? 定义好的技术集及符号表示习惯来组织软件 生产的过程。通过使用成功的软件开发方法, 在规定的投资和时间内,开发出符合用户需求 的高质量的软件。 主要有:结构化方法,JACKSON方法,维也 纳开发方法﹙VDM﹚,面向对象开发方法。 25.快速原型的分类、特点及使用策略? 分类:探索型、实验型、进化型 特点:尽快向用户提供一个可在计算机上运行 的目标系统的模型,以便使用户和开发者在目 标系统应该“做什么”这个问题上尽可能快地 达成共识。 使用策略:废弃策略和追加策略。 26.软件工程的目标? 付出较低开发成本;达到要求的功能;取得较 好的性能;开发的软件易于移植;只需较低的 维护费用;能按时完成开发任务,及时交付使 用;开发的软件可靠性高。 第2章软件工程方法与工具 1.软件工程的三种要素是什么?各自作用是 什么? 软件工程方法学包含3个要素:方法、工具和 过程。(1)软件工程方法(method)为建造软件 提供技术上的解决方法(2)工具为方法的运用 提供自动的或半自动的软件支撑环境(3)过程 是为了获得高质量的软件所需要完成的一系 列任务的框架,它规定了完成各项任务的工作 步骤。 2.形式化方法的主要特点是? (1)软件需求规格说明被细化为用数学记号表 达的详细的形式化规格说明(2)设计、实现和单 元测试等开发过程由一个变换开发过程代替。 3.类是具有相同操作功能和相同的数据格式 的对象的集合与抽象。 4.封装是利用抽象数据类型将数据和基于数 据的操作封装在一起。 5.消息是一个对象向另一个对象传递的信息, 有4类消息? (1)发送对象请求接收对象服务(2)发送对象激 活接收对象(3)发送对象询问接收对象(4)发送 对象仅传送信息给接收对象。 6.面向对象的软件开发方法? (1)Booth方法(2)Rumbaugh方法(3)Coad和 Yourdon方法(4)Jackbson方法(5)Wirfs-Brock 方法。 7.UML的特点? (1)统一标准(2)面向对象(3)可视化,表达能力 强大(4)独立于过程(5)容易掌握使用(6)与编程 语言的关系。 8.软件工具的概念? 软件工具是指能支持软件生存周期中某一阶 段的需要而使用的软件工具。 9.软件工具的分类? 软件工具按软件过程的活动来进行分类:(1) 支持软件开发过程的工具。主要有需求分析工 具、设计工具、编码工具、排错工具、测试工 具等(2)支持软件维护过程的工具。主要有版本 工具、文档分析工具、信息库开发工具、逆向 工程工具、再工程工具等(3)支持软件管理过程 和支持的工具,主要有项目管理工具、配置管 理工具、软件评价工具等。 10.软件开发过程中的常用软件工具有哪些? (1)需求分析工具(按所采用的系统开发方法, 分为:结构化图形工具箱,面向对象模型化工 具及分析工 具)(2)设计工具(对应于概要设计活动和详细 设计活动,分为概要设计工具和详细设计工 具)(3)编码工具与排错工具(4)测试工具(分 为程序单元测试工具、组装测试工具和系统测 试工具)。 11.Rose的特点? (1)Rose支持三层结构方案(2)Rose产品为大型 软件工程提供了可塑性和柔韧性极强的解决 方案(3)ROSE支持UML、OOSE及OMT(4) 支持大型复杂项目(5)与多种开发环境无缝集 成。 12.Rose的系统主菜单窗口分为7个区域? 系统主菜单、标准工具栏、图形工具栏、浏览 器窗口、文档窗口、应用窗口和日志窗口。 13.可行性研究有哪些步骤? ⑴确定项目规模和目标;⑵研究正在运行的系 统⑶建立新系统的高层逻辑模型⑷导出和评 价各种方案⑸推荐可行方案⑹编写可行性研 究报告。 14.可行性研究过程包括哪些? (1)复查系统规模和目标(2)研究目前正在使用 的系统(3)导出新系统的高层逻辑模型(4)进一 步定义问题(5)导出和评价供选择的解法(6)推 荐行动方针(7)草拟开发计划(8)书写文档提交 审查。 第3章软件需求获取与结构化分析方法 1.需求获取的任务? (1)发现和分析问题,并分析问题的原因/结果 关系(2)与用户进行各种方式的交流,并使用调 查研究方法收集信息(3)按照三个成分即数据、 过程和接口观察问题的不同侧面(4)将获取的 需求文档化,形式有用例、决策表、决策树等。 2.需求获取的过程? (1)开发高层的业务模型(2)定义项目范围和高 层需求(3)识别用户类和用户代表(4)获取具体 的需求(5)确定目标系统的业务工作流(6)需求 整理与总结 3.需求获取应遵循的原则? (1)深入浅出的原则(2)以流程为主线的原则。 4.具体需求的来源来自以下几种途径? (1)与用户进行交流(2)现有产品或竞争产品的 描述文档(3)系统需求规格说明(4)当前系统的 问题报告和改进要求(5)市场调查和用户问卷 调查(6)观察用户如何工作。 5.什么是数据流图?其作用是什么? 数据流图(DFD):以图形的方式描述数据在 系统中流动和处理的逻辑过程。只反映系统必 须完成的逻辑功能,是一种功能模型。 6.建立决策表的步骤如下? (1)列出与一个具体过程有关的所有处理(2)列 出过程执行期间的所有条件(3)将特定条件取 值组合与特定的处理相匹配,消去不可能发生 的条件取值组合(4)将右部每一纵列规定为一 个处理规则相匹配,即对于某一条件取值组合 将有什么动作。 7.SRS和DRD的质量要求? 要编制一份好的SRS(软件需求规格说明)和 DRD(数据需求说明),必须使其具有完整性、 无歧义性、一致性、可验证性、可修改性、可 追踪性等特性。 8.在需求评审实施过程中可能会遇到的风险 包括? (1)需求评审的参与者选取不当(2)评审规模过 大(3)评审组规模过大(4)评审时间过长。 9.什么是数据字典?作用是什么?共有哪些 条目? 数据字典(DD)用来定义数据库流图中的各 个成分的具体含义。有以下四类条目:数据流, 数据项,数据存储,基本加工。 13.什么是需求分析?需求分析阶段的基本任 务是什么? 需求分析:开发人员准确地理解用户的要求, 进行细致的调查分析,将用户非形式的需求陈 述转化为完整的需求定义,再由需求定义转换 到相应的需求规格说明的过程。 基本任务:⑴问题识别:双方确定对问题的综 合需求,这些需求包括功能需求,性能需求, 环境需求,用户界面需求⑵分析与综合,导出 软件的逻辑模型⑶编写文档:包括编写"需求 规格说明书","初步用户使用手册","确认测试 计划","修改完善软件开发计划" 。 14.什么是结构分析方法?该方法使用什么描 述工具? 结构化分析:简称SA,面向数据流进行数据 分析的方法。采用自顶向下逐层分解的分析策 略。顶层抽象地描述整个系统,底层具体地画 出系统工程的每个细节。中间层则是从抽象到 具体的过渡。 使用数据流图,数据通过哪些步骤来实现?字 典,作为描述工具,使用结构化语言,判定表, 判定树描述加工逻辑。 15.结构化分析方法 ⑴了解当前系统的工作流程,获得当前系统的 物理模型⑵抽象出当前系统的逻辑模型⑶建 立目标系统的逻辑模型⑷作进一步补充和优 化。 16.从哪些方面验证软件需求的正确性? (1)一致性所有需求必须是一致的,任何一条需 求不能和其他需求互相矛盾(2)完整性需求必 须是完整的,规格说明书应该包括用户需要的 每一个功能或性能(3)现实性指定的需求应该 是用现有的硬件技术和软件技术基本上可以 实现的。对硬件技术的进步可以做些预测,对 软件技术的进步则很难做出预测,只能从现有 技术水平出发判断需求的现实性(4) 有效性必 须证明需求是正确有效的,确实能解决用户面 对的问题。 9.对于给定的控制流图G,按McCabe给出的 环路复杂性V(G)的计算方法如下:(1)环路 复杂性定义为控制流程图中的区域数(2)设E 为控制流图的边数,N为图中的结点数,则:

相关主题