软件工程江彦jiangyan26@126.com个人空间:软件工程教学安排讲课学时:30实验:30考试:120分钟作业:3次实验:6次,并上缴实验报告。成绩:期末考试70%,实验20%,作业10%教材和参考书教材:实用软件工程与实训杜文洁主编清华大学出版社主要参考书:张海藩,软件工程导论。第4版。北京:清华大学出版社,2003梅宏译.RogerSPressman著.软件工程:实践者的研究方法.第5版.北京:机械工业出版社,2002邵维忠等译.GradyBooch,JamesRaumbaugh,IvarJacobson著.UML用户指南(第2版).北京:机械工业出版社,2001徐家等译.[美]MartinFowlerKendallScott著.UML精粹(第2版)标准对象建模语言简明指南》.北京:清华大学出版社,2000第1章初识软件工程4学时引言建一个茅草屋的过程建一个别墅的过程写一个helloworld程序开发一个图书馆图书信息管理软件过程简陋的小屋—太简单!不要设计新农村别墅造型图—复杂!需要设计了别墅的设计—设计图纸、施工图纸设计和施工说明其他管理性文件项目计划书施工质量计划书建设标准和规范施工手册……典型helloworld程序—太简单!不要设计#includestdio.hintmain(){printf(“helloworld!”);//输出helloworld!return0;}图书馆图书信息管理软件—复杂!需要设计图书馆信息管理系统--需求分析图书馆信息管理系统--功能设计图书管理信息系统读者信息管理借书还书图书信息管理系统管理还书信息还书界面还书信息验证还书处理图书馆信息管理系统--物理模型设计WEB服务器HP读者浏览器PCInternet办公室管理PC路由器拨号数据库/应用服务器SUN采编编辑图书PC流通借还书PC读者浏览器PC防火墙交换机交换机其他系统维护PC图书馆内部局域网读者浏览器PC交换机本单位其他用户其他网站维护PC服务网站读者浏览器PC拨号图书馆信息管理系统—部分逻辑模型设计IPO326还书界面IPO325处罚事物分发IPO303破损处罚IPO306通知预约预约记录/书库书库/借还书记录借还书记录IPO300催还读者IPO304超期处罚处罚记录IPO302丢失处罚IPO322保存处罚信息IPO324发送邮件处罚还书部IPO320还书工作环境IPO321事物分发IPO301还书处理IPO328破损处罚界面IPO329超期处罚界面IPO327丢失处罚界面通知还书图书馆信息管理系统--数据设计--过程设计提示对话框该书已全部借出,是否预借?预借退出图书馆信息管理系统--界面设计点评:软件生产同其他行业,例如建筑行业一样需要工程化、规模化、自动化、标准化。软件生产过程中也有中间环节(设计物理模型、逻辑模型、界面、数据、过程等等),也可以随时进行质量检查。软件生产中也需要有高效的工具。软件生产人员也可以细分为:分析员、设计员、程序员、测试员、操作员、维护人员等等。软件生产低水平的手工作坊不能适应当今的大规模软件开发需求……怎么办?软件工程化开发与维护!主要内容1)软件的特点2)软件危机的现象3)软件工程定义及其概念4)软件工程发展简史5)软件工程的7条基本原理6)主流的软件工程方法7)软件生命周期模型掌握理解掌握了解理解理解理解要求1.1软件与软件危机1.1.1软件定义1983年,IEEE(国际电气与电子工程协会)为软件下的定义是:计算机程序、方法、规则和相关的文档资料以及在计算机上运行时所必需的数据。对软件比较公认的解释:软件是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。记住软件=程序+数据+文档软件≠程序1.1软件与软件危机1.1.2软件的特点:软件的质量是开发出来的,不是“制造”出来的软件可能会被“废弃”,但不会被“用坏”过去的软件大多是“定制”,而不是“装配”的。P21.1.2软件的特点(续)软件生产至今尚未摆脱手工方式,软件开发的手工行为造就了一个致命的问题,就是为应用“量身订做”软件。其他工程领域有产品标准,所有生产厂家按照标准生产产品。例如,不管哪个厂家生产的灯泡,只要瓦数、电压、电流、接口几个指标符合要求,用户买来装上就可以使用。而长期以来,软件给人的感觉是修改几条指令很简单,客户总是强调软件要适应自己的业务需求。因此,软件产品大多是为客户“订做”的,通用性差。软件涉及各行各业的知识,这对软件工程师提出了很高要求。软件不仅是一种在市场上推销的工业产品,也是与文学艺术作品相似的精神作品。与体力劳动相比,精神活动过程的特点是“不可见性”,这大大增加了组织管理上的困难。社会对软件的要求用户的需求更高、涉及的领域更广软件运行环境更加庞大软件更新换代更加频繁1.1.3软件危机--软件生产的现状P3“已完成”的软件不满足用户的需求软件产品的质量没有保证。开发进度不能保障,交付时间一再拖延。开发成本超出预算。软件没有适当的文档危机定义:计算机软件开发和维护过程中所遇到的一系列严重问题。需求不满足哈药“城门失火”2000年,哈尔滨医药集决定上ERP项目,参与软件争夺的两个主要对手是Oracle与利玛。一开始两家在ERP软件上打得难解难分,一年之后,Oracle击败利玛,哈药决定选择标致巨额投入搁浅MRPII项目的设备,目标是实现全公司订单、生产、库存、销售、人事、财务等的统一管理,以提高公司运行效益,增进企业经济效益。许继项目被迫暂停1998年初,河南许继集团采用Symix公司(现更返回软件质量案例美国阿波罗8号太空飞船的一个软件错误,造成了存储器部分信息丢失;而阿波罗14号在飞行的10天中,出现了18个软件错误。返回产生软件危机的原因软件维护费用急剧上升,直接威胁计算机应用的扩大软件生产技术进步缓慢,是加速这一软件危机的重要原因1.2软件行业的出路?--软件工程1)1993IEEE软件工程定义:P6软件工程是①将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程,即将工程化应用于软件开发和管理之中,②对①中所选方法的研究。注意:软件工程研究所依据的基础理论:数学、计算机科学、经济学、工程学、管理学和心理学等学科。其中数学和计算机科学用于构造模型、分析算法;工程学用于评估成本、制定规范和标准;管理学和心理学用于进度、资源、环境、质量、成本等的分析和管理。2)软件工程研究的主要内容软件开发技术方面:研究软件开发方法、软件开发过程、软件开发工具和环境。软件管理方面:主要研究软件管理学、软件经济学、软件心理学。3)软件工程层次化(补充)质量保证层工具层方法层过程层4)规范化和文档化(补充)规范化:使众多的开发者遵守相同的规范,使软件生产摆脱个人生产方式,进入标准化、工程化的生产方式—关注国标、行标。文档化:把软件的设计思想、设计过程和实现过程完整地记录下来,便于各类相关人员交流和沟通;使软件开发过程由不可见变为可见,便于管理者对软件生产进度和开发过程进行管理;是验收、质量检测的标准和依据。5)软件工程的目标(补充)软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件,其主要目标如下:实现预期的软件功能,达到较好的软件性能,满足用户的需求。增强软件过程可见性和可控性,保证软件的质量。提高软件的可维护性,降低维护费用。提高软件开发生产率,及时交付使用。合理预算开发成本,付出较低的开发费用。软件工程7条基本原理(补充)原理1、用分阶段的生命周期计划严格管理在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作,这条基本原理意味着,应该把软件生命周期划分成若干阶段,并相应地制定出切实可行的计划,按照计划对软件的开发与维护工作进行控制。原理2、坚持进行阶段评审。软件的质量保证工作不能等到编码阶段结束之后再进行。经过大量的统计数据表明,大部分错误是在编码之前造成的,其中,设计错误约占软件错误的63%,编码错误占37%。在前期改正错误所需要的可能只是橡皮和铅笔,而在交付后改正错误需要的工作就太多了:查找出错的代码、重新组织程序结构和数据结构、测试、修改文档。也就是说,错误发现与改正的越晚,所需付出的代价也越高。因此,在每个阶段都应该进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。软件工程核心--7条基本原理原理3、实行严格的产品控制基准配置又称基线配置,它们是经过阶段评审后的软件配置成份。基准配置管理的思想是:一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审和控制,获得批准以后才能实施修改。目的是当需求变动时,其它各阶段的文档或代码随之相应变动,以保证软件的一致性。软件工程核心--7条基本原理原理4、采用现代程序设计技术自从提出软件工程概念后,人们一直把主要精力用于研究各种新的程序设计技术。60年代末提出了结构化程序设计技术,以后又进一步发展出结构化分析与设计技术、面向对象的分析和设计技术。实践表明,采用先进的技术既可提高软件开发和维护的效率,又可提高软件质量。软件工程核心--7条基本原理原理5、结果应能清楚地审查软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况难于评价和管理。为更好地进行管理,应根据软件开发的总目标及完成期限,明确地规定开发小组的责任和产品标准,从而使所得到的产品有明确的标准能清楚地审查。软件工程核心--7条基本原理原理6、开发小组的人员应该少而精软件开发小组成员的素质应该好,人数不宜过多。素质高的人员开发效率高、质量好、错误少。开发小组人员过多,信息交流造成的通信开销会急剧增加。软件工程核心--7条基本原理原理7、承认不断改进软件工程实践的必要性遵循上述六条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产。但是,仅有上述六条原理并不能保证软件开发与维护的过程能赶上时代前进的步伐,因此,应把承认不断改进软件工程实践的必要性作为软件工程的第七条基本原理。软件工程核心--7条基本原理软件过程模型(补充)1)定义:软件过程是人们开发和维护软件及相关产品(如软件项目计划,设计文档、代码、测试用例及用户手册)的活动、方法、实践和改进的集合。解释:过程是为了达到一个目标所进行的一系列活动,或者说是为达到一个目标而设计的“路线图”。例如:为了培养一个世界体操冠军,需要研究训练方法、运用先进的训练器械、不断改进训练过程,最终有可能培养出世界冠军。比较:软件开发和维护工作的目标是按时交付高质量的、满足需求的、低成本的软件代码和文档,为此也需要研究软件工程的过程、工具和方法,比如过程可以选择RUP或者XP,工具可以选择RationalSuite或者其他,方法可以是面向对象也可以是面向过程等等。1.4软件生命周期p11一个软件从提出开发要求到废弃为止的整个时期。通常划分为:计算机系统工程、需求分析、设计、编码、测试、运行和维护8个阶段。问题定义阶段:主要内容是确定“要解决什么问题?”。通过对客户的访问调查,系统分析人员简要地写出关于问题的背景、解决的意义和目标。一般这个活动放在可行性研究活动之前,作为其活动的一部分。可行性研究:确定“要解决的问题是否有解?”。分析待开发系统的总体目标和范围,研究系统的可行性和可能的解决方案,对资源、成本及进度进行合理的估算。需求分析:明确“为了解决这个问题,系统必须做什么?”。通过分析、整理和提炼所收集到的用户需求,建立完整的分析模型,将其编写成软件需求规格说明和初步的用户手册。通过评审需求规格说明书,确保对用户需求达到共同的理解与认识。需求规格说明书明确地描述了软件的功能,列出软件必须满足的所有约束条件,并定义软件的输入和输出接口。概要设计:概要设计“系统的蓝图”。确定解决问题的策略,设计目标系统框架结构和主要元素的布局。详细设计:详细设计