软件工程第一讲教案
更新时间:2023-10-21 15:22:01 阅读量: 综合文库 文档下载
- 软件工程教什么推荐度:
- 相关推荐
教案首页
周次 日期 课时序 课 题 教学目的 要 求 重 点 难 点 教学过程 设 计 及 时间分配 软件工程概述 了解软件工程相关概念 软件危机、软件工程 软件危机、软件工程、软件开发模型 第一章 软件工程概述(2*45‘) 第一节 软件(30‘) 第二节 软件工程概念(30‘) 第三节 软件生存周期与软件开发模型(30‘) 教学场所 或教学方法 作 业 使用 教具 课 后 记 授课教师 1
第一章 软件工程概述
1.1 软件
软件是一种产品,同时又是开发和运行产品的载体。作为一种产品,表达了由计算机硬件体现的计算潜能。不管它是驻留在设备中,还是在主机中,软件是一个信息转换器,能够产生、管理、获取、修改、显示或转换信息。这些信息可以很简单,如一个bit,也可以很复杂,如多媒体信息。作为开发运行产品的载体,软件是计算机工作的基础、信息通信的基础,也是创建和控制其他程序的基础。
信息是21世纪最重要的产品,软件充分地体现了这一点,软件处理数据,使得这些数据更为有用;软件管理商业信息增强了商业竞争力;它不仅提供了通往全球信息网络的途径;而且也提供了以各种形式获取信息的手段。 1.1.1 软件的产生与发展
1.程序设计阶段
在计算机发展早期阶段(20世纪50年代初期至20世纪60年代中期)为程序设计阶段。在这个阶段硬件已经通用化,而软件的生产却是个体化的。这时,由于程序规模小,几乎没有什么系统化的标准方法可遵循。对软件的开发没有任何管理方法,一旦任务超时或者成本提高,程序员才开始弥补。在通用的硬件已经非常普遍的时候,软件却相反,对每一类应用均需自行再设计,应用范围很有限。软件产品处在初级阶段,大多数软件都是由使用者自己开发,例如书写软件,使其运行,如果有问题,需要解决等等,因为是个人化的软件环境。设计往往仅是人们头脑中的一种模糊想法,而根本就不存在文档。
2.程序系统阶段
计算机系统发展的第二阶段(20世纪60年代中期到70年代末期)为程序系统阶段。多道程序设计、多用户系统引入了人机交互的新概念。交互技术打开了计算机应用的新世界和硬件和软件配合的新层次,出现了实时系统和第一代数据库管理系统。这个阶段另一个特点就是软件产品的使用和软件作坊的出现。开发出软件可以在较宽广的范围中应用。主机和微机上的程序能够有数百甚至上千的用户。
在软件的使用中,当发现错误时需要纠正程序源代码;当用户需求发生变化时需要修改;当硬件环境变化时需要适应,将这些活动统称为软件维护。在软件维护上所花费的精力以惊人的速度消耗资源。更为严重的是,许多程序的个人化特性使得根本不能维护它们。于是“软件危机”出现了。
3.软件工程阶段
2
计算机系统发展的第三阶段始于20世纪70年代中期并跨越了近十年,称为软件工程阶段。在这一阶段,以软件的产品化、系列化、工程化、标准化为特征的软件产业发展起来,打破了软件生产的个体化特征,有了软件工程化的设计原则、方法、标准可以遵循。在分布式系统中,各台计算机同时地执行某些功能,并与其他计算机通讯,极大地提高了计算机系统的复杂性。广域网、局域网、高带宽数字通信以及对即时数据访问需求的增加都对软件开发提出了更高的要求。
4.第四阶段
计算机发展的第四阶段已经不再着重于单台计算机系统和程序,而是面向计算机和软件的综合影响。由复杂的操作系统控制的强大的桌面机、广域网络和局域网络,配以先进的软件应用已成为标准。计算机体系结构迅速地从集中的主机环境转变为分布的客户/服务器环境。世界范围的信息网提供了一个基本结构,信息高速公路和网际空间连通已成为令人关注的热点问题。事实上,Internet可以看作是能够被单个用户访问的软件,计算机发展正朝着社会信息化和软件产业化方向发展,从技术的软件工程阶段过渡到社会信息化的计算机系统。随着第四阶段的进展,一些新技术开始出现。面向对象技术将在许多领域中迅速取代传统软件开发方法。
表
1-1
给出了四个发展阶段典型技术的比较。
1.1.2 软件定义
计算机系统是通过运行程序来实现各种不同的应用。把各种不同功能的程序,包括用户为自己的特定目的编写的程序、检查和诊断机器系统的程序、支持用户应用程序运行的系统程序、管理和控制机器系统资源的程序等通常称为软件。它是计算机系统中与硬件相互依存的另一部分,与硬件合为一体完成系统功能。软件定义如下:
(1)在运行中能提供所希望的功能和性能的指令集(即程序); (2)使程序能够正确运行的数据结构;
3
(3)描述程序研制过程、方法所用的文档。
随着计算机应用的日益普及,软件变得越来越复杂,规模也越来越大,这就使得人与人、人与机器间相互沟通,保证软件开发与维护工作的顺利进行显得特别重要,因此,文档(即各种报告、说明、手册的总称)是不可缺少的。特别是在软件日益成为产品的今天,文档的作用就更加重要。 1.1.3 软件的特点
在计算机系统中,软件是一个逻辑部件,而硬件是一个物理部件。因此,软件相对硬件而言有许多特点。为了能全面、正确地理解计算机软件及软件工程的重要性,必需了解软件的特点。软件的特点可归纳如下。
1.软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。这个特点使它与计算机硬件、或其他工程对象有着明显的差别。人们可以把它记录在介质上,但却无法看到软件的形态,而必须通过测试、分析、思考、判断去了解它的功能、性能及其他特性。
2.软件是通过人们的智力活动,把知识与技术转化成信息的一种产品,是在研制、开发中被创造出来的。一旦某一软件项目研制成功,以后就可以大量地复制同一内容的副本。即其研制成本远远大于其生产成本。软件故障往往是在开发时产生而在测试时没有被发现的问题。所以要保证软件的质量,必须着重于软件开发过程,加强管理和减少故障。
3.在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题。软件维护比硬件维护要复杂得多,与硬件的维护有着本质的差别,参阅图1-1、图1-2和图1-3。图1-1所示的是硬件的故障率随时间变化的曲线,图1-2所示的是在理想情况下软件故障率随时间变化的曲线,图1-3所示的是软件的实际故障率曲线。
4.软件的开发和运行经常受到计算机系统的限制,对计算机系统有着不同程度的依赖关系。在软件的开发和运行中必须以硬件提供的条件为基础。为了消除这种依赖关系,在软件开发中提出了软件移植的问题,并且把软件的可移植性作为衡量软件质量的因素之一。
5.软件的开发尚未完全摆脱手工的开发方式。由于传统的手工开发方式仍然占据统治地位,软件开发的效率受到很大的限制。因此,应促进软件技术发展,提出和采用新的开发方法。例如近年来出现的充分利用现有软件的复用技术、自动生成技术和其它一些有效的软件开发工具或软件开发环境,既方便了软件开发的质量控制,还提高了软件的开发效率。
6.软件的开发费用越来越高,成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,需要较高的成本。
7. 软件的开发是一个复杂的过程,因而管理是软件开发过程中必不可少內
4
容。
5
1.1.4 软件的分类
在工作和学习中,经常接触到各式各样的软件。那么这些数量众多的软件究竟归为哪种类型,这就需要考虑对计算机软件进行分类的依据。但事实上由于人们与软件的关系各不相同且所关心软件的侧重点也不相同,所以要给出计算机软件一个科学的、统一的严格分类标准是不现实的。但对软件的类型进行必要的划分对于根据不同类型的工程对象采用不同的开发和维护方法是很有价值的,因此有必要从不同角度对计算机软件做适当的分类。
1.基于软件的功能划分
(1)系统软件:是与计算机硬件紧密配合以使计算机的各个部件与相关软件及数据协调、高效工作的软件。例如:操作系统、数据库管理系统等。系统软件在工作时频繁地与硬件交往,以便为用户服务,共享系统资源,在这中间伴随着复杂的进程管理和复杂的数据结构的处理。系统软件是计算机系统必不可少的重要组成部分。
(2)支撑软件:它是协助用户开发软件的工具性软件,包括帮助程序人员开发软件产品的工具和帮助管理人员控制开发的进程的工具。可划分为: ?一般类型:包括文本编辑程序、文件格式化程序、程序库系统等。 ?支持需求分析:包括PSL/PSA问题描述语言、问题描述分析器、关系数据库系统、一致性检验程序等。
6
?支持设计:包括图形软件包、结构化流程图绘图程序、设计分析程序、程序结构图编辑程序等。
?支持实现:包括编译程序、交叉编译程序、预编译程序、连接编译程序等。 ?支持测试:包括静态分析程序、符号执行程序、模拟程序、测试覆盖检验程序等。
?支持管理:包括PERT进度计划评审方法、绘图程序、标准检验程序和库管理程序等。
(3)应用软件:是在特定领域内开发的,为特定目的服务的一类软件。现在几乎所有的国民经济领域都使用了计算机,为这些计算机应用领域服务的应用软件种类繁多。其中商业数据处理软件是占比例最大的一类,工程与科学计算软件大多属于数值计算问题。应用软件还包括计算机辅助设计/计算机辅助制造(CAD/CAM)、系统仿真、智能产品嵌入软件(如汽车油耗控制、仪表盘数字显示、刹车系统),以及人工智能软件(如专家系统、模式识别)等,此外,在事务管理、办公自动化,中文信息处理、计算机辅助教学(CAI)等方面的软件也得到了迅速发展,产生了惊人的生产效率和巨大的经济效益。 2.基于软件工作方式划分
·实时处理软件:指在事件或数据产生时,立即处理,并及时反馈信号,控制需要监测和控制的过程的软件。主要包括数据采集、分析、输出三部分,其处理时间是应严格限定的,如果在任何时间超出了这一限制,都将造成事故。 ·分时软件:允许多个联机用户同时使用计算机。系统把处理机时间轮流分配给各联机用户,使各用户都感到只是自己在使用计算机的软件。
·交互式软件,能实现人机通信的软件。这类软件接收用户给出的信息,但在时间上没有严格的限定,这种工作方式给予用户很大的灵活性。
·批处理软件:把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理的软件。 3.基于软件规模的划分
根据开发软件所需的人力、时间以及完成的源程序行数,可划分为下述六种不同规模的软件。
·微型软件:指一个人在几天之内完成的、程序不超过500行语句且仅供个人专用的软件。通常这类软件没有必要做严格的分析,也不必要有完整的设计、测试资料。
·小型软件:一个人半年之内完成的2000行以内的程序。这种程序通常没有与其他程序的接口。但需要按一定的标准化技术、正规的资料书写以及定期的
7
系统审查,只是没有大题目那样严格。
·中型软件:5个人以内在一年多时间里完成的5000~50000行的程序。中型软件开始出现了软件人员之间、软件人员与用户之间的联系、协调的配合关系问题。因而计划、资料书写以及技术审查需要比较严格地进行。在开发中使用系统的软件工程方法是完全必要的,这对提高软件产品质量和程序人员的工作效率起着重要的作用。
·大型软件:5~10个人在两年多的时间里完成的50000~100000万行的程序。参加工作的软件人员需要按二级管理。在任务完成过程中,人员调整往往不可避免。因此会出现对新手的培训和逐步熟悉工作的问题。对于这样规模的软件,采用统一的标准,实行严格的审查是绝对必要的。由于软件的规模庞大以及问题的复杂性,往往在开发的过程中出现一些事先难于做出估计的不测事件。 ·甚大型软件:100~1000人参加用4~5年时间完成的具有100万行程序的软件项目。这种甚大型项目可能会划分成若干个子项目,每一个子项目都是一个大型软件。子项目之间具有复杂的接口。例如,实时处理系统、远程通信系统、多任务系统、大型操作系统、大型数据库管理系统通常有这样的规模。很显然,如果这类问题没有软件工程方法的支持,它的开发工作是不可想象的。 ·极大型软件:2000~5000人参加,10年内完成的1000万行以内的程序。这类软件很少见,往往是军事指挥、弹道导弹防御系统等。
可以看出,规模大、时间长、很多人参加的软件项目,其开发工作必须要有软件工程的知识做指导。而规模小、时间短、参加人员少的软件项目也得用到软件工程概念,遵循一定的开发规范,其基本原则是一样的。 4.基于软件失效的影响进行划分
工作在不同领域的软件,在运行中对可靠性也有不同的要求。事实上,随着计算机进入国民经济等各个重要领域,其软件的可靠性越来越显得重要。人们一般称这类软件为关键软件,其特点在于:
(1)可靠性质量要求高;
(2)常与完成重要功能的大系统的处理部件相联;
(3)含有的程序可能对人员、公众、设备或设施的安全造成影响。还可能影响到环境的质量和关系到国家的安全和机密。 5.基于软件服务对象的范围划分
软件工程项目完成后可以有两种情况提供给用户:
.定制软件:是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。
8
.产品软件,是由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。 1.2 软件工程概念
由于微电子学技术的进步,计算机硬件的性能有了很大的提高,而且质量稳步提高;然而,计算机软件成本却不断上升,质量的保证也不尽如人意,软件的开发的生产率也远远不能满足计算机应用的要求。软件已经成为限制计算机系统进一步发展的关键因素。
更为严重的是计算机系统发展的早期所形成的一系列错误概念和做法,已经严重地阻碍了计算机软件的开发,甚至有的大型软件根本无法维护,只能提前报废,造成大量人力、物力的浪费,从而导致软件危机。为了研究解决软件危机的方法,计算机科学技术领域中的一门新兴的学科逐步形成了,这就是计算机软件工程学。
1.2.1 软件危机与软件工程定义 1.软件危机
软件危机指的是软件开发和维护过程中遇到的一系列严重问题。软件危机包含下述两方面的问题:如何开发软件,怎样满足对软件的日益增长的需求;如何维护数量不断膨胀的已有软件。具体地说,软件危机主要有下列表现: ?产品不符合用户的实际需要。因为软件开发人员对用户需求没有深入准确的了解,甚至对所要解决的问题还没有正确认识,就着手编写程序,而且软件开发人员和用户之间的信息交流往往很不充分,导致用户对软件产品不满意的现象发生。
?软件开发生产率提高的速度远远不能满足客观需要,软件的生产率远远低于硬件生产率和计算机应用的增长速度,使人们不能充分利用现代计算机硬件提供的巨大潜力。
?软件产品的质量差。软件可靠性和质量保证的定量概念刚刚出现不久,软件质量保证技术(审查、复审和测试)没有贯穿到软件开发的全过程中,这些都导致软件产品发生质量问题。
?对软件开发成本和进度的估计常常不准确。实际成本比估计成本有可能高出一个数量级,实际进度比预期进度拖延几个月甚至几年。这种现象降低了软件开发者的信誉。而为了赶进度和节约成本所采取的一些权宜之计又往往降低了软件产品的质量,从而不可避免地会引起用户的不满。
?软件的可维护性差。很多程序中的错误是难以改正的,实际上不能使这些程序适应硬件环境的改变,也不能根据用户的需要在原有程序中增加一些新的功能。没能实现软件的可重用,人们仍然在重复开发功能类似的软件。
9
?软件文档资料通常既不完整也不合格。计算机软件不仅包括程序,还应该包括一整套文档资料,这些文档资料应该是在软件开发过程中产生出来的,而且应该和程序代码完全一致。软件开发的管理人员可以用这些文档资料来管理和评价软件开发过程的进展状况;软件开发人员可以利用它们作为通信工具,在软件开发过程中准确地交流信息;对于软件维护人员而言,这些文档资料更是至关重要和必不可少的。因为缺乏必要的文档资料或者文档资料不合格,必然给软件开发和维护带来许多严重的困难和问题。
?软件的价格昂贵,软件成本在计算机系统总成本中所占的比例逐年上升。由于微电子学技术的进步和生产自动化程度不断提高,导致硬件成本逐年下降,然而软件开发需要大量人力,软件成本上升。
2.软件工程的定义
首先,采用工程化方法和途径来开发与维护软件。软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法。应该推广使用在实践中总结出来的开发软件的成功技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。将软件的生成问题在时间上分成若干阶段以便于分步而有计划的分工合作,在结构上简化若干逻辑模块。把软件作为工程产品来处理,按计划、分析、设计、实现、测试、维护的周期来进行生产。
其次,应该开发和使用更好的软件工具。在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好。如果把各个阶段使用的软件工具有机地集合成一个整体,支持软件开发的全过程,则称为软件工程支撑环境。
最后,采取必要的管理措施。软件产品是把思维、概念、算法、组织、流程、效率、质量等多方面问题融为一体的产品。但它本身是无形的,所以有不同于一般的工程项目的管理。它必须通过人员组织管理,项目计划管理,配置管理等来保证软件按时高质量完成。
总之,为了解决软件危机,既要有技术措施(包括方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。
1968年在联邦德国召开的国际会议上正式提出并使用了软件工程这个术语,运用工程学的基本原理和方法来组织和管理软件生产。后来还发展了与软件有关的心理学、生理学和经济学等方面的学科。在这期间,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则。这100多条软件工程准则可以
10
瀑布模型为软件开发和软件维护提供了一种有效的管理图式。根据这一图式制定开发计划、进行成本预算、组织开发力量,以项目的阶段评审和文档控制为手段有效地对整个开发过程进行指导,从而保证了软件产品及时交付,并达到预期的质量要求。与此同时,瀑布模型在大量的软件开发实践中也逐渐暴露出它的严重缺点。其中最为突出的缺点是该模型缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。这些问题的存在对软件开发会带来严重影响,最终可能导致开发出的软件并不是用户真正需要的软件,并且,由于瀑布开发模型具有顺序性和相关性,凡后一阶段出现的问题需要通过前一阶段的重新确认来解决,所以这一点在开发过程完成后才有所察觉,因此其代价十分高昂。而且,随着软件开发项目规模的日益庞大,由于瀑布模型不够灵活等缺点引发出的上述问题显得更为严重。软件开发需要人们合作完成,因此人员之间的通讯和软件工具之间的联系以及开发工作之间的并行和串行等都是必要的,但瀑布模型中并没有体现出这一点。 2.螺旋模型
为克服瀑布模型的不足,近年来已经提出了多种其他模型。对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析,弥补了两者的不足。
软件风险是普遍存在于任何软件开发项目中的实际问题。对于不同的项目,其差别只是风险有大有小而已,在制定软件开发计划时,系统分析员必须回答:项目的需求是什么,需要投入多少资源以及如何安排开发进度等一系列问题。然而,要他们当即给出准确无误的回答是不容易的,甚至几乎是不可能的。但系统分析员又不可能完全回避这一问题。凭借经验的估计出发给出初步的设想便难免带来一定风险。实践表明,项目规模越大,问题越复杂。资源、成本、进度等因
16
素的不确定性越大,承担项目所冒的风险也越大。总之,风险是软件开发不可忽视的潜在不利因素,它可能在不同程度上损害到软件开发过程或软件产品的质量。软件风险驾驭的目标是在造成危害之前及时对风险进行识别、分析,采取对策,进而消除或减少风险的损害。 螺旋模型沿着螺线旋转,如图1-5所示,在笛卡尔坐标的四个象限上分别表达了四个方面的活动,即:
(1)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件; (2)风险分析:分析所选方案,考虑如何识别和消除风险; (3)实施工程:实施软件开发;
(4)客户评估:评价开发工作,提出修正建议。
图1-5 螺旋模型
沿螺线自内向外每旋转一圈便开发出更为完善的一个新的软件版本。例如,在第一圈,确定了初步的目标、方案和限制条件以后,转入右上象限,对风险进行识别和分析。如果风险分析表明,需求有不确定性,那么在右下的工程象限内,所建的原型会帮助开发人员和客户,考虑其他开发模型,并对需求做进一步修正。客户对工程成果做出评价之后,给出修正建议。在此基础上需再次计划,并进行风险分析。在每一圈螺线上,做出风险分析的终点是否继续下去的判断。假如风险过大,开发者和用户无法承受,项目有可能终止。多数情况下沿螺线的活动会继续下去,自内向外,逐步延伸,最终得到所期望的系统。
如果软件开发人员对所开发项目的需求已有了较好的理解或较大的把握,则无需开发原型可采用普通的瀑布模型,这在螺旋模型中可认为是单圈螺线。与此相反,如果对所开发项目需求理解较差,则需要开发原型,甚至需要不止一个原型的帮助,那就需要经历多圈螺线。在种情况下,外圈的开发包含了更多的活动。也可能某些开发采用了不同的模型。
螺旋模型适合于大型软件的开发,应该说它是最为实际的方法,它吸收了软件工程“演化”既念,使得开发人员和客户对每个演化层出现的风险有所了解,继而做出应有的反映。螺旋模型的优越性比起其他模型来说是明显的,但并不是
17
绝对的。要求许多客户接受和相自化方法并不容易。这个模型的使用需要具有相当丰富的风险评估经验和专门知识,如果目风险较大,又未能及时发现,势必造成重大损失。此外,螺旋模型是出现较晚的新模型,远瞩瀑布模型普及,要让广大软件人员和用户充分肯定它,还有待于更多的实践。 3.第四代技术模型
第四代技术(4GT)包含了一系列的软件工具,它们的共同点是:能使软件设计者在较高级别上说明软件的某些特征。然后软件工具根据说明自动生成源代码。在越高的级别上说明软件,就能越快地构造出程序。软件工程的第四代技术模型的应用关键在于软件描述的能力,它用一种特定的语言来完成或者以一种用户可以理解的问题描述方法来描述须解决的问题。
目前,一个支持第四代技术模型的软件开发环境及工具如下:数据库查询的非过程语言,报告生成器,数据操纵,屏幕交互及定义,以及代码生成;高级图形功能;电子表格功能。最初,上述的许多工具仅能用于特定应用领域,但今天,第四代技术环境已经扩展,能够满足许多软件应用领域的需要。
像其他模型一样,第四代技术模型也是从需求分析开始,理想情况下,用户能够描述出需求,而且这些需求能被直接转换成可操作原型。但这是不现实的,因为用户可能不能确定需要什么;在说明已知的事实时,可能出现二义性;可能不能够或是不愿意采用一个第四代技术工具可以理解的形式来说明信息,因此,其他模型中所描述的用户对话方式在第四代技术模型中仍是一个必要的组成部分。
对于较小型的应用软件,使用一个非过程的第四代语言有可能直接从需求分析过渡到实现。但对于较大的应用软件,就有必要制订一个系统的设计策略。对于较大项目,如果没有很好地设计,即使使用第四代技术也会产生不用任何方法来开发软件所遇到的同样的问题,这些问题包括:低质量、差的可维护性、难以被用户接受等。
应用第四代技术的生成功能使得软件开发者能够以一种方式表示期望的输出,这种方式使得可以自动生成产生该输出的代码。很显然,相关信息的数据结构必须已经存在,且能够被第四代技术访问。
要将一个第四代技术模型生成的功能变成最终产品,开发者还必须进行测试,写出有意义的文档,并完成其他软件工程模型中同样要求的所有集成活动。此外,采用第四代技术开发的软件还必须考虑维护是否能够迅速实现。 像其他所有软件工程模型一样,第四代技术模型也有优点和缺点。其优点是极大地降低了软件的开发时间,并显著提高了构造软件的生产率。缺点是目前的第四代技术并不比程序设计语言更容易使用,而且这类工具生成的结果源代码是“低效的”,使用第四代技术开发的大型软件系统的可维护性是令人怀疑的。 综上所述,概括如下:
18
(1)在过去十余年中,第四代技术模型的使用发展得很快,且目前已成为适用于多个不同的应用领域的方法。与计算机辅助软件工程(CASE)工具和代码生成器结合起来,第四代技术为许多软件问题提供了可靠的解决方案。 (2)从使用第四代技术模型的公司收集来的数据表明:在小型和中型的应用软件开发中,它使软件的生产所需的时间大大降低,且使小型应用软件的分析和设计所需的时间也降低了。
(3)在大型软件项目中使用第四代技术,需要同样的甚至更多的分析、设计和测试才能获得实际的时间节省。主要是通过编码量的减少获得时间的节省。 因此,第四代技术模型已经成为软件开发的一个重要方法。 4.原型模型
原型模型如图1-6所示,从需求分析开始。软件开发者和用户在一起定义软件的总目标,说明需求,并规划出定义的区域。然后快速设计软件中对用户/客户可见部分的表示。快速设计导致了原形的建造,原形由用户/客户评估,并进一步求精待开发软件的需求。逐步调整原形使之满足用户需,这个过程是迭代的。原型模型的优点和缺点如下所述。 (1)优点
·原型模型法在得到良好的需求定义上比传统生存周期法好得多,不仅可以处理模糊需求,而且开发者和用户可充分通信。
·原型模型系统可作为培训环境,有利于用户培训和开发同步,开发过程也是学习过程。
·原型模型给用户以机会更改心中原先设想的、不尽合理的最终系统。 ·原型模型可以低风险开发柔性较大的计算机系统。 ·原型模型使系统更易维护、对用户更友好的机会。 ·原型模型使总的开发费用降低,时间缩短。
19
(2)缺点
·“模型效应”或“管中窥豹”。对于开发者不熟悉的领域把次要部分当作主要框架,做出不切题的原型。
·原型迭代不收敛于开发者预先的目标。为了消除错误,每次更改,次要部分越来越大,“淹没”了主要部分。 ·原型过快收敛于需求集合,而忽略了一些基本点。 ·资源规划和管理较为困难,随时更新文档也带来麻烦。
·长期在原型环境上开发,只注意得到满意的原型,容易“遗忘”用户环境和原型环境的差异。 (3)适用范围
·特别适用需求分析与定义规格说明 ·设计人机界面 ·充作同步培训工具 ·“一次性”的应用
20
·低风险引入新技术 (4)不适用范围 ·嵌入式软件 ·实时控制软件 ·科技数值计算软件 (5)步骤
S1:弄清用户/设计者的基本信息需求,本步骤的目标是: ·讨论构造原型的过程
·写出简明的框架式说明性报告,反映用户/设计者的信息需求方面的基本看法和要求。
·列出数据元素和它们之间的关系 ·确定所需数据的可用性
·概括出业务原型的任务并估计其成本 ·考虑业务原型的可能使用
用户/设计者的基本责任是根据系统的输出来清晰地描述自己的基本需要。设计者和构造者共同负责来规定系统的范围,确定数据的可用性。系统/构造者的基本责任是确定现实的设计者期望,估价开发原型的成本。这个步骤的中心是设计者和构造者定义基本的信息需求。讨论的焦点是数据的提取、过程模拟。 S2:开发初始原型系统
目标:建立一个能运行的交互式应用系统来满足用户/设计者的基本信息需求。
在这一步骤中设计者没有责任,由构造者去负责建立一个初始原型,其中包括与设计者的需求及能力相适应的对话,还包括收集设计者对初始原型的反映的设施。
主要工作包括: ·逻辑设计所需的数据库 ·构造数据变换或生成模块
21
·开发和安装原型数据库
·建立合适的菜单或语言对话来提高友好的用户输入/输出接口。 ·装配或编写所需的应用程序模块
·把初始原型交付给用户/设计者,并且演示如何工作、确定是否满足设计者的基本需求、解释接口和特点、确定用户/设计者是否能很舒适地使用系统。 本步骤的原则:
·建立模型的速度是关键因素,而不是运行的效率。 ·初始原型必须满足用户/设计者的基本需求。
·初始原型不求完善,它只响应设计者的基本已知需求。 ·设计者使用原型必须要很舒适
·装配和修改模块,构造者不应编写传统的程序 ·构造者必须利用可用的技术
·用户与系统接口必须尽可能简单,使设计者在用初始原型工作时不致于受
碍。 S3:用原型系统完善用户/设计者的需求 目标:
·让用户/设计者能获得有关系统的亲身经验,必须使之更好地理解实际的信息需求和最能满足这些需要的系统种类。
·掌握设计者做什么,更重要的是掌握设计者对原型系统不满意些什么。 ·确定设计者是否满足于现有的原型 原则:
·对实际系统的亲身经验能产生对系统的真实理解。 ·用户/设计者总会找到系统第一个版本的问题
·让用户/设计者确定什么时候更改是必需的,并控制总开发时间。 ·如果用户/设计者在一定时间里(比如说一个月)没有和构造者联系,那么
22
用户可能是对系统表示满意,也可能是遇到某些麻烦,构造者应该与用户/设计者联系。 责任划分:
系统/构造者在这一步中没有什么责任,除非设计者需要帮助或需要信息,或者设计者在一个相当长的时间里没有和构造者接触。用户/设计者负责把那些不适合的地方,不合要求的特征和他在现有系统中看到所缺少的信息建立文档。 这一步骤的关键是得到用户/设计者关于系统的想法,有几种技术可达到这一目的:
·让用户/设计者键入信息,使用原型本身来得到他们的想法。 ·利用系统特点,来键入信息 ·使用日记来记录信息
当设计者认为进行某些更改是适当的时候,他就与构造者联系,安排一次会议来讨论所需要的更改。 S4:修改和完善原型系统 目的:
修改原型以便纠正那些由用户/设计者指出的不需要的或错误的信息。 原则:
·装配和修改程序模块,而不是编写程序。
·如果模块更改很困难,则把它放弃并重新编写模块。
·不改变系统的作用范围,除非业务原型的成本估计有相应的改变。 ·修改并把系统返回给用户/设计者的速度是关键。
·如果构造者不能进行任何所需要的更改,则必须立即与用户/设计者进行对话。
·设计者必须能很舒适地使用改进的原型。 责任划分同步骤S2 5.构件组装模型
23
构件组装模型导致了软件的复用提高了软件开发的效率,面向对象技术是软件工程的构件组装模型的基础,面向对象技术强调类的创建,类封装了数据和用操纵该数据的算法。面向对象的类可以被复用。构件组装模型如图1-7所示,它融合了螺旋模型的特征、本质上是演化的、并且支持软件开发的迭代方法,它是利用预先包装好的软件构件来构造应用程序。
首先标识候选类,通过检查应用程序操纵的数据及实现的算法,并将相关的算法和数据封装成一个类。把以往软件工程项目中创建的类存于一个类库或仓库中,根据标识的类,就可搜索该类库。如果这类存在,就类库中提取出来复用。如果这类不存在,就采用面向对象的方法开发它,以后就可以使用从库中提取的类及为了满足应用程序的特定要求而建造的新类。进而完成待开发应用程序的第一次迭代。过程流程后又回到螺旋,最后进入构件组装迭代。
图1-7构件组装模型
6.混合模型
近年来已提出瀑布模型、原形模型、螺旋模型、第4代技术模型和构件组件模型等,但是,这些可选开发模式仍被限制在整个项目开发按定义所确定的阶段性的系统开发方向上。混合模型把几种模型组合在一起,它允许一个项目沿着最有效的路径发展。
在瀑布模型、原形模型等模型中,开发模式十分严谨,但实际上被开发的项目几乎不可能按上述过程一步一步的进行,这是由于一个项目的开发取决于众多因素,例如:应用领域、规模、可重用控件的大小和多少、实现环境等。混合模
24
型能够适应不同的项目和不同情况的需要而提出一种灵活多样的动态的方法,混合模型如图1-8所示。
图1-8混合模型
在混合模型中,有多种开发模式。它提供了一种适用各种具体系统、环境和结构的灵活的结构。可以看出,混合模型分为分析、综合、运行和废弃四个阶段,各阶段的重叠为设计员提出了进行路线的选择。
混合模型的优点是:项目管理人员不愿意没有某种构思框架就去进行一个框架的开发,混合模型给管理人员提供了在具体操作中使用结构框架的某种形式。
25
一个项目有了构思,予计划就确定了过程的初始方向。例如,可以决定构造一个原形来完成项目的需求分析,用来开发规格说明然后用于整个系统的设计或另一个原形的设计。混合模型允许管理人员按照当前项目情况,指导一个项目选择其中任一开发模式而不是在不了解问题的情况下,在生存期中事先确定一个方向。由于混合模型的不确定性,管理人员在一开始不必去决定完成开发过程的方向。当一个项目的环境变化时,早决策不如晚决策好。 小结
本章首先介绍了软件的有关概念,包括软件的产生、定义、特点和种类,然后对软件工程的概念进行了介绍,包括软件工程的定义、目标、原则和软件危机。最后介绍了软件生存周期与软件开发模型,主要包括瀑布模型、原型模型、螺旋模型、基于四代技术模型等。
习题
1. 说出软件的特点。 2. 简述软件的种类。
3. 软件危机主要有哪些表现?其产生的原因是什么? 4. 软件工程有哪些原则?
5. 简述软件工程目标和面临的主要问题。 6. 软件生成周期一般可分为哪几个阶段?
7. 软件的质量保证工作不能等到编码阶段结束之后再进行,简述其理由? 8. 简述软件工程研究的基本内容与目标。
9. 在用瀑布模型开发软件时,每项开发活动均应具有哪些特征。 10. 简述第四代技术模型的优点和缺点。简述在软件开发模型中原型模型的优
点和缺点,适用范围和不适用范围。
26
正在阅读:
软件工程第一讲教案10-21
校园的一角作文400字07-11
陕西省铜川市2017-2018学年高一下学期期末考试语文试题及答案10-19
半部春秋“打一字”02-07
党员民主评议活动批评与自我批评发言06-23
北方的雪景作文400字07-12
磨练意志的作文5篇04-01
数字信号处理课后答案04-29
小学生二年级感恩节的作文06-13
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 软件工程
- 教案
- 苏教版四(下)语文精典复习(最新整理)
- 2015年秋七年级语文期中考试试卷(附答案)
- 互换性与技术测量(第五版)课后习题答案
- 石开公司发12号关于印发石油开发中心有限公司井控管理规定等2个规范性文件的通知
- 对大学英语教学中跨文化交际能力培养的思考
- 隔离开关触头温度检测系统
- Action 跟 Actionsupport 的区别
- 计算机网络课程设计任务书(1)
- 化工原理课程设计 - 图文
- 浙江省2011年1月高等教育自学考试光纤通信原理试题
- 手持GPS坐标系转换的心得体会
- 高层建筑消防给水的超压起因与防治措施
- 人教版八上语文课外古诗词选择题
- 航海学仪器部分新加题
- 京沪高速铁路CPIII控制高程测量培训
- 压铸实习个人总结,在线
- ××集团公司维修管理制度
- Linux基础实验1-5
- 2019届二轮复习语法专题16种时态经典总结(12页word版)
- 无线智能播控技术在农村应急广播中的应用