您好,欢迎访问三七文档
第1章软件工程引论1软件工程教研室杨振宇硕士Email:youngveryzyh@163.com软件工程SoftwareEngineering第1章软件工程引论2课程介绍1、课程内容软件工程的基本概念和基于结构化方法的软件工程技术,包括结构化的分析、设计、编码与测试。面向对象技术的基本概念和面向对象的分析、设计和实现技术。软件工程项目管理方法。第1章软件工程引论3课程介绍2、课程目标了解软件工程的阶段划分和开发模型。掌握软件文档的编写方法。掌握面向过程与面向对象的软件工程方法论。掌握软件需求、设计、实现、测试基本方法和相关的基本知识。第1章软件工程引论4课程成绩计算方法1、考勤及课堂作业(20分)2、中期递交项目文档(20分)3、期末考试(60分)第1章软件工程引论5本章学习目标掌握软件的概念及特点了解软件危机的产生掌握软件危机的解决途径熟悉软件工程的概念及其发展方向第1章软件工程引论第1章软件工程引论6第1章软件工程引论1.1软件产品的概念与特征1.2软件危机1.3软件工程的产生及其发展第1章软件工程引论71.1软件产品的概念与特征1.1.1软件产品的概念与分类软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档组成的完整集合。可以写作为:软件=程序+数据+文档。程序:程序是按事先设计好的功能和性能要求执行的指令序列。数据:数据是指程序能正常处理信息的数据和数据结构。文档:文档是与程序运行和维护有关的图文资料。第1章软件工程引论8根据用途划分,软件可以大致划分成如下类别:(1)系统软件:就一般情况来说,系统软件是为其他软件服务的软件。(2)实时软件:管理、分析、控制现实世界中所发生的事件的软件称为实时软件。(3)商业管理软件:商业信息处理是最大的软件应用领域,包括常规的数据处理软件和一些交互式的计算处理(如POS软件)软件。各类管理信息系统(MIS)、企业资源计划(ERP)、客户关系管理(CRM)等都是典型的商业管理软件。1.1.1软件产品的概念与分类第1章软件工程引论9(4)工程与科学计算软件:此类软件的特征是要实现特定的“数值分析”算法。。(5)嵌入式软件:驻留在专用智能产品的内存中,用于控制这些产品进行正常工作,完成很有限、很专业的功能的软件。例如各类智能检测仪表、数码相机、移动电话、微波炉等智能产品都必须在嵌入式软件的支持下才能正常工作。1.1.1软件产品的概念与分类第1章软件工程引论10(6)人工智能软件:利用非数值算法去解决复杂问题的软件。各类专家系统、模式识别软件、人工神经网络软件都属于人工智能软件。(7)个人计算机软件:文字处理系统、电子表格、游戏娱乐软件等等。此外,还可以根据软件的规模(代码行及开发工作量,如表1.1)、软件的工作方式、使用频度、失效后造成的影响等对软件产品进行分类。1.1.1软件产品的概念与分类第1章软件工程引论11表1.1根据规模进行软件分类软件规模类别参加人员数开发期限产品规模(源代码行数)微型11~4周0.5 k小型11~6月1~2 k中型2~51~2年5~50 k大型5~202~3年50~100 k甚大型100~10004~5年1 M极大型2000~50005~10年1~10 M1.1.1软件产品的概念与分类第1章软件工程引论12在制造硬件时,人的创造性的劳动过程(分析、设计、建造、测试)能够完全转换成物理的形式,但软件是逻辑的而不是物理的产品,因此软件具有和硬件完全不同的特征:1.1.2软件产品的特征(1)软件具有抽象特征。(2)软件具有无明显制造过程特征。(3)软件的生产与硬件不同。(4)软件产品不会“磨损”。(图1.1是软、硬件产品的失效率曲线)(5)成本昂贵特征。第1章软件工程引论13图1.1软件/硬件产品失效率曲线(a)失效率磨合调整磨损用坏时间(b)时间失效率修改点实际曲线理想曲线1.1.2软件产品的特征第1章软件工程引论14自从20世纪40年代第一台计算机问世以来,就有了“程序”的概念,可以认为它是软件的前身。经过了几十年的发展,人们对软件有了更为深刻的认识,在这几十年中,软件开发经历了三个发展阶段:20世纪50~60年代属于程序设计阶段;20世纪60~70年代为程序系统阶段;20世纪70年代之后进入软件工程阶段。各阶段的特点与区别见表1.2。1.1.3软件发展的阶段划分第1章软件工程引论15表1.2计算机软件发展的三个阶段及其特点阶段特点程序设计程序系统软件工程软件所指程序程序及说明书程序、文档、数据主要程序设计语言汇编及机器语言高级语言软件语言*软件工作范围程序编写设计和测试整个软件生命周期需求者程序设计者本人少数用户市场用户开发软件的组织个人开发小组开发小组及大、中型开发机构软件规模小型中、小型大、中、小型1.1.3软件发展的阶段划分第1章软件工程引论16阶段特点程序设计程序系统软件工程决定质量的因素个人技术小组技术水平技术与管理水平开发技术和手段子程序、程序库结构化程序设计数据库、开发工具、集成开发环境、工程化开发方法、标准和规范、网络及分布式开发、面向对象技术、计算机辅助软件工程维护责任者程序设计者开发小组专职维护人员硬件的特征高价、存储量小、可靠性差降价,速度、容量和可靠性明显提高向超高速、大容量、网络化、微型化方向发展软件的特征完全不受重视软件的技术发展不能满足需求,出现软件危机开发技术有进步,但仍未完全摆脱软件危机表1.2计算机软件发展的三个阶段及其特点第1章软件工程引论171.2软件危机1.2.1软件危机及其表现1963年,美国用于控制火星探测器的计算机软件中的一个“,”号被误写为“。”,而致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。1968年,北大西洋公约组织的计算机科学家们在联邦德国召开的国际会议上讨论了软件危机问题,同时也是在这个会议上提出了“软件工程”这个名词,导致了一门新的工程学科的正式诞生。简单地说,所谓软件危机,就是指在软件开发和软件维护过程中所存在的一系列严重问题。具体地说,软件危机具有如下一些表现:第1章软件工程引论18(1)软件开发没有真正的计划性,对软件开发进度和软件开发成本的估计常常很不准确,计划的制定带有很大的盲目因素,因此工期超出、成本失控的现象经常困扰着软件开发者。(2)对于软件需求信息的获取常常不充分,软件产品往往不能真正地满足用户的实际需求。(3)缺乏良好的软件质量评测手段,从而导致软件产品的质量常常得不到保证。1.2.1软件危机及其表现第1章软件工程引论19(4)对于软件的可理解性、可维护性认识不够;软件的可复用性、可维护性不如人意。(5)软件开发过程没有实现“规范化”,缺乏必要的文档资料或者文档资料不合格、不准确,难以进行专业维护。1.2.1软件危机及其表现(6)软件开发的人力成本持续上升,(如图1.2所示)。(7)缺乏自动化的软件开发技术(如图1.3所示)。第1章软件工程引论20图1.2计算机系统硬件、软件成本比例变化年份软件硬件成本/%100806040201950197019851995第1章软件工程引论21图1.3软件技术的发展落后于需求时间差距软件需求软件技术第1章软件工程引论22产生软件危机的原因可以归纳为主、客观两个方面。从客观上来看,软件不同于硬件,它的生产过程和产品都具有明显的“不可视”特征。(1)对于开发软件的过程进行管理和控制比较困难。在软件工程的早期,制定详细的开发计划并且进行全程跟踪调控,可望在一定程度上克服“开发过程不可视”造成的消极影响。(2)软件运行过程中如果发现了错误,那么必然是遇到了在开发时期(分析、设计、编码过程)引入的。利用足够的文档资料使不可视的产品可视化,有助于提升软件产品的可理解性和可维护性。1.2.2产生软件危机的原因第1章软件工程引论23从主观上分析,导致软件危机发生的另一大原因,可以归于在计算机系统发展的早期,软件开发的“个体化”特点,主要表现为忽视软件需求分析的重要性、忽视软件的可理解性、文档不完备、轻视软件的可维护性、过分强调编码技巧等等方面。1.2.2产生软件危机的原因第1章软件工程引论24一般来说,软件产品从策划、定义、开发、使用与维护直到最后废弃,要经过一个漫长的时期,通常把这个时期称为软件的“生命周期”。可以将生命周期分作“软件定义”、“软件开发”和“运行与维护”三个阶段。(1)在软件定义阶段中,主要进行软件目标的策划、可行性研究和软件的需求分析工作。软件生命周期及其阶段划分第1章软件工程引论25(2)软件被定义之后,进入开发阶段,主要对软件的体系架构、数据结构和主要算法进行设计和编码实现。统计数据表明,在典型的软件工程过程中,编码工作量大约只占软件开发全部工作量的15%~20%。(3)软件的运行与维护阶段在软件生命周期中占据的比例最大。针对不同的需求,维护工作一般可以分为纠错性维护、适应性维护、扩充性维护和预防性维护等不同类型。软件生命周期及其阶段划分第1章软件工程引论26Boehm(美国著名的软件工程专家,加州州立大学教授)指出,“软件是程序以及开发、使用、维护程序所需要的所有文档”。所以,软件产品除包括程序之外,应当包括完整、准确、翔实的文档资料。主要的文档应当包括“需求规格说明书”、“体系结构设计说明书”、“详细设计说明书”、“安装手册”、“操作手册”、“系统管理员手册”等。缺乏必要的配置文档,将严重影响软件的可理解性,从而给软件的维护造成严重障碍。软件应具有完整的配置文档第1章软件工程引论27值得注意的严重问题是,在软件开发的不同阶段进行修改所付出的代价是极其不同的。图1.4定性地描绘了在不同时期引入一个变动需要付出的代价的变动趋势。图1.5是美国贝尔实验室统计得出的定量结果。软件变更代价问题低中高代价早期中期晚期变更出现的时间图1.4变更代价随时间变化的趋势示意第1章软件工程引论28图1.5改正一个问题需要付出的代价2020010002000需求分析结构设计详细设计编码集成测试系统测试现场0.050.52.55改正一个问题的估算费用/美元改正一个问题的估算工作量/人日软件变更代价问题第1章软件工程引论29可以借鉴其他工程领域的成功经验,基于软件危机产生的主、客观原因,从软件工程技术和软件工程管理两方面来采取措施,防范软件危机的发生。(1)从管理层面上考虑。(2)从技术角度考虑。1.2.3解决软件危机的途径第1章软件工程引论301.3软件工程的产生及其发展1968年,北大西洋公约组织的计算机科学家们在原联邦德国召开的国际会议上,针对软件危机的严峻形势,提出并使用了“软件工程”这一术语。简单地说,软件工程是指导软件开发和维护的工程学科。它的核心思想是采用工程的概念、原理、技术和方法来开发和维护软件,把经过实践考验而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,从而大大提高软件开发的成功率和生产率。许多计算机专家都曾经描述过“软件工程”的定义。第1章软件工程引论31Boehm曾为软件工程下过定义:“运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料”。1983年,IEEE(电气和电子工程师协会)给出的软件工程定义为:“软件工程是开发、运行、维护和修复软件的系统方法”。FritzBauer(美国著名的软件工程专家)则给出了另一个关于软件工程学的定义:“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。软件工程的其他定义第1章软件工程引论32后来又有一些从事软件工程方法学研究的人陆续提出了许多更为完善的软件工程的定义,但主要思想都是强调软件开发过程中需要应用工程化原则的重要性。IEEE给出了关于软件工程的一个更加综合的定义:(1)将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程。即将工程化方法应用于软件开发与维护过程中。(2)对上述方法的研究。软件工程的其他定义第1章软件工程引论33就内容来看,软件工程应当包括三个要素:方法、工具和过程。(1)软件工程方法:为
本文标题:软件工程引论
链接地址:https://www.777doc.com/doc-213222 .html