软件工程的发展与开发毕业论文Word文档格式.docx
《软件工程的发展与开发毕业论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《软件工程的发展与开发毕业论文Word文档格式.docx(95页珍藏版)》请在冰豆网上搜索。
在软件维护上所花费的精力和消耗的资源的速度是惊人的。
更为严重的是,许多程序的个人化特性使得他们根本不可能维护。
“软件危机”——在计算机软件的开发和维护过程中所遇到的一系列严重问题出现了。
有人曾把这一阶段软件的开发和维护工作比作“陷进泥潭的牛所进行的挣扎一样”。
1968年北大西洋公约组织的计算机科学家在联邦德国召开关机会议,讨论软件危机问题,并正式提出了“软件危机”这个名词。
3.软件工程阶段
计算机系统发展的第三个阶段始于20世纪70年代中期并经历了近10年,成为软件工程阶段。
在这一阶段,以软件的产品化、系列化、工程化、标准化为特征的软件产业发展起来了,打破了软件生产的个体化特征,有了可以遵循的软件工程化的设计原则、方法和标准。
在分布式系统中,各台计算机同时执行某些功能,并于其它计算机通信,极提高了计算机系统的功能。
广域网、局域网、高带宽数字通信以及对“即时”数据访问需求的增加都对软件开发者提出了更高的要求。
4.第四阶段
计算机系统发展的第四个阶段已经不再着重于单台计算机和计算机程序,而是面向计算机和软件的综合影响。
由复杂的操作系统控制的强大的桌面机、广域网络和局域网络,配以先进的软件应用已成为标准。
计算机体系结构迅速地从机中的主机环境转变为分布的客户机/服务器环境。
世界围的信息网提供了一个基本结构,信息高速公路和网际空间连通已成为令人关注的热点问题。
事实上,Internet可以看作是能够被单个用户访问的软件。
计算机发展正朝着社会信息化和软件产业化方向发展,从技术的软件工程阶段过渡到社会信息化的计算机系统。
随着第四阶段的进展,一些新技术开始涌现。
面向对象技术将在许多领域中迅速取代传统软件开发方法。
表1.1给出了四个阶段典型技术的比较。
表11四个阶段典型技术
阶段
第一阶段
第二阶段
第三阶段
第四阶段
典型技术
面向批处理
多用户
分布式系统
强大的桌面系统
有限的分布
实时
嵌入“智能”
面向对象技术
自定义软件
数据库
低成本硬件
专家系统
软件产品
消费者的影响
人工神经网络
并行计算
网络计算机
1.1.2软件定义
计算机系统通过运行程序来实现各种不同的应用。
通常把各种不同功能的程序,包括用户为自己的特定目的编写的程序、检查和诊断机器系统的程序、支持用户应用程序运行的系统程序、管理和控制机器系统资源的程序等称为软件。
它是计算机系统中与硬件互相依存的另一部分,与硬件合为一体完成系统功能。
软件定义如下:
(1)在运行中能提供所希望的功能和性能的指令集(即程序);
(2)使程序能够正确运行的数据结构;
(3)描述程序研制过程及方法所用的文档。
随着计算机应用的日益普及,软件变得越来越复杂,规模也越来越大,这就使得人与人、人与机器间互相沟通,保证软件开发与维护工作的顺利进行显得特别重要。
因此,文档(即各种报告、说明、手册的总称)是不可缺少的。
特别是在软件日益成为产品的今天,文档的作用就更加重要。
1.1.3软件的特点
软件在整个计算机系统中是一个逻辑部件,而硬件是一个物理部件。
因此,软件相对硬件而言有许多特点。
为了能全面、正确地理解计算机软件及软件工程的重要性,必须了解软件的特点。
软件的特点可归纳如下:
(1)软件是一种逻辑实体,而不是具体的物理实体,因为它具有抽象性。
这个特点使它与计算机硬件或其他工程对象有着明显的差别。
人们可以把它记录在介质上,但却无法看到软件的形态,而必须通过测试、分析、思考、判断去了解它的功能、性能及其它特性。
(2)软件是通过人们的智力活动,把知识与技术转化成信息的一种产品,是在研制、开发中被创造出来的。
一旦某一软件项目研制成功,以后就可以大量地复制同一容的副本。
即其研制成本远远大于其生产成本。
软件故障往往是在开发时产生而在测试时没有被发现的问题。
所以要保证软件的质量,必须着重于软件开发过程,加强管理。
(3)在软件的运行和使用期间,没有硬件那样的机械磨损和老化问题。
软件维护比硬件维护要复杂得多,与硬件的维修有着本质的差别,参阅图1.1、图1.2、图1.3、图1.1所示的是硬件的故障率随时间变化的曲线;
图1.2所示的是在理想状况下软件故障率随时间变化的曲线;
图1.3所示的是软件的实际故障率曲线;
图1.2所示的是在理想情况下软件故障率随时间变化的曲线;
图1.3所示的是软件的实际故障率曲线。
图11硬件的故障率队时间变化的曲线
图12理想情况下的软件故障率随时间变化的曲线
图13软件的实际故障率
(4)软件的开发和运行经常受到计算机系统的限制,对计算机系统有着不同程度的依赖关系。
在软件的开发和运行中必须以硬件提供的条件为基础。
为了解除这种依赖,在软件开发中提出了软件移植的问题,并且把软件的可移植性作为衡量软件质量的因素之一。
(5)传统的手工开发方式使软件开发的效率受到很大的限制。
因此,应促进软件技术开展,提出和采用新的开发方法。
例如,近年来出现的充分利用现有软件的复用技术、自动生成技术和其他一些有效的软件开发工具或软件开发环境,既方便了软件开发的质量控制,又提高了软件的开发效率。
(6)软件的开发费用越来越高,成本相当昂贵。
软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动需要较高的成本。
(7)软件的开发是一个复杂的过程,例如,银行管理系统涉及到安全等问题,因而管理是软件开发过程中必不可少的容。
1.1.4软件的分类
在工作和学习中,经常接触到各式各样的软件。
这些数量众多的软件究竟分为哪些类型,这就要考虑对计算机软件进行分类的依据。
但事实上,由于人们与软件的关系各不相同且所关心软件的侧重点也不相同,所以难以给出计算机软件的一个科学的、统一的严格分类标准。
但对软件的类型进行必要的划分队与根据不同类型的工程对象采用不同的开发和维护方法是很有价值的,因此有必要从不同角度讨论对计算机软件分类。
1.基于软件的功能划分
(1)系统软件:
与计算机硬件紧密配合,使计算机各个部分与相关软件及数据协调,高效工作的软件,例如,操作系统、数据库管理系统等。
系统软件在工作时频繁地与硬件交往,以便为用户服务,共享系统资源,在这中间伴随着复杂的进程管理和数据结构的处理。
系统软件是计算机系统必不可少的一种重要组成部分。
(2)支撑软件:
协调用户开发软件的工具性软件,包括帮助程序人员开发软件产品的工具和帮助管理人员控制开发的进度的工具。
可分为:
1一般类型:
包括文本编辑程序、文件格式化程序、程序库系统等。
2支持需求分析:
包括PSL/PSA问题描述语言、问题描述分析器、关系数据库系统、一致性检查程序等。
3支持设计:
包括图形软件包、结构化流程图绘图程序、设计分析程序、程序结构图编辑程序等。
4支持实现:
包括编译程序、交叉编译程序、预编译程序、连接编译程序等。
5支持测试:
包括静态分析程序、符号执行程序、模拟程序、测试覆盖检验程序等。
6支持管理:
包括进度计划评审方法、绘图程序、标准检验程序和库管理程序等。
(3)应用软件:
在特定领域开发,为特定目的服务的一类软件。
现在几乎所有的国民经济领域都使用了计算机,为这些计算机应用领域服务的应用软件种类繁多。
其中商业数据处理软件时所占比例最大的一类,工程与科学计算软件大多属于数值计算问题。
应用软件还包括计算机辅助设计/制造(CAD/CAM)、系统仿真、智能产品嵌入软件(如汽车油耗控制、仪表盘数字显示、刹车系统),以及人工智能软件:
(如专家系统、模式识别)等。
此外,在事物管理、办公自动化,中文信息处理、计算机辅助教学(CAI)等方面的软件业迅速得到发展,产生了惊人的生产效率和巨大的经济效益。
2.基于软件的工作方式划分
(1)实时处理软件:
在事件或数据产生时,立即处理,并及时反馈信号,控制需要监测和控制的过程的软件。
主要包括数据采集、分析、输出三部分,其处理事件应严格限定,如果在任何时间超出了这一限制,都将造成事故。
(2)分时软件:
允许多个联机用户同时使用计算机,系统把处理机时间轮流分配给各联机用户,使各用户都感到只是自己在使用计算机的软件。
(3)交互式软件:
能实现人及通信的软件。
这类软件接受用户给出的信息,但在实践上没有严格的限定,这种工作方式给与用户更大的灵活性。
(4)批处理软件:
把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理的软件。
3.基于软件规模的划分
根据开发软件所需的人力、时间以及完成的源程序行数,可划分为下述六种不同规模的软件。
(1)微型软件:
一个人在几天之完成的、程序不超过500行语句且仅供个人专用的软件。
通常这类软件没有必要作严格的分析,也不必要有完整的设计和测试资料。
(2)小型软件:
一个人半年之完成的2000行以的程序。
这种程序通常没有与其他程序的接口。
但需要按一定的标准化技术、正规的资料书写以及定期的系统审查,只是没有大题目那样严格。
(3)中型软件:
5个人以在一年多时间里完成的5000到5万行的程序。
中型软件的实施过程中开始出现了软件人员之间、软件人员与用户之间的联系、协调的配合关系问题。
因而计划、资料书写以及技术审查需要比较严格地进行。
在开发中使用系统的软件工程方法是完全必要的。
这对提高软件产品质量和程序人员的工作效率起着重要的作用。
(4)大型软件:
5至10个人在两年多的时间里完成的5万到10万行的程序。
参加工作的软件人员需要按二级管理。
在任务完成过程中,人员调整往往不可避免,因此会出阁的审查是绝对必要的。
由于软件的规模庞大以及问题复杂性,往往在开发的过程中出现一些实现难于做出估计的不测试事件。
(5)甚大型软件:
100至1000人参与,用4到5年时间完成的具有100万行程序的软件项目。
这种甚大型项目可能会划分为若干个子项目,每一个子项目都是一个大型软件,各子项目之间具有复杂的接口。
例如,实时处理系统、远程通信系统、多任务系统、大型操作系统、大型数据库管理系统通常有这样的规模。
很显然,如果这类问题没有软件工程方法的支持,它的开发工作是难以想象的。
(6)极大型软件:
2000人到5000人参加,10年完成的1000万行以的程序。
这类软件很少见,往往是军事指挥、弹道导弹防御系统等。
可以看出,规模大、时间长、很多人参加的软件项目,其开发工作必须要有软件工程的指示作指导。
而规模小、时间短、参加人员少的软件项目也应有软件工程概念,遵循一定的开发规,其基本原则是一样的。
4.基于软件失效的影响进行划分
工作杂不同领域的软件,为适应其不同的需求,在运行中对可靠性也有不同的要求。
如有的软件在工作中出现了故障,造成软件失效,但可能给软件整个系统带来的影响不大,虽然可能带来一些不便,却能勉强工作。
但有的软件一旦失效,可能酿成灾难性的后果,其严重损失难以挽回。
如控制载人飞行物的软件,如果不能正常工作,可能宜人的生命为代价。
事实上,随着计算机进入国民经济等各个重要领域,其软件的可靠性越来越显得重要。
人们一般称这类软件为关键软件,其特点在于:
(1)可靠性质量要求高;
(2)长于完成重要功能的大系统的处理部件相联;
(3)含有的程序可能对人员、公众、设备或设施的安全造成影响。
还可能影响到环境的质量和关系到国家的安全和。
5.基于软件服务对象的围划分
完成软件工程项目后可以有两种情况提供给用户:
(1)定制软件:
受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。
(2)产品软件:
由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。
1.2软件工程概念
计算机系统已经历了四个不同的发展时期,计算机应用日益普及和深化,计算机软件的数量以惊人的速度急剧增加,而且软件规模也十分庞大。
由于微电子学技术的进步,计算机硬件性能有了很大的提高,而且质量稳步提高。
然而,计算机软件成本却不断上升,质量的保证也不尽人意,软件开发的生产率也远远不能满足计算机应用的要求。
软件已经成为限制计算机系统进一步发展的关键因素。
1.2.1软件危机与软件工程定义
1.软件危机
软件危机指的是软件开发和维护过程中遇到的一系列严重问题。
(2)软件危机的表现
软件危机包含下述两方面的问题:
如何开发软件,怎样满足对软件的日益增长的需求;
如何维护数量不断膨胀的已有软件。
具体地说,软件危机主要有下面的一些表现。
①产品不符合用户的实际需要。
因为软件开发人员对用户需求没有深入准确地了解,甚至对所要解决的问题还没有正确认识,就着手编写程序,而且软件开发人员和用户之间的信息交流往往很不充分,导致用户对软件产品不满意的现象发生。
②软件开发生产率提高的速度远远不能满足客观需要。
软件的生产率远远低于硬件生产率和计算机应用的增长,使人们不能充分利用现代计算机硬件提供的巨大潜力。
③软件产品的质量差。
软件可靠性和质量保证的定量概念刚刚出现不久,软件质量保证技术(审查、复审和测试)没有贯穿到软件开发的全过程中,这些都导致软件产品发生质量问题。
④对软件开发成本和进度的估计常常不准确。
实际成本比估计成本有可能偏高,实际进度比预期进度拖延。
这种现象降低了软件开发者的信誉。
为了赶进度和节约成本所采取的一些权宜之计又往往降低了软件产品的质量,从而不可避免地引起用户的不满。
⑤软件的可维护性差。
很多程序中的错误是难以改正的,实际上不能使这些程序适应硬件环境的改变,也不能根据用户的需要在原有的程序中增加一些新的功能。
没能实现软件的可重用,造成重复开发功能类似的软件。
⑥软件文档资料通常既不完整也不合格。
计算机软件不应仅有程序,还应该包括一整套文档资料。
这些文档资料应该是在软件开发工程中产生出来的,而且应该和程序代码完全一致。
软件开发的管理人员可以用这些文档资料来管理和评价软件开发过程的进展状况;
软件开发人员可以利用它们作为通信工具,在软件开发过程中准确地交流信息;
对于软件维护人员而言,这些文档资料更是至关重要和必不可少的。
因为缺乏必要的文档资料或者文档资料不合格,必然给软件开发和维护带来许多严重的困难和问题。
⑦软件的价格昂贵,软件成本在计算机系统总成本中所占的比例逐年上升。
由于微软电子学技术的进步和生产自动化程度不断提高,导致硬件成本逐年下降,然而软件开发则需要大量人力,使软件成本上升。
以上列举的仅仅是软件危机的一些明显的表现,与软件开发和维护有关的问题远远不止这些。
通过对以上软件危机的各种表现的分析,可以看出在软件开发和维护的过程中存在严重问题,这些问题一方面与软件本身的特点有关;
另一方面也和软件开发与维护的方法不正确有关。
(2)产生软件危机的原因
①软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。
在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量。
很难检验开发的正确性且软件开发的质量也较难评价。
因此,管理和控制软件开发过程相当困难。
此外,如果在软件运行过程中发现错误,很可能是在开发时期引入的,但在测试阶段没能检测出来的错误。
所以软件维护表明改正或修改原来的设计。
这样维护的费用是十分惊人的,导致在客观上软件较难维护。
软件不同于一般程序,它的一个显著特点是规模庞大。
如何保证每个人完成的工作和在一起确实能构成一个高质量的大型软件系统,更是一个极端复杂困难的问题,不仅涉及许多技术问题,例如分析方法、设计方法、形式说明方法、版本控制等,更重要的是必须有严格而科学的管理。
所以其开发和维护必然相当困难。
②虽然软件本身独有的特点确实给开发和维护带来一些客观困难,但是人们在开发和实用计算机系统的长期实践中,也确实积累和总结出了许多成功的经验。
如果坚持不懈地使用经过实践考验证明是正确的方法,许多困难是完全可以克服的。
但是,目前相当多的软件专业人员对软件开发和维护还有不少错误观念,在实践过程中没有采用工程化的方法,这是成生软件危机的主要原因。
③开发和管理人员只重视开发而轻视问题的定义,使软件产品无法满足用户的需求。
对用户要求没有完整准确地认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。
事实上,只有用户真正了解他们自己的需要,软件开发人员需要做大量深入细致的调查研究工作,反复多次地和用户交流信息,才能真正全面、准确、具体地了解用户的要求。
软件开发的基本过程应该是先从软件开发最初的工作问题是否存在一个可行的解决办法;
接下来应该进行需求分析,也就是深入具体地了解用户的要求,在索要开发的目标系统功能问题上和永和取得完全一致的看法。
经过软件定一阶段的准备工作后才能进入开发时期。
④软件管理技术不能满足现代软件开发的需要,没有统一的软件质量管理规。
文档缺乏一致性与完整性,从而导致失去管理的依据。
必须认识到程序只是完整的软件产品的一个组成部分。
一个软件产品必须由一个完整的配置组成,不应该只重视程序而应特别重视软件配置。
其次,在项目管理方面,由于成本估计不正确,资金分配混乱和人员组织不合理以及进度安排无序,使软件技术方法无法实现。
⑤在软件的开发与维护关系问题上存在错误的概念。
在软件投入使用的漫长时期中不仅必须改正发现的每一个潜伏的错误,而且当环境变化时(例如,硬件或系统软件更新)还必须相应地修改软件以适应新的环境,特别是必须经常改进或扩充原来的软件以满足用户不断变化的需要。
所有这些改动都属于维护工作,需要花费很大代价。
所以做好软件定义时期的工作,是降低软件成本及提高软件质量的关键。
如果软件开发人员在定义时期没有正确全面地理解用户需求,直到测试阶段或软件交付使用后才发现软件产品不完全符合用户的需要,这是在修改就已经为时已晚了。
另外,在软件开发的不同阶段进行修改需要付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;
而在开发的中期软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都作相应的修改,不仅工作量大,而且逻辑上也更复杂,所以付出的代价剧增;
在软件已经完成时再引入变动,当然需要付出更高的代价。
因此,把软件维护的概念引入软件开发的各个阶段,有利于日后的维护工作,从而建立起关于软件开发与维护的正确概念是十分重要的。
2.软件工程的定义
首先,采用工程化方法和途径来开发与维护软件。
软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法。
应该推广使用在实践中总结出来的开发软件的成功技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。
将软件的生成问题在实践上分为若干阶段,以便于分布而有计划地分工合作,在结构上建华若干逻辑模块。
把软件作为工程产品来处理,按计划、分析、设计、实现、测试、维护和周期进行生产。
其次,应该开发和使用更好的软件工具。
在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做的既快又好。
如果把各个阶段使用的软件工具及合成一个整体,支持软件开发的全过程,则成为软件工程支撑环境。
最后,采取必要的管理措施。
软件产品是把思维、概念、算法、组织、流程、效率、质量等多方面问题融为一体的产品。
但它本身是无形的,所以有不同于一般的工程项目的管理。
它必须通过人员组织管理、项目计划管理、配置管理等来保证软件按时高质量完成。
总之,为了解决软件危机,既要有技术措施(包括方法和工具),又要有必要的组织管理措施。
软件工程正是从管理和技术两方面研究如何更好的开发和维护计算机软件的一门新兴学科。
软件工程是指导计算机软件开发和维护的工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。
1968年在联邦德国召开的国际会议上正式提出并使用了“软件工程”这个术语,运用工程学的基本原理和方法来组织和管理软件生产。
后来还发展了与软件有关的心理学、生理学和经济学等方面的学科。
在这期间,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则。
这100多条软件工程准则可以概括为下述6条基本原则。
(1)用分阶段的生存周期计划严格管理
一个软件从定义到开发、使用和维护,直到最终废弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生存周期。
在软件开发与维护的漫长过程中,需要完成许多不同性质的工作,所以应把软件生存周期划分为若干个阶段,并相应地制定出可行的计划,然后按照这个计划对软件的开发与维护工作进行管理。
不同层次的管理人员都必须严格按照计划各尽其职地管理软件开发与维护工作,绝不能受客户或上级人员的影响而擅自背离预定计划。
(2)坚持进行阶段评审
软件的质量保证工作不能等到编码阶段结束之后再进行。
其理由是:
①大部分错误是在编码之前造成的,例如,根据统计,设计错误占软件错误的63%,编码错误仅占37%;
②错误发现与改正的越晚,所需支付的代价也越高。
因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。
(3)实行严格的产品控制
在软件开发过程中不应随意改变需求,因为改变一项需求需要付出较高的代价。
但是,在软件开发过程中改变需求又是难免的。
由于外部环境的变化,相应地改变用户需一种客观需要,显然不能硬性禁止客户提出改变需求的要求,而只能依靠科学的产品控制技术来顺应这种要求。
也就是说,当改变需求时,为了保持软件个个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。
所谓基准配置又称为基线配置,它们是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。
基准配置管理也称为变动控制。
一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改,绝对不能随意修改。
(4)采用现代程序设计技术
从提出软件工程的概念开始,人们一直把主要精力用于研究各种新的程序