《第1章软件工程概述》由会员分享,可在线阅读,更多相关《第1章软件工程概述(54页珍藏版)》请在金锄头文库上搜索。
1、信息工程系软件教研室,1,软件工程,山东交通学院信息工程系 徐延峰 邮箱:yanf_,信息工程系软件教研室,2,上课相关说明,上课按时到,不迟到 课堂认真听讲,手机关机或设为静音 有问题及时问,不积攒问题 有事请假,严格考勤,信息工程系软件教研室,3,课程说明,本课以传统的软件工程和面向对象的软件工程为主线,根据软件开发“工程化”思想,通过大量的应用实例,系统地介绍软件工程的基本概念、基本原理、软件开发的过程、开发方法、应用技术和实用工具。主要包括可行性研究、需求分析、总体设计、详细设计、编码、测试、维护以及有关软件管理、软件开发工具和环境等方面的内容。本课程的特点是该领域涉及范围非常广泛,更
2、新非常快;另一突出特点是实践性强。,信息工程系软件教研室,4,课程考核,本课程最后成绩由平时成绩和期末考试卷面成绩综合确定,平时成绩主要考查学生的作业、出勤、测验等方面,占30%,期末卷面成绩占70。,信息工程系软件教研室,5,参考书,1.(美)Shari Lawrence Pfleeger .Sofeware Engineering Theory and Practice(Second Edition).吴丹,史争印,唐忆译. 北京:清华大学出版社,2003,8 2. (英) Ian Sommerville .Sofeware Engineering (6th Edition). 程成等译.
3、 北京:机械工业出版社,2003,1 3. 实用软件工程第二版,郑人杰、殷人昆、陶永雷编著,清华大学出版社。 4.软件工程,张海藩编著,人民邮电出版社。 5.实用软件工程,赵池龙编著,电子工业出版社。 6.软件工程,杨文龙、姚淑珍等编著,电子工业出版社。 7.软件开发管理的实践,张少仲、李远明编著,清华大学出版社。,信息工程系软件教研室,6,第一章 软件工程概述,信息工程系软件教研室,7,主要内容,软件工程产生的背景 软件工程的概念及相关的基本知识 软件生存周期的六个阶段及各阶段的主要任务 软件开发的主要开发模型 软件开发过程及软件工程三要素,信息工程系软件教研室,8,1.1 软件工程学产生的
4、背景(一),问题一:什么是软件?软件是由计算机程序的发展而形成的一种概念。程序是按既定算法,用某种计算机语言所规定的指令或语句编写的一系列指令或语句的集合。软件是程序再加上程序实现和维护程序时所必须的文档的总称。,信息工程系软件教研室,9,软件,被普遍接受的软件的定义是:软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。其中程序是按照事先设计的功能和性能要求执行的指令序列;数据是是程序能正常操纵信息的数据结构;文档是与程序开发维护和使用有关的各种图文资料。,信息工程系软件教研室
5、,10,软件,中国大百科全书中对软件的定义是:软件是计算机系统中的程序和有关文件(文档)。根据国际标准化组织的定义,软件是“与计算机系统操作有关的程序、过程、规则、及任何有关的文档资料”。,软件=程序+数据+文档,信息工程系软件教研室,11,软件工程学产生的背景(二),问题二:软件发展经历了哪些阶段?5060年代:程序设计阶段(个性化软件环境) 6070年代:程序系统阶段(软件作坊) 70年代以后:软件工程阶段。,信息工程系软件教研室,12,软件工程学产生的背景(三),问题三:什么是软件危机?开发软件所需的高成本同产品低质量之间有着尖锐的矛盾,即计算机软件的开发和维护中遇到的一系列严重问题。,
6、信息工程系软件教研室,13, IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。 OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。”,1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序:DO 5 I=1,3 误写为:DO 5 I=1 . 3,1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁
7、。,软件危机,信息工程系软件教研室,14,软件危机的表现,对开发成本和进度估计不准确 用户对已完成的软件不满意 软件产品的质量往往靠不住 软件常常是不可维护的 软件通常没有合适的文档资料 软件成本在计算机系统总成本中比例逐年上升 软件开发生产率提高的速度,跟不上计算机普及速度。,信息工程系软件教研室,15,软件危机产生的原因,1与软件自身的特点有关 (1)软件不同于硬件,管理和控制软件开发过程相当困难,软件不会因为使用时间过长而被用坏。 (2)软件不同于一般程序,它的一个显著特点是规模庞大。 2和软件开发与维护的方法不正确有关 (1)对用户要求没有完整准确地认识就匆忙编写程序是许多软件开发工程
8、失败的主要原因之一;(2)没有认识到程序只是完整的软件产品的一个组成部分。,信息工程系软件教研室,16,解决软件危机的途径,要解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。,信息工程系软件教研室,17,1.2 软件工程的概念,软件工程是指导计算机软件开发和维护的工程学科,采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。,信息工程系软件教研室,18,软件工程具有的本质特性,软件工程关注于大型程序的构造
9、软件工程的中心课题是控制复杂性 软件经常变化 开发软件的效率非常重要 和谐地合作是开发软件的关键 软件必须有效地支持它的用户在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人,信息工程系软件教研室,19,软件工程的基本原理,著名的软件工程专家B.W.Boehm综合这些学者们的意见并总结了TRW公司多年开发软件的经验,于1983年在一篇论文中提出了软件工程的7条基本原理。他认为这7条原理是确保软件产品质量和开发效率的原理的最小集合。,信息工程系软件教研室,20,软件工程的基本原理,1. 用分阶段的生命周期计划严格管理 2. 坚持进行阶段评审 3. 实行严格的产品控制 4. 采用现代
10、程序设计技术 5. 结果应能清楚地审查 6. 开发小组的人员应该少而精 7. 承认不断改进软件工程实践的必要性,信息工程系软件教研室,21,软件工程与其他学科的区别,软件工程和计算机科学有何区别?计算机科学侧重理论和基础,而软件工程则侧重于开发和交付的实际活动。软件工程和系统工程有何区别?系统工程侧重基于计算机系统开发的所有方面,包括硬件、软件和处理工程。软件工程只是它的一部分。,信息工程系软件教研室,22,软件工程所面临的主要问题是什么?,1)遗留系统的挑战:维护和更新这些软件,既要避免过多的支出,又要不断地交付基本的业务服务。 2)多样性的挑战:必须开发出新技术,制作可靠的软件,从而足以灵
11、活应对这种多样性。3)交付上的挑战:在不损及系统质量的前提下,缩短大型、复杂系统的移交时间。,信息工程系软件教研室,23,软件工程方法学,软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。 所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。,信息工程系软件教研室,24,软件工程方法学,软件工程方法学包含3个要素:方法、工具和过程。 方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题; 工具是为运用方法而提供的自动的或半自动的软件工程支撑环境; 过程是
12、为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,信息工程系软件教研室,25,软件工程方法学,目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。 1. 传统方法学生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。采用这种方法学开发软件的时候,从对问题的抽象逻辑分析开始,一个阶段一个阶段地进行开发。,信息工程系软件教研室,26,软件工程方法学,2.
13、 面向对象方法学 结构化范型只能获得有限成功的一个重要原因是,这种技术要么面向行为(即对数据的操作),要么面向数据,还没有既面向数据又面向行为的结构化技术。 数据和对数据的处理原本是密切相关的,把数据和操作人为地分离成两个独立的部分,自然会增加软件开发与维护的难度。与传统方法相反,面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。,信息工程系软件教研室,27,1.3 软件生存期,1可行性研究与计划:调查用户需求及处理过程,进行可行性分析研究 2需求分析:分析用户需求,建立目标系统逻辑模型。 3系统设计:分为概要设计和详细设计,概要设计建立目标
14、系统的总体结构及数据库设计;详细设计对模块进行过程描述,确定模块间的详细接口。 4程序设计:按详细设计说明书为每个模块编写程序。 5系统测试:检查和调试程序的正确性,排除错误。6维护运行:运行软件;对程序扩充修改;修改有关的文档。,信息工程系软件教研室,28,1.4 开发模型,瀑布模型 演化模型 螺旋模型 喷泉模型 RUP开发 敏捷过程与极限编程 微软过程,信息工程系软件教研室,29,问题定义,编 码,需求分析,设 计,可行性研究,运行与维护,测 试,开发 时期,运行维护时期,计划时期,(目标与范围说明书),(可行性论证论告),(维护报告),(测试报告),(程序),(设计文档),(需求说明书)
15、,1.4.1瀑布模型(Waterfall Model),瀑布模型,信息工程系软件教研室,30,软件生存周期及软件开发模型,瀑布模型软件开发具有以下几个特征: 1阶段间的顺序性和依赖性 顺序性是指:只有等前一阶段的工作完成以后,后一 阶段的工作才能开始;前一阶段的输出文档,就是后一 阶段的输入文档。依赖性又同时表明了,只有前一阶段 有正确的输出时,后一阶段才可能有正确的结果。,信息工程系软件教研室,31,软件生存周期及软件开发模型,2推迟实现的观点过早地考虑程序的实现,常常导致大量返工,有时甚 至给开发人员带来灾难性的后果。瀑布模型在编码以前安排了分析阶段和设计阶段,并 且明确宣布,这两个阶段都
16、只考虑目标系统的逻辑模型, 不涉及软件的物理实现。把逻辑设计与物理设计清楚地划分开来,尽可能推 迟程序的物理实现,这是瀑布型软件开发的一条重要的 指导思想。,信息工程系软件教研室,32,软件生存周期及软件开发模型,3质量保证的观点为了保证质量,瀑布型软件开发在各个阶段坚持了两 个重要的做法:(1)每一阶段都要完成规定的文档。没有完成文档, 就认为没有完成该阶段的任务。(2)每一阶段都要对完成的文档进行复审,以便尽早 发现问题,消除隐患。,信息工程系软件教研室,33,软件生存周期及软件开发模型,1.4.2 演化模型(evolutional model)先做试验开发,其目标只是在于探索可行性,弄清软 件需求;然后在此基础上获得较为满意的软件产品。通常把第一次得到的试验性产品称为“原型”。显然,演化模型在克服瀑布模型缺点、减少由于软件需求不明确而给开发工作带来风险方面,确有显著的效果。,信息工程系软件教研室,34,