武当山旅游门户网站()软件工程吴洁明北方工业大学信息工程学院wujieming@263.comQQ:5005620武当山旅游门户网站()软件工程教学安排讲课学时:48课外实验:48讲课:30实践:10讨论:6考试:2成绩:期末考试90%,实验10%武当山旅游门户网站()教材和参考书教材:软件工程基础实践教程吴洁明清华大学出版社2007年主要参考书:RogerSPressman著。软件工程:实践者的研究方法。第6版。梅宏译。北京:机械工业出版社,2005郑人杰,殷人昆,陶永雷。实用软件工程。第2版。北京:清华大学出版社,1997卡耐基-梅隆大学软件工程研究所编著。能力成熟度模型(CMM):软件过程改进指南。刘孟仁等译。北京:电子工业出版社,2001IvarJacobson,GradyBooch,JamesRumbaugh著。统一开发软件工程。周伯生,冯学民,樊东平译。北京:机械工业出版社,2002ScottWAmbler著。敏捷建模:极限编程和统一过程的有效实现。张嘉路等译。北京:机械工业出版社,2003IBM大学站点微软MSDN武当山旅游门户网站()第1章软件工程概述2学时武当山旅游门户网站()引言建一个茅草屋的过程建一个别墅的过程写一个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)软件生命周期模型8)软件工程的相关标准和规范9)软件工程师职业道德规范掌握理解掌握了解理解理解理解了解了解要求武当山旅游门户网站()1.1软件与软件危机1.软件定义1983年,IEEE(国际电气与电子工程协会)为软件下的定义是:计算机程序、方法、规则和相关的文档资料以及在计算机上运行时所必需的数据。对软件比较公认的解释:软件是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。记住软件=程序+数据+文档软件≠程序武当山旅游门户网站()1.1软件与软件危机1.1.1软件的特点:软件是一种逻辑实体,具有抽象性。人们可以把它记录在纸上、磁盘或光盘等介质上,但却无法看到软件本身的形态,必须通过观察、分析、思考和判断才能了解它的功能和性能。软件一旦研究开发成功,其生产过程就变成复制过程,不像其他工程产品那样有明显的生产制造过程。由于软件复制非常容易,因此出现了软件产品的版权保护问题和打击盗版的问题。软件对硬件和环境有着不同程度的依赖性,这导致了软件升级和移植的问题。计算机硬件和支撑环境不断升级,为了适应运行环境的变化,软件也需要不断维护,并且维护的成本通常比开发成本高许多。武当山旅游门户网站()1.1.1软件的特点(续)软件生产至今尚未摆脱手工方式,软件开发的手工行为造就了一个致命的问题,就是为应用“量身订做”软件。其他工程领域有产品标准,所有生产厂家按照标准生产产品。例如,不管哪个厂家生产的灯泡,只要瓦数、电压、电流、接口几个指标符合要求,用户买来装上就可以使用。而长期以来,软件给人的感觉是修改几条指令很简单,客户总是强调软件要适应自己的业务需求。因此,软件产品大多是为客户“订做”的,通用性差。软件涉及各行各业的知识,这对软件工程师提出了很高要求。软件不仅是一种在市场上推销的工业产品,也是与文学艺术作品相似的精神作品。与体力劳动相比,精神活动过程的特点是“不可见性”,这大大增加了组织管理上的困难。武当山旅游门户网站()社会对软件的要求用户的需求更高、涉及的领域更广软件运行环境更加庞大软件更新换代更加频繁武当山旅游门户网站()1.1.2软件危机--软件生产的现状“已完成”的软件不满足用户的需求软件产品的质量没有保证。开发进度不能保障,交付时间一再拖延。开发成本超出预算。软件没有适当的文档危机定义:计算机软件开发和维护过程中所遇到的一系列严重问题。武当山旅游门户网站()产生软件危机的原因与软件的特点有关与软件开发和维护的方法有关武当山旅游门户网站()1.2软件行业的出路?--软件工程1)1993IEEE软件工程定义:软件工程是①将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程,即将工程化应用于软件开发和管理之中,②对①中所选方法的研究。注意:软件工程研究所依据的基础理论:数学、计算机科学、经济学、工程学、管理学和心理学等学科。其中数学和计算机科学用于构造模型、分析算法;工程学用于评估成本、制定规范和标准;管理学和心理学用于进度、资源、环境、质量、成本等的分析和管理。武当山旅游门户网站()2)软件工程研究的主要内容技术方面:研究软件开发方法、软件开发过程、软件开发工具。管理方面:主要研究软件项目管理学、软件经济学、软件心理学。武当山旅游门户网站()3)软件工程层次化质量保证层工具层方法层过程层武当山旅游门户网站()4)规范化和文档化规范化:使众多的开发者遵守相同的规范,使软件生产摆脱个人生产方式,进入标准化、工程化的生产方式—关注国标、行标。文档化:把软件的设计思想、设计过程和实现过程完整地记录下来,便于各类相关人员交流和沟通;使软件开发过程由不可见变为可见,便于管理者对软件生产进度和开发过程进行管理;是验收、质量检测的标准和依据。武当山旅游门户网站()5)软件工程的目标软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件,其主要目标如下:实现预期的软件功能,达到较好的软件性能,满足用户的需求。增强软件过程可见性和可控性,保证软件的质量。提高软件的可维护性,降低维护费用。提高软件开发生产率,及时交付使用。合理预算开发成本,付出较低的开发费用。武当山旅游门户网站()1.3软件工程发展简史1968年在德国格密斯(Garmish)举行的学术会议上,北大西洋公约组织(NATO)正式提出了“软件工程”这一术语。软件工程作为工程学科家族中的新成员,对软件产业的形成和发展起了决定性作用,它指导人们科学地开发软件,有效地管理软件项目,对提高软件质量具有重要作用。武当山旅游门户网站()1.3软件工程发展简史(续)在20世纪70年代基本形成了软件工程的概念、框架、方法,被称之为第一代软件工程,即传统软件工程。结构化分析、结构化设计和结构化编程方法是这个时期的代表。80年代出现的Smalltalk80程序设计语言标志着面向对象程序设计进入了实用阶段,从80年代中到90年代中,研究的重点转移到面向对象分析和设计上来,从而演化成软件工程的第二代,称之为对象工程。90年代后期,软件工程的一个重要进展就是基于组件的开发方法。为了提高软件生产力,尽可能地利用可复用组件来组装成新的应用软件系统。到目前为止,组件技术的研究和发展形成了新一代软件工程,即第三代软件工程,也有不少人称之为组件工程。武当山旅游门户网站()1.3软件工程发展简史(续)软件工程至今还在不断发展,无论是组件工程还是对象工程都在不断发展,即使是传统软件工程的一些基本概念、框架,也随着技术的进步在发生变化。总之,软件工程代与代之间并没有鸿沟,它们不仅交叉重叠,也携手并进。1.4软件工程7条基本原理原理1、用分阶段的生命周期计划严格管理在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作,这条基本原理意味着,应该把软件生命周期划分成若干阶段,并相应地制定出切实可行的计划,按照计划对软件的开发与维护工作进行控制。软件工程核心--7条基本原理原理2、坚持