您好,欢迎访问三七文档
软件工程学教程西安邮电大学曹小鹏cxp2760@163.comcaoxp@xiyou.edu.cn13991212068课程简介课程名称:软件工程教材:《SoftwareEngineering》(英)IanSommerville《软件工程导论》张海藩教学方式:授课+项目讨论+上机实习课时安排:32+16考试类别:闭卷考试参考教材:1.《软件工程——实践者之路》(原名:SoftwareEngineering–APractitioner’sApproach,SixthEdition),RogerS.Pressman,清华大学出版社20062.软件工程学教程陈明科学出版社3.软件工程实践者的研究方法黄柏素等译机械4.软件工程邓良松等西安电子科技大学出版社第1章软件工程概述1.1计算机软件概念1.2软件的发展1.3软件危机与软件问题1.4软件工程与开发准则1.5软件生命周期1.6软件开发模型1.1.1计算机软件软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料1.1计算机软件概念1.1.2软件的特点软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题软件的生产与硬件不同,在它的开发过程中没有明显的制造过程,软件维护困难1.1.2软件的特点(2)软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性软件的开发至今尚未完全摆脱手工艺的开发方式软件本身是复杂的,相当多的软件工作涉及到社会因素实际问题的复杂性程序逻辑结构的复杂性软件成本相当昂贵1.1.3软件与硬件的关系硬件的故障率曲线故障率生命初期“磨损”后软件的故障率曲线故障率时间理想曲线实际曲线修改副作用1.1.4软件分类1、按功能进行划分:–(1)系统软件:能够控制计算机系统各部件(软硬件)协调、高效地工作和进程处理、资源共享管理等操作系统数据库管理系统设备驱动程序通信处理程序等(2)支撑软件工具软件,它帮助软件开发人员开发自己的软件产品–文本编辑程序–文件格式化程序–磁盘向磁带向数据传输的程序–程序库系统–支持需求分析、设计、实现、测试和支持管理的软件为特定的应用目的而开发的服务性软件商业数据处理软件工程与科学计算软件计算机辅助设计/制造软件系统仿真软件智能产品嵌入软件医疗、制药软件事务管理、办公自动化软件计算机辅助教学软件(3)应用软件类别参加人员数研制期限源程序行数微型11~4周0.5k小型11~6月1k~2k中型2~51~2年5k~50k大型5~202~3年50k~100k甚大型100~10004~5年1M(=1000k)极大型2000~50005~10年1M~10M2、按软件规模进行划分只是一个人,在几天之内完成的软件。写出的程序不到5百行语句,仅供个人专用。通常这种小题目无需做严格的分析,也不必要有一套完整的设计、测试资料。不过这并不是说可以随便地不讲任何方法地做。事实说明,即使这样小的题目,如果经过一定的分析、系统设计、结构化编码以及有步骤地测试,肯定也是非常有益的。(1)微型(2)小型一个人半年之内完成的2千行以内的程序。例如,数值计算问题或是数据处理问题就是这种规模的课题。这种程序通常没有与其它程序的接口。但需要按一定的标准化技术、正规的资料书写以及定期的系统审查。只是没有大题目那样严格。(3)中型5个人以内在一年多时间里完成的5千到5万行的程序。这种课题开始出现软件人员之间、软件人员与用户之间的联系、协调的配合关系问题。因而计划、资料书写以及技术审查需要比较严格地进行。这类软件课题比较普遍,许多应用程序和系统程序就是这样的规模。在开发中使用系统的软件工程方法是完全必要的,这对提高软件产品质量和程序人员的工作效率起着重要的作用。(4)大型5至10个人在两年多的时间里完成的5万到10万行的程序。例如编译程序、小型分时系统、应用软件包、实时控制系统等很可能是这种软件。参加工作的软件人员需要按二级管理,例如划分成若干小组,每组5人以下为好。在任务完成过程中,人员调整往往不可避免。因此会出现对新手的培训和逐步熟悉工作的问题。对于这样规模的软件,采用统一的标准,实行严格的审查是绝对必要的。由于软件的规模庞大以及问题的复杂性,往往会在开发的过程中出现一些事先难于做出估计的不测事件。(5)甚大型100至1000人参加用4到5年时间完成的具有100万行程序的软件项目。这种甚大型项目可能会划分成若干个子项目,每一个子项目都是一个大型软件。子项目之间具有复杂的接口。例如,实时处理系统、远程通信系统、多任务系统、大型操作系统、大型数据库管理系统、军事指挥系统通常现有这样的规模。很显然,这类问题没有软件工程方法的支持,它的开发工作是不可想象的。(6)极大型2000人到5000人参加,10年内完成的1000万行以内的程序。这类软件很少见,往往是军事指挥、弹道导弹防御系统。3、按工作方式划分–实时处理软件:指在事件或数据产生时立即进行处理–分时软件:在多个用户在联机情况下同时要求系统对其进行处理时,系统将处理机时间轮流分配给各用户,使用户感到系统仅为自己服务–交互式软件:可通过各种用户界面实现人机通信–批处理软件:将一组作业或一批数据按要求的顺序逐个处理,直至全部作业处理完毕(1)项目软件,也称定制软件–是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。–例如军用防空指挥系统、卫星控制系统的软件就属于这一类。–这类项目软件中有的软件带有试验研究性质,项目完成后根据需要可能在此基础上做进一步开发。为取得客户的委托项目,软件开发机构的质量管理、技术实力、开发经验以及履行合同的信誉成为受到重视的问题。3、按服务对象范围划分(2)产品软件是由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。这是一些服务于多个目的及多个用户的软件。例如,文字处理软件、财务处理软件、人事管理软件等。由于要参与市场竞争,其功能、使用性能以及培训和售后服务显得尤为重要。1.2软件的发展随着计算机硬件性能的极大提高和计算机体系结构的不断变化,计算机软件系统更加成熟和更为复杂,从而促使计算机软件的角色发生了巨大的变化,其发展历史大致可以分为如图所示的四个阶段。1.2软件的发展早期(程序设计阶段):【时间】:20世纪50年代初期至60年代中期【特点】:硬件已经通用化,而软件的生产却是个体化。软件产品为专用软件,规模较小,功能单一,开发者即使用者;软件只有程序,无文档;软件设计在人们的头脑中完成,形成了错误观念“软件=程序”。【典型技术】:面向批处理、自定义软件1.2软件的发展第二阶段(程序系统阶段):【时间】:20世纪60年代中期至70年代末期【特点】:多道程序设计技术、多用户系统、人机交互式技术、实时系统和第一代数据库管理系统的出现,使得计算机应用得到迅速。出现了专门从事软件开发的“软件作坊”,软件作为产品得到了广泛应用。但在软件业空前繁荣的同时,原始的开发与维护方法陷入了极端困境,“软件危机”产生。【典型技术】:多用户、实时、数据库、软件产品1.2软件的发展第三阶段(软件工程阶段):【时间】:20世纪70年代中期至80年代中期【特点】:微处理器的出现和广泛应用,使得计算机真正成为大众化的东西。以软件的产品化、系列化、工程化和标准化为特征的软件产业发展起来,软件开发有了可以遵循的软件工程化的设计准则、方法和标准。【典型技术】:分布式系统、广域网和局域网、低成本的硬件、嵌入“智能”1.2软件的发展第四阶段:【时间】:20世纪80年代中期至今【特点】:计算机的发展不再着重与单台计算机和计算机程序、而是针对计算机和软件的综合应用。由复杂的操作系统控制的PC机、广域网、局域网、Internet,配合以先进的软件应用已经成为标准。面向对象的开发方法在许多领域迅速取代了传统的软件开发方法。【典型技术】:强大的桌面系统、面向对象技术专家系统、人工神经网络、网络计算机1.3软件危机与软件问题1.3.1软件危机软件总是超出预算、落后于进度表,而且不可靠在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件受其自身特点的影响,生产过程不象硬件那样规范,受人的因素和外界影响很大,在软件生产的各阶段都会引入不同程度的错误,造成不能预期完成任务,致使成本上升,甚至导致软件失败1.3.2软件危机的表现(1)软件开发和维护费用急剧上升(2)不重视文档资料(3)产品质量不可靠(4)软件产品成本高于硬件产品(5)供需失配占总成本的百分比020406080100195519701985硬件软件1.3.3软件危机的原因一方面是与软件本身的特点有关;另一方面软件开发和维护的方法不正确:–忽视软件开发前期的需求分析;–开发过程没有统一、规范方法论的指导;–文档资料不齐全;–忽视人与人的交流;–忽视测试工作,提交给用户的软件质量差;–轻视软件的维护。1.4软件工程与开发准则由于认识到软件的设计、实现、维护和传统的工程规则有相同的基础,于是北大西洋公约组织(NATO)于1967年首次提出了“软件工程(SoftwareEngineering)”的概念。关于编制软件与其他工程任务类似的提法,得到了1968年在德国召开的NATO软件工程会议的认可。委员会的结论是,软件工程应使用已有的工程规则的理论和模式,来解决所谓的软件危机。软件危机至今仍然困绕着我们,这表明软件生产过程在许多方面和传统的工程相似,但却具有独特的属性和问题。1.4.1软件工程概念基本思想是强调在软件开发过程中应用工程化原则,解决软件的整体质量较低、最后期限和费用没有保证等问题。Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料IEEE:软件工程是(1)把系统的,规范的,可度量的途径应用于软件开发,运行和维护过程,也就是把工程应用于软件。(2)研究(1)中提到的途径。软件工程三要素软件工程是一种层次化的技术软件工具为软件工程方法提供了自动的或半自动的软件支撑环境软件工程方法为软件开发提供了“如何做”的技术软件工程过程定义了:方法使用的顺序要求交付的文档资料为保证质量和适应变化所需要的管理软件开发各个阶段完成的里程碑里程碑的含义:里程碑在项目生命中是一个重要的界标、发展或转折点一般地,使用它来标记项目一个重要部分的完成,它并不代表正在做一个工作,仅指明这一工作已经开始或已经结束软件工程三要素(2)1.4.3软件工程的基本准则1、严格阶段管理有人经统计发现,在不成功的软件项目中有一半左右是由于计划不周造成的,在软件开发与维护的漫长的生命周期中,需要完成许多性质各异的工作。这条基本准则意味着,应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。1.4.3软件工程的基本准则(2)2、坚持阶段评审软件的质量保证工作不能等到编码阶段结束之后再进行:第一,大部分错误是在编码之前造成的,例如,根据Boehm等人的统计,设计错误占软件错误的63%,编码仅占37%;第二,错误发现与改正得越晚,所需付出的代价也越高。因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。1.4.3软件工程的基本准则(3)3、加强产品控制在软件开发过程中不应随意改变需求,因为改变一项需求往往需要付出较高的代价。但是,在软件开发过程中改变需求又是难免的,由于外部环境的变化,相应地改变用户需求是一种客观需要,显然不能硬性禁止客户提出改变需求的要求,而只能依靠科学的产品控制技术来顺应这种要求当改变需求时,为
本文标题:第一章软件工程概述
链接地址:https://www.777doc.com/doc-203639 .html