1、1,计算机科学与技术学院 软件工程研究室 王宇颖 ,Software Engineering,2,授课对象, 计算机专业, 50学时 课程设计1周,高级语言程序设计、数据结构、数据库技术等等, 高级软件工程,3,计算机科学与软件工程,Computer Science,Customer,Theories,Computer Function,Problem,Software Engineering,Tools and Techniques toSolve Problem,4,初步了解工程?硬件工程?软件工程?计算机工程?,工程: 利用自然规律,创建一个使一部分人受益的系统.,5,计算机工程 Com
2、puter Engineering硬件工程 Hardware Engineering研究硬件生产和硬件管理的工程学科.计算机硬件及网络分析、制定设计方案、选型、配置、采购、验收、安装、调试、运行、交付、培训、维护,6,软件工程Software Engineering研究软件开发、生产和管理的工程学科 调研、可行性论证、正式立项、需求分析、项目策划、设计编程、测试、实施、试运行、产品发布、用户培训、产品复 制、销售、系统维护、版本升级采用科学的方法指导软件的开发与维护 !,初步了解,7,软件开发模型 软件开发过程,方法与技术 软件开发环境与工具 软件管理过程(度量、成本) 软件企业文化,现代软件
3、工程研究的内容:,软 件 开 发 既 是 一 门 科 学,又 是 一 门 工 程, 也 是 一 门 艺 术,8,导读,第1章绪论- 提出问题,第2章 模型- 全局观点,第3章 项目计划- 管理观点,第4、5章分析方法,需求分析 -开发第1步最重要,第6章 软件设计- 实现的前提,第7章 实现 -初始结果,第8章 测试 质量保证- 得到可交付的结果,第9章 维护 -延长软件生命期,第10章 面向对象技术,第11章 软件工程环境,9,软件工程,方法与技术,软件项目管理,软件过程系列,10,史济民等,软件工程-原理、方法与应用 (第二板),高等教育出板社ISBN 7-04-011561-1张海藩,软
4、件工程, 人民邮电出版社 2002年3月第一版 周之英,现代软件工程(上、中、下), 科学出版社 2001年4月第一版陈明,软件工程学教程,科学出版社 2002年3月第一版 郑人杰,软件工程, 清华大学出版社,中文参考书,11,英文参考书,Software Engineering Theory and Practice(Second Edition)Author: Shari Lawrence Pfleeger(软件工程理论与实践,高等教育出版社), Software Engineering A Practitioners Approach Author: Rogers.Pressman (软
5、件工程实践者的研究方法 机械工业出版社),12,基本要求,理解软件工程的思想和方法掌握软件开发方法和工具学会按照工程化的方法开发和维护软件了解国外软件工程发展的技术和趋势具有阅读软件工程方面资料的能力为实践及以后的软件开发打基础,13,听课 复习 阅读 讨论 练习,从知到会 实践,从会到通 知识方法能力,如何学习软件工程, 讲课教书 学习读书 知识课程,你们的收获不会仅仅局限 在本课程之内,课堂教学,复习,作业,参考资料,实践,渗 透,14,考试,课堂小考核,占成绩的 10% 完成一个小型软件系统的分析、设计文档,阶段性成果占成绩的20%个人学习心得占5% 考试成绩占 65%,财富可以通过辛勤
6、劳动获取,也可能由于喜中彩票大奖获得。 但知识却必须是通过一点一滴努力学习逐渐积累珍惜每一天,每一节课,每一分钟,诚信,15,学生体会 02级张熙,从他的历史发展中我明白了很多道理从他的前景中我感到了振奋和鼓舞感谢软件工程又给了我很多问题去思考,很多方法去实践更多的命题要在生活和实践中慢慢领悟,16,赞美“软件之美”后的话语 周洁0203105任何事物都有它美的一面,软件的美是博大精深的,有待我们去细细体味,而这种美又是由我们赋予的.,17,实践大作业,一、分析和设计下列问题之一,并写出文档. 1. 教学管理软件 2. 教学网站 3. 网上售书,网上购物 4. 超市管理 5. 食堂管理 6.
7、工寓管理 7. 自选,二、课程阶段性报告,三、个人学习体会.,18,第1章 软件工程的概述,基本内容: 1.1 软件1.2 软件工程的概念1.3 软件工程的作用1.4 软件工程的发展1.5 软件工程学科要解决的问题及主要技术1.6 软件工程三要素1.7 软件工程的目标1.8 软件工程的原则1.9 软件工程与信息工程,19,1.1 软件,(1) 软件的定义:20世纪五十年代 软件=程序面向过程的程序 =算法+数据结构,20世纪六十年代 软件=程序+文档,20世纪七十年代 软件=程序+文档+数据面向对象的程序=对象+消息面向构件的程序=构件+构架,20,软件的特征:软件是一个信息变换器;软件是产品
8、交付使用的载体;软件是是被开发或设计的,而不是被制造的;软件不会磨损,但维护困难。,21,软件的应用* 系统软件* 应用软件* 商业软件* 工程和科学计算软件* 嵌入式软件* 个人计算机软件* 人工智能软件* 基于web软件* 工具包软件,22,1.2 软件工程,P.Wegner和B.Boehm认为:科学知识在设计和构造计算机程 序,以及开发、运作和维护这些程序所需求的有关文档编制中的实际应用。,F.L.Bauer认为:为了经济地获得软件,这个软件是可靠的并且能在实在的计算机上工作,所需要的 健全的工作原理(方法)的确立和使用。,23,IEEE(83) 指出:软件工程是开发、运行、维护和修复软
9、件的系统方法。IEEE(93) 指出:软件工程是将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化的方法应用于软件开发中。,24,1.3 软件工程的作用,软件开发失败的例子1962年6月,美国飞向金星的第1个空间探测器(水手1号)飞行中偏移了航线,失败了.原因:飞舱中的导航程序中的一个语句的语义错.世界上精心设计的并花费巨额投资的美国阿波罗8号太空飞船登月飞行计划的软件的错误,使存储器一部分信息丢失;阿波罗14号的飞行10天中,出现18个软件错误.原因: 软件的可靠性问题,25,19631966年IBM开发OS/360操作系统,投资几千万美元,工作量5000多人年,
10、拖延几年才交付使用,而且每年要发现近100个错误。 美国肯尼迪发射的一枚“阿脱拉斯火箭,当飞地面几十英里高空时,翻转.地面控制中心被迫下令炸毁,结果损失1850万美元原因:飞行计划程序漏掉一个“连”接字符,26,通过比较,支持“美国航天飞机”的软件由3百万行代码组成,包括地面控制发射和飞行的计算机,航天飞机本身就需10万行代码。这样一个反导弹软件系统需要测试大量的代码.此外可靠性约束是不可能测试的。,许多软件工程师认为一个“反弹道导弹系统” 只少需要1千万行代码,有人估计代码在1亿行左右。,27,“安全临界”软件问题:安全临界是指其可靠性至少达到10-9,也就说在工作109小时内不能出现错误。
11、为了观察可靠性程度,就必须使系统至少运行109小时不会失败。 但验证109小时不出错,需要测试114,000年,这实际上是不可能的。这是一种无法实现的计划。,28,由上可看出:软件需求量不断增大,复杂度越来越高,软件可靠性无保障软件维护费用不断上升软件进度无法预测成本增长无法控制程序人员无限度地增加各个方面.上述原因导致了60年代末的“软件危机.,29,一系列软件开发的失败引起人们的思考, 1968年北大西洋公约组织(NATO)的计算机科学家在联邦德国的幕尼黑召开的一次计算机软件国际会议上,对软件开发的方法、 技术进行了广泛的讨论,首次提出了“软件工程”的概念。,30,作用:解决60年代出现的
12、软件危机解决软件当前面临的问题软件可靠性、重用性、维护性,生产率告诉人们怎样去开发软件、管理软件现代软件开发对人才的要求系统分析人员、设计人员、软件架构师、软件集成人员、高层管理人员、中层项目经理、软件蓝领工人、实施和维护人员、软件售前人员、软件营销人员 提高软件产品的质量,降低软件开发的成本.,31,1.4 软件工程的发展,传统的软件工程时代过程软件工程时代对象软件工程时代构件软件工程时代发展方向:流水线装配软件工程的方向发展(流水线生产,网络化,服务化,全球化),32,为屏蔽计算机硬件的异构性,发展了操作系统,C/C+ 语言,Java 语言,为屏蔽操作系统和编程语言的异构性,发展了支撑软件
13、和中间件,Fortran 语言,为了祢补应用软件与现实计算环境之间的距离,网 络 层,综观 软件技术 的发展,图 1-2,应用系统,操作系统,支撑软件中间件,33,1)20世纪60年代末至80年代初,围绕软件项目,开展了有关: 软件开发风范 开发方法 支持工具的研究。,20世纪 60年代末 80年代初 20世纪末 主要特点 强调技术 关注管理 “螺旋反复”,发展阶段,34,2) 20世纪80年代以来,随着软件系统规模的增大、复杂性的提高以及在关键领域应用的开展,人们更加关注: 软件生产技术的研究和实践 注重软件工程管理。主要成果包括:(1)计算机辅助软件工程(CASE)(2)软件复用:如构件模
14、型、复用机制等(3)软件过程概念以及能力成熟度模型(CMM),35,应用系统,概念不同,逻辑不同。 解决问题的思维方法 不同。 -“距离”,中间件技术与产品,面向领域的软 件体系结构,应用框架,领域软件生产线,系统建模,语 言,网络 异构,VB、VC -程序设计环境,运行平台,开发平台,1.5 软件工程学科所要解决的问题及主要技术,图 1-3,36,由软件工程以及相关技术的发展,可以看出:软件开发的本质可概括为:第一点:问题空间的概念 与解空间的模型化概念 之间的映射 例如:对象=G(张山)为了建立问题模型对应的过程:需求分析使用的技术:面向对象使用的原理:数据抽象实现:问题空间概念 到 解空
15、间概念 的映射,37,第二点: 问题空间的处理逻辑 与解空间处理逻辑 之间的映射例如, 加工1(及相关的数据流)=F(计算学生成绩)为了建立问题模型对应的过程:需求分析使用的方法:结构化方法,面向对象使用的原理:过程抽象,行为结构抽象,加工1 计算学生平均成绩,科目+年级/班,学生成绩文件,学生平均成绩,规约后的处理逻辑,38,为了实现以上两个映射,就软件开发而言,需要解决两个方面的问题:1:管理2:技术进一步说,技术问题主要是指软件开发过程通常需要遵循的途径和方向其中,过程方向确定用于创建问题模型和设计解的特定的抽象层次例如,需求、设计、实现、部署等,39,问题空间,需求-一个抽象层,设计-
16、一个抽象层,实现-一个抽象层,部署-一个抽象层,特定的notation,特定的notation,特定的notation,特定的notation,验 证/ 确 认,它们体现了我们所说的一些软件设计原理,过程途径实现不同抽象层次的映射,图 1-4 实现不同抽象层次的映射,40,其中 (1)需求分析 是在一个抽象层上建立系统模型的活动。产生需求规约,作为开发人员和客户间契约的基础,并作为以后开发阶段的输入。 (2)设计 定义了实现需求规约所需的结构。包括软件体系结构(数据和程序结构),以及详细的处理算法,即所谓设计规约,给出了实现软件需求的软件解决方案。,41,(3)实现 是由设计规约到代码的转换。
17、其中选择可用的构件;或以一种选定的语言,对每一构件进行编码。 (4)验证/确认是一评估活动. 确定一个阶段的产品是否达到前阶段确立的需求的过程。(verification) 通过评价,确认开发的软件与需求是否一致的过程。(veridation),42,典型的途径有:结构化方法面向数据结构方法面向对象方法以及维也纳开发方法(VDM)等注:主要讲解结构化方法和面向对象方法。,43,由上可见,不论是工程管理,还是工程技术,它们都是“作用”在“干活”上,即软件开发过程。因此,首先:应该了解软件开发需要干哪些“活”即对“开发”两字做一解析其次:再了解和掌握如何干活,即有关开发模型和开发方法等技术问题如何
18、管理,即有关CMM等管理问题,44,1.6 软件工程三个要素:,图 1-5 软件工程三个要素,45,1.7 软件工程的目标低成本满足功能满足性能易于移植维护费用低及时交付使用简而言之,提高软件质量,降低软件开发和维护成本,46,1.8 软件工程原则B.W.Boehm(1983):(1) 用分阶段的生存周期计划严格管理软件开发(2) 进行阶段评审(3) 实行产品版本控制(4) 采用现代程序设计技术(5) 结果应能清楚的审查(6) 开发小组成员应少而精(7) 承认不断改进软件工程实践的必要性,47,二八定律,对软件项目进度和工作量的估计:认为完成80%的工作量,实际上只完成了20%.对程序中存在问
19、题的估计:80%的问题存在于20%的程序中.对模块功能的估计:20%的模块实现了80%的功能.对人力资源的估计:20%的人解决了软件中80%的问题.对投入资金的估计:企业信息系统中,80% 的问题可以用20%的资金耒解决.,48,1.9 软件工程与信息系统工程,信息系统是应用软件的一个分支是软件工程的一部分 (1)信息系统: 利用计算机网络技术、数字通信技术与数据库技术实现信息采集和处理的系统。 (2)信息的标准化:是信息的代码化和规范化。,49,(3) 信息系统7层结构: 用户层业务层功能层数据层 工具层OS 层物理层,分 析 过 程,实 现 过 程,50,本章小结,希望认真学习 主动获取知识,软件工程 三要素,方法,过程,工具,51,习题,1 简述软件工程的发展过程。2 软件的定义?3 什么叫软件危机?软件危机主要有哪几种表现?4 软件工程要解决的问题及技术是什么6 软件工程的目标是什么?都有哪些原则?,