750 likes | 1.06k Views
软件工程. 主讲: 饶国政. 天 津 大 学. 天津大学 25 教学楼 B-607 邮箱: rgz@tju.edu.cn 课件及相关资源: http://202.113.2.12/faculty/rgz/new/se/. 联系方式. 计算机科学是什么? 1 、是科学?是工程学科?还是一门技术? …… . 2 、学科的智力本质是什么? 3 、它将持续兴旺下去还是衰落下去? 4 、 计算机科学和工程的核心课程是否反映了这个领域? 5 、 怎样把理论和实验集成在计算课程中? 6 、 各核心课程培养计算方面的能力吗? 7 、. 绪论. 计算机科学的三个学科形态.
E N D
软件工程 主讲:饶国政 天 津 大 学
天津大学25教学楼B-607 邮箱:rgz@tju.edu.cn 课件及相关资源: http://202.113.2.12/faculty/rgz/new/se/ 联系方式
计算机科学是什么?1、是科学?是工程学科?还是一门技术?……. 2、学科的智力本质是什么?3、它将持续兴旺下去还是衰落下去?4、 计算机科学和工程的核心课程是否反映了这个领域? 5、 怎样把理论和实验集成在计算课程中?6、 各核心课程培养计算方面的能力吗?7、 ...... 绪论
计算处于应用数学、科学和工程三者的主要过程的交叉路口。计算处于应用数学、科学和工程三者的主要过程的交叉路口。 这三个过程在本学科是同等重要和基本的。 它是理论、抽象和设计三者唯一的交汇点。 争论的结论
(1) "计算科学 = 程序设计"是错误的。 (2) 计算领域的许多活动并不是程序设计,硬件设计、体系结构、操作系统结构、数据库应用等。 (3) 程序设计是本学科标准的实践活动的一部分,每一个计算工作者必须有程序设计的能力。但这并不意味着本学科就建筑在程序设计的基础上,也不意味着导引性课程必须是程序设计方面的课程。 (4) 程序设计语言是涉足本领域特色的工具。建议:程序设计作为核心课程的一部分,并把程序设计语言作为涉足计算学科重要特色的有用媒介。 程序设计的作用
(1) 计算学科是对描述和变换信息的算法过程的系统研究,包括它的理论、分析、设计、有效性、实现和应用。 (2) 全部计算科学的基本问题是"什么能(有效地)自动进行?"。 计算机科学简短定义
(1) 面向学科的思维能力发现本领域新的特性的能力,这些特性导致新的活动方式和新的工具,以便这些特性能被其他人所利用。(2) 使用工具的能力使用本领域的工具有效地进行其他领域时间活动的能力。 建议:把面向学科的思维能力作为计算专业课程设置的主要目的。同时,计算专业工作者必须充分熟悉工具,以便与其他学科的人们有效地合作,进行那些学科的设计活动。 计算科学的学科能力的培养
(1) 本学科和算法理论、数理逻辑和存储程序式电子计算机的发明一起,形成于40年代初。(2) 计算的渊源可以深入扩展到数学和工程。数学把分析分到这一领域,而工程把设计分到这一领域。(3) 本学科包括它自己的理论、实验方法和工程。这与许多其他的自然科学不同。许多其他的自然科学和运用其成果的工程学科是分开的(例如化学和化学工程原理)、计算机科学与工程却是不可分的,因为本学科的科学与工程形态从根本上是相互渗透的。 学科渊源
计算作为数学的主要对象已有几千年了。 自然现象的许多模型被用来导出方程,它的解就导致那些自然现象的预言。例如轨道的弹道计算、天气预报和流体的流动等。解这些方程的许多方法已经给出。例如线性方程组的解法、微分方程的解法和求函数的积分。 几乎在这同时,机械系统设计中所需要的计算成为工程主要关注的对象。例如计算静态物体压力的算法、计算运动物体惯量的算法和测量比我们直觉要大得多或小得多的距离的方法。 与数学的关系
本领域研究满足技术要求、安全、可靠、可信的程序和大型软件系统的设计。基本问题包括:1.在程序和程序设计系统的开发背后的原理是什么?2.怎样去证明程序或系统满足它的技术要求?3.怎样去给定技术要求,使不遗漏重要的情况,而且可以分析它的安全性?4.怎样使软件系统通过不同阶段不断改进?5.怎样使软件设计得易理解和易修改?本领域研究满足技术要求、安全、可靠、可信的程序和大型软件系统的设计。基本问题包括:1.在程序和程序设计系统的开发背后的原理是什么?2.怎样去证明程序或系统满足它的技术要求?3.怎样去给定技术要求,使不遗漏重要的情况,而且可以分析它的安全性?4.怎样使软件系统通过不同阶段不断改进?5.怎样使软件设计得易理解和易修改? 软件方法学和工程-基本问题
软件方法学和工具练域理论的主要部分是:(l) 程序验证和证明。(2) 时态逻辑。(3) 可靠性理论。(4) 谓词演算、公理语义学、和认知心理学等支撑领域。 软件方法学和工程 –理论
软件方法学和工具抽象的主要部分是:(1) 定义技术要求的方法。如调词变换器、程序设计演算、抽象数据类型和弗洛依德一霍尔(Floyd-Hoare) 公理化符号。(2) 方法学,如逐步提炼、模块化设计、模块、分离编译、信息隐藏(information biding) 、数据流和抽象层次。(3) 程序开发自动化的方法。例如,文本编辑程序,面向语法的编辑程序和屏幕编辑程序。(4) 可信计算的方法学;例如,容错,安全性,可靠性,恢复,N版本程序设计,多方式冗余,和检查点插入。(5) 软件工具和程序设计环境。(6) 程序和系统的测度和评估。(7) 软件系统到特定机器结构的匹配问题域。(8) 软件研制的生命周期模型。 软件方法学和工程 -抽象
软件方法学和工具领域设计和实验的主要内容是:(1) 技术要求描述语言(如PSL 2,IMA JO) 、构造管理系统(如在Ada APSE) 和修改控制系统(如 RCS,SCCS) 。(2) 指向语法的编辑器、行编辑器、屏幕编辑器和字处理系统。(3) 在软件开发实践中倡导和使用的特定方法,如HDM,及Dijkstra,Jackson,Mills或Yourdon等人倡导的方法。(4) 测试的过程和实践(例如,遍历、手模拟、模块间接口的检查、测试集的程序通路列举和事件跟踪) ,质量保证和计划管理。(5) 程序开发和查错,剖面分析,文本格式化和数据库操作的软件工具。(6) 像国防部那样的安全计算系统的标准级和验证过程的技术要求。(7) 用户接口的设计。(8) 设计非常大的、可靠的、容错的和可信的系统的方法。 软件方法学和工程 –设计
学习“软件工程”的目的和意义 学会如何在现代IT企业的环境中做一个成功者; 学会如何做世界级的、高质量的研究; 学会如何创建大规模的软件产品。 —— 微软全球资深副总裁 原微软亚洲研究院院长 首席科学家 张亚勤
一、全球软件产业的现状、趋势与挑战 The Challenges and Opportunities of the Global Software Industry. 智能网络 (Intelligent Web) ·从静态网到动态网 ·从被动方式到主动方式 ·从呈现信息和浏览的窗口到智能生成的平台 ·从HTML到XML • 软件产业的网络化趋势 • 软件产业的服务化趋势 • 软件产业的全球化趋势
一、全球软件产业的现状、趋势与挑战 The Challenges and Opportunities of the Global Software Industry. • 软件产业的网络化趋势 • 软件产业的服务化趋势 • 软件产业的全球化趋势 相对目前“打包式”软件,为用户提供智能化的“服务式”软件。
一、全球软件产业的现状、趋势与挑战 The Challenges and Opportunities of the Global Software Industry. • 软件产业的网络化趋势 • 软件产业的服务化趋势 • 软件产业的全球化趋势 ·强调开放性、交互性 ·支持主流的开放式标准 ·人才的全球化 对中国软件企业有什么启示和挑战?
扎实的基础 创新、独立的工作能力 主人翁精神和团队精神 勾通与协调能力 成就感强、有激情 自觉地干好工作 契而不舍,从错误中学习 二、现代软件开发对人才的要求 Talent Beyond Technology _What Kind of Talent We Need for Modern Software Development
三、信息化建设中对复合型软件人才的需求 我国复合型软件人才匮乏,培养适应迅速变化的市场需求的复合型软件人才已是迫在眉睫。 复合型软件人才—具备不同专业背景、有市场观念的开发管理、工程管理和软件经营等复合型软件人才;
四、软件开发中的错误观点 1.只要掌握了1-2门程序设计语言,进行软件开发就没有问题。 2.软件需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。 3. 只要有最好的开发工具、最好的计算机,一定能做出优秀的软件。 总之,错误认为:软件就是程序,开发软件就是编写程序。
本课程学习的主要内容 1. 传统的软件工程方法 2. 面向对象的建模技术—UML统一建模语言 3. 软件项目管理及CMMI 4. 软件复用及构件工程 本课程以传统的软件工程技术为基础,主要讨论如何应用软件工程的最新技术 — UML统一建模语言进行软件开发,提高软件开发的水平和技术。
教材及主要参考书 1.软件工程(第2版) 作者:齐治昌、宁洪 出版社:高等教育出版社 ISBN:9787040146288 面向21世纪课程教材、国家精品课程配套教材
教材及主要参考书 2.软件工程—方法与实践 作者:许家珆 主编 白忠建,彭德中,吴磊编写 出版社:电子工业出版社
教材及主要参考书 3.软件工程 Software Engineering, 6th Edition 作者:(英)Ian Sommerville 出版社:机械工业出版社(影印版) 本书是英国著名软件工程学家 Ian Sommerville 系统介绍软件工程理论的力作,以要求极高的一类系统为实例,精辟透彻地阐述了软件工程的内涵。
参考网站 • http://www.mrcase.net软件工程网 • www.sei.cmu.edu卡内基梅大学软件工程研究所 • http://www.cetus-links.org/对象技术和构件技术链接 • www.rational.com Rational公司 • http://www.omg.org OMG(Object Management Group) • http://www.mrcase.net软件工程网 • www.sei.cmu.edu卡内基梅大学软件工程研究所 • http://www.cetus-links.org/对象技术和构件技术链接 • www.rational.com Rational公司
1 第一章 软件与软件工程
软件的概念; 软件的特点; 软件的分类; 软件的发展; 软件危机。 1.1 软件
软件是计算机系统的重要组成部分; 软件是逻辑产品,需要计算机硬件和系统软件的支撑; 软件是计算机控制系统的指挥中枢; 软件是信息转换器,它能对信息进行加工、处理或变换; 软件是工具,在人们的生活、工作、休闲,在社会的经济、军事、政治、文化、科学技术、教育中发挥具大作用; 软件的概念
计算机世界的软件 软件是能够完成预定功能和性能,并对相应数据进行加工的程序和描述程序及其操作的文档。 软件 = 程序+数据+文档 程序 = 算法+数据结构
软件是被开发或设计的,而不是传统意义上被制造的软件是被开发或设计的,而不是传统意义上被制造的 软件不会”磨损” 软件产业逐步走向基于构件的组装,但还是定制的 软件的特点
软件由程序、数据、文档 组成。 数据 用程序设计语言要求的数据结构表示 文档 规范 准确 清晰 简洁 无歧义 自然语言 结构化英语 图表 软件的描述
程序设计语言 面向机器 汇编语言、机器语言等 面向过程 Fortran, Pascal, C等 面向对象 C++, Java等 面向问题 结构化查询语言SQL等
系统软件 实时软件 商务软件 工程和科学计算软件 嵌入式软件 人工智能软件 个人计算机软件 软件分类
软件发展的四个阶段 1950---1965 没有系统的软件开发方法和管理机制、自定义软件、批处理、有限分布。 1965---1975 产生人机交互的新概念、新技术软件产品、多用户、实时、数据库。 1973---1988 微处理器的出现并广泛应用 分布式系统、嵌入智能、低成本硬件、消费者的影响。 1986---2000 广域和局域网络迅速普及 强大的桌面系统、面向对象技术、专家系统、人工智能、神经网络、并行计算、网络计算机。 软件的发展
软件开发能力不能满足人们的需要。 社会对软件的依赖程度加大,人们普遍关注软件的安全和可靠性 建造高可靠性、高质量软件的任务任重道远。 若干年前开发的应用软件经过几十次修改已无人认识它的内部结构,己经不可维护。 由于经济原因,嵌入式系统存在许多怪现象,企业不愿意投入资源再生产,而采取打补丁+时髦界面的方法。 2软件发展存在的问题
软件危机 • 软件危机的表现 软件产业的发展长期滞后,与硬件发展不协调。 • 软件开发成本过高 • 软件质量得不到保证 • 软件开发效率低 • 难以控制开发进度,工作量估计困难 软件不能满足社会发展的需求,成为社会、经济发展的制约因素
软件的规模加大、复杂性提高、性能增强 软件是逻辑产品, 尚未完全认识其本质和特点 缺乏有效的、系统的开发、维护大型软件项目的技术手段和管理方法 用户对软件需求的描述和软件开发人员对需求的理解往往存在差异,用户经常要求修改需求,开发人员很难适应 软件开发的技术人员和管理人员缺乏软件工程化的素质和要求,对工程化的开销认识不足 2. 软件危机原因
1.2 软件工程的产生和发展 软件工程(Software Engineering)是在克服60年代末所出现的“软件危机”的过程中逐渐形成与发展的。 随着互联网平台和环境的迅速发展,对软件工程的发展产生了变革性的巨大影响,网格计算、普适计算、中间件、网构软件等一批新技术和理念,从网络资源共享与管理,人机交互及软件服务等各方面提出了软件技术的新课题。
软件工程的发展已经历了四个重要阶段: 1.第一代软件工程—传统的软件工程 2.第二代软件工程—对象工程 3.第三代软件工程—过程工程 4.第四代软件工程—构件工程
软件工程的发展已经历了四个重要阶段: 1.第一代软件工程—传统的软件工程 2.第二代软件工程—对象工程 3.第三代软件工程—过程工程 4.第四代软件工程—构件工程 60年代末到70年代为了克服“软件危机”(Software crisis)提出“软件工程”的名词, 将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。
软件工程的发展已经历了四个重要阶段: 1、第一代软件工程—传统的软件工程 2、第二代软件工程—对象工程 3、第三代软件工程—过程工程 4、第四代软件工程—构件工程 80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。
80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。 软件工程的发展已经历了四个重要阶段: 1、第一代软件工程—传统的软件工程 2、第二代软件工程—对象工程 3、第三代软件工程—过程工程 4、第四代软件工程—构件工程
90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。 软件工程的发展已经历了四个重要阶段: 1、第一代软件工程—传统的软件工程 2、第二代软件工程—对象工程 3、第三代软件工程—过程工程 4、第四代软件工程—构件工程
软件开发方法、技术 软件开发工具及环境 软件管理技术 软件规范(国际规范) 软件工程是一门新兴的边缘学科,涉及的学科多,研究的范围广,研究的主要内容有以下几方面: }软件开发技术 }软件管理技术
1.3 软件工程过程与软件生存期 为了克服软件危机,人们从其他产业的工业化生产得到启示,于是在68年北大西洋公约的软件可靠性会议(NATO)上,首次提出了“软件工程”的概念。提出了在软件生产中采用工程化的方法,采用一系列科学的、现代化的方法技术来开发软件。这种工程化的思想贯穿到软件开发和维护的全过程。
软件工程过程(Software engineering process) 是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。 通常包括以下四类基本过程: 1、软件规格说明:规定软件的功能及其运行环境。 2、软件开发:产生满足规格说明的软件。 3、软件确认:确认软件能够完成客户提出的要求。 4、软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。