900 likes | 1.15k Views
软件工程. 主 讲 : 蔡 勇 Emai l : jkx_cy@163.com 课件下载 : ftp://10.1.58.61 用户名 :student-cy 教 材:软件工程导论(第五版) 清华大学出版社 作 者:张海藩. 课程概述. 一、软件工程学科介绍 二、学习目标 三、部分参考资料 四、课程特点和学习的注意事项 五、教材简介 六、课程考核方式. 一、软件工程学科介绍. 软件程学科发展历史 三个阶段:概念提出、学科雏形、学科确立 第一阶段:概念提出
E N D
软件工程 主 讲: 蔡 勇 Emai l : jkx_cy@163.com 课件下载:ftp://10.1.58.61用户名:student-cy 教 材:软件工程导论(第五版) 清华大学出版社 作 者:张海藩
课程概述 • 一、软件工程学科介绍 • 二、学习目标 • 三、部分参考资料 • 四、课程特点和学习的注意事项 • 五、教材简介 • 六、课程考核方式
一、软件工程学科介绍 • 软件程学科发展历史 • 三个阶段:概念提出、学科雏形、学科确立 • 第一阶段:概念提出 • 1968 年 NATO 会议(北大西洋公约组织的计算机科学家的国际会议)提出“软件工程”概念。 • 当时对“软件工程”代表性定义:为了经济地获得在真实机器上可靠工作的软件而制定和使用的合理工程原则和方法。 • 1972 年 IEEE 学会的计算机分会 IEEE 一 CS 第一次出版了“软件工程学报”
第二阶段:学科雏形 • 上世纪 70 年代末,美国将软件工程教程列入研究生教育计划。 • 1980 年代末和 1990 年代初,软件工程教育得到卡内基一梅隆大学软件工程研究所( CMU / SEI )的支持。 • 1991 年,“软件工程”被 ACM (美国计算机协会)和 IEEE / CS 列为计算学科的九个知识领域之一。 • 1993 年, IEEE 一 CS 和ACM 为了把软件工程建设成为一个专业,建立了 IEEE 一 CS / ACM 联合指导委员会。
第三阶段:学科确立 • 2004 年 8 月,IEEE 一 CS 和 ACM 给出: • 软件工程知识体( SWEBOK , Software Engineering Body of Knowledge ) • 软件工程教育知识体( SEEK ) 最终版,标志着软件工程学科在世界范围正式确 立。 • 软件工程、计算机科学、计算机工程、信息系统、信息技术并列成为计算学科下的独立学科。 • 软件工程知识体( SWEBOK ) :全面描述了软件工程实践所需的知识。
SWEBOK (软件工程知识体 》 10 个领域 • 软件需求 • 软件设计 • 软件构造 • 软件测试 • 软件维护 • 软件配置管理 • 软件工程管理 • 软件工程过程 • 软件工程工具和方法 • 软件质量 参考资料: [1 ]白征. SWEBOK :软件工程知识体,计 算机科学, 2001 年 07 期 [ 2 万江平.软件工程知识体系指南综述, 计算机应用研究, 2006 年 10 期
软件工程与其他学科的关系 • 1 、软件工程是计算学科 9 个领域之一. • 算法和数据结构 • 计算机系统结构 • 人工智能和机器人学 • 数据库和信息检索 • 人一机交互 • 操作系统 • 程序设计语言 • 软件方法学和软件工程 • 数字和符号计算
绑定. 概念和形式模型 效率 抽象层次 按时间排序 安全性 大问题的复杂性 一致性和完备性 演化 按空间排序 重用 折衷与决策 计算学科中12个重复出现的基本概念 • 软件工程是计算学科的分支,这 12 个概念同样将贯穿软件工程学科,是学科的精髓。
2 、 8 个相关学科知识域 • 计算机工程 • 计算机科学 • 数学 • 管理学 • 项目管理 • 质量管理 • 系统工程学 • 软件人类工程学 • 其中:计算机科学、数学是基础工程学科、管理学科也非常重要
软件程是一门什么样的学科? • 是指导计算机软件开发与维护的一门工程学科。 • 工程:将科学及数学原理运用于实际用途的应用手段,如:设计、制造、机器操纵、构架等。 • 典型的传统工程:建筑工程、机械工程、电力工程等。 • 概括的说,软件工程即用工程、科学和数学的原则和方法研制、维护计算机软件的有关技术及方法,其优点是以较小的代价开发高质量的软件并有效地维护它。
二、学习目标(1) • 掌握软件工程的基础知识和理论,对软件工程学有一个全貌的了解; • 熟悉软件项目开发和维护的一般过程; • 熟练掌握软件需求分析、设计、编码和测试等阶段的主要思想和技术方法;
二、学习目标(2) • 通过学习,特别是通过课程设计,真正运用和深刻体会软件工程的思想方法,转变对软件开发的认识:从个人的单纯编程活动转移到进行系统分析与设计方面上来 • 转变思维定式: • 程序员 ― 系统工程师(系统分析员)
三、部分参考资料 • 《 软件工程理论与实践 》许家冶等编著,高等教育出版社, 2005 年 • 《 软件工程 》 (第二版),齐治昌等,高等教育出版社, 2004 年 • 《 面向对象的系统分析 》 ,杨芙清等编著,清华大学出版社, 2001 年 • 《 UML 用户指南 》 G Booch 等著,邵维忠等译,机械工业出版社 2002 年
四、课程特点和学习的注肯事项 • 1 、知易行难 • 要将理论知识与实践运用结合,进行对照,以加深理解和掌握。 • 2 、内容纷杂 • 软件工程涉及计算机科学、数学、工程科学和管理科学等多个领域。其中: • 计算机科学和数学用于构造模型与算法; • 工程科学用于制定规范、设计范型、评估成本及确定权衡 • 管理科学用于计划、资源、质量和成本的管理。
第 1 章软件工程学概述 第 2 章可行性研究 第 3 章需求分析 第 4 章形式化说明技术 第 5 章总体设计 第 6 章详细设计 第 7 章实现 第 8 章维护 第9 章面向对象方法学引论 第 10 章面向对象分析 第 11 章面向对象设计 第 12 章面向对象实现 第 13 章软件项目管理 附录 AC + +类库管理系统分析与设计 附录 B 汉字行编辑程序设计 五、教材总目录
章节 课程内容 学时 l 软件工程学概述 4 2可行性研究 4 3 需求分析 4 5 总体设计 6 6 详细设计 4 7 实现 8 章节 课程内容 学时 8 软件维护 2 9 面向对象方法学引论 4 10 面向对象分析 2 11 面向对象设计 2 12面向对象实现 2 13 软件项目管理 6 14 总结 2 课程内容学时安排 注: 2 、 3 章内容关联较大,讲授时不拘于课本中章节的安排和划分;第 9 、 10 章也同样。
六、课程考核方式 • 分数组成: • 平时成绩( 10 % ) :以理论课课堂表现为主。 • 作业( 30 % ) :书面作业 • 期末考试(60 % ) :
课程设计分组要求 • 3- 5 人一组,自由组合,选出组长。 • 以小组为单位共同完成“课程实践”和“课程设计”。 • 课程设计内容、记分方式另外通知. • 本周(第 1 周)星期五之前请各班课代表或者学习委员给出分组的详细名单。(电子版和纸张文档)
第 1 章 软件工程学概述 • 1 . 1 软件危机 • 1 . 2 软件工程 • 1 . 3 软件生命周期 • 1 . 4 软件过程 • 1 . 5 小结 • 习题
学习重点 • 1、软件危机、软件工程产生的原因 • 2、软件工程过程和软件生命周期 • 3、软件生命周期模型 • 掌握几个基本概念 • 软件危机 • 软件工程 • 软件过程 • 软件生命周期 • 软件生命周期模型
软件危机与软件工程学 • 软件工程学的产生要从“软件危机”说起 • 1968 年,第一届 NAT0 (北大西洋公约组织的计算机科学家的国际会议)会议,“软件工程”的慨念作为一种有效解决“软件危机”的途径被正式提出。 • 什么是软件危机? • 软件危机有什么典型表现? • 为什么会产生软件危机? • 怎么解决软件危机?
§1 软件危机 • § 1 . 1 . 1 软件危机介绍 • 什么是软件危机? • 软件危机指在计算机软件的开发和维护过程中,所遇到的一系列严重问题。 • 软件危机主要包括的问题(两方面) : • ① 如何开发软件 • ② 如何维护软件
软件危机有什么典型表现?(1) • 开发费用和进度难以估算和控制,大大超过预期的资金和规定日期; • 软件需求分析不够充分,用户不满意“已经完成”的软件系统。 • 软件质量难于保证; • 软件维护困难; • 难以改正程序中的错误; • 难以根据用户的需要在原有程序中增加一些新的功能。
软件危机有什么典型表现? • 通常没有保留适当的文档资料。 • 文档的作用: • 软件开发管理人员:用于管理和评价软件开发工程的进展状况 • 软件开发人员:用于开发人员对各个阶段的工作都进行周密思考、全盘权衡、从而减少返工。并且可在开发早期发现错误和不一致性,便于及时加以纠正 • 软件维护人员:软件维护的依据 • 开发成本逐年上升,软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
几个软件危机的著名案例 • ① 1966年,IBM 360 机的操作系统。花费 5000 人一年的工作量,写了近 1 万行代码。错误百出,每次的新版本就是从前一版本中找 1 000个程序错误而修正的结果。 • ② 1963 年,美国用于控制火星探测器的计算机软件中的一个 “, ”号被误写为“.”,而致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。 • ③ 美国丹佛新国际机场自动化行李系统软件。投资 1. 93 亿美元,计划 1993 年万圣节启用。但开发人员一直为系统错误困扰,屡次推后启用时间,直到 1994 年 6 月,机场计划者承认无法预测何时能启用。 • ④ 1996 年,欧洲阿里亚纳 5 型运载火箭坠毁,造成 5 亿美元损失。原因是控制软件中的一个错误。
§1 . 1 . 2 产生软件危机的原因 • 主要两个原因: • 1 、与软件本身的特点有关 • 2 、与软件开发与维护的方法不正确有关。
一 、软件本身的特点 ( 1) • 软件与硬件、一般程序存在很多不同之处。 • 1 、软件与硬件不同 • 抽象性。软件生产没有明显的制造过程,难以衡量开发进展,也难以控制软件质量。 • 问题的隐蔽性。没有硬件的磨损、老化问题,但存在开发早期在分析、设计阶段的错误,修改难度较大。
2 、软件与一般程序不同(1) • ① 软件远比一般程序规模庞大,复杂性高 • 软件所反映的实际问题的复杂性 • 程序逻辑结构的复杂性。 • 例 1 : Windows95 , 1000 万行代码; • Windows2000, 5000 万行代码 • 例 2 : Exchange 2000 和 windows 2000 开发人员
软件的规模 • 软件产品的特殊性和人类智力的局限性,导致人们无力处理“复杂问题”。
2 、软件与一般程序不同( 2 ) • ② 大型软件开发既有技术问题,还有社会问题。 • 社会因素:组织机构、体制、管理方式、观念、人的心理素等。 • 开发团队成员分工合作 • 技术与管理的矛盾 • 软件开发人员对软件应用的领域知识的了解
二、软件开发维护方法中存在的问题(1) • ① 对用户需求的获取不正确 • 用户的原因 • 分析人员的原因 对分析人员的要求:沟通能力、归纳总结能力、经验 • 越是早期产生的错误,付出的代价越大。 • 图:不同时期引入同一变 动 的代价
二、软件开发维护方法中存在的问题( 2 ) • ② 软件开发就是编写程序。 • 一个完整的软件产品由一整套完整的配置组成,程序只是其中的一个组成部分。 • 软件开发过程包括多个阶段,每个阶段的产品都是最终的完整的软件产品的一部分。 • ③ 软件开发只要依靠个别编程高手就能完成。 • ④ 轻视软件维护 • 软件维护约占软件费用 55 一 75 % ,包括修改软件运行的错误;对软件进行改进和功能扩充。
三、其他产生软件危机的原因 • ①软件开发尚未完全摆脱手工艺的开发方式。 • ② 软件成本相当昂贵,主要依靠大量复杂的、高强度的脑力劳动 • ③ 软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。 • 软件的“可移植性”就是指的软件对硬件的依赖程度。好的可移植性依赖少。
§1 . 1 . 3 消除软件危机的途径 • 1 、彻底消除“软件就是程序”的错误观念。 • 2 、充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目,不是个人独立的劳动。 • 3 、推广和使用在实践中总结出来的软件开发的成功技术和方法。 • 4 、开发和使用更好的软件工具
总结:“软件工程”的方法理论是摆脱软件危机的一个主要出路。总结:“软件工程”的方法理论是摆脱软件危机的一个主要出路。 • 计算机和软件科学家为解决软件危机问题,尝试将在其它领域中行之有效的工程学知识运用到软件开发工作中来,经过不断实践和总结,最后得出一个结论;按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。
思考题( 1 ) • 1 )只要是编程高手,即使是不懂软件工程,也能编出很好的软件。 • 软件是服务于大众,却是由个性化的开发人员完成的。如果个性化太强,程序就无法阅读,其他人员也就无法维护。 • 例:国内 80 年代涌现出来的众多汉字操作系统均是由编程高手完成的。
思考题( 2 ) • 2 )只要拥有一套讲述如何开发软件的书籍,并了解了书中的标准与示例,就可以解决软件开发中遇到的任何问题。 • 软件是用来解决现实问题的,现实问题的特殊性对规范提出了挑战(要进行适应)。 • 软件技术是发展的,没有祖传秘方。 • 就像拥有食谱并不能成为名厨一样,软件开发需要实践。
思考题( 3 ) • 3 )只要拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。 • 硬件环境只是必要条件,人才是充分条件,软件是人在一定的约束条件下创造出来的。因人因事而异。
思考题 (4) • 4 )软件开发时,如果进度慢,落后于计划,可以增加更多的程序员来解决。 • 增加人力可以减少开发时间吗? • 新手!任务的重新划分!沟通更加复杂! • 必须依靠科学地计划来解决这样的问题。
思考题(5) • 5 )争议:如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法? • 软件的性能问题; • 应用级别→算法的合理性; • 系统级别→操作系统、数据库系统、系统软件等; • 硬件级别→机器性能
§1 . 2 软件工程 • §1 . 2 . 1 软件工程介绍 • 一、“软件工程”的典型定义 • 1 )1968 年,第一届 NATO 会议 • 为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。 • 2 ) IEEE/CS(电气电子工程师协会/计算机科学分会) • ① 1993 年,将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。 • ② 对 ① 中提到的各种方法的研究
3 ) 其他学者的定义 • Boehm :运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。 • Fritz Bauer: 建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法 • 所有定义都强调在软件开发过程中,应用工程化原则的重要性
几个关于软件工程本质特性和基本原理的问题 • 问题一: 软件工程适用范围? • 问题二:软件工程如何控制系统开发的复杂性的? • 问题三:以你的经验,举例说明一个成熟的软件通常采用什么方法来适应现实世界的变化的?
几个关于软件工程本质特性和基本原理的问题 • 问题四:假设某软件公司,能为同一个用户开发两个不同层次的软件:一个层次的软件功能非常强大,在满足用户所有需求的基础上,还能提供大大超过用户需求的其他更多更强的功能;另一个层次的软件仅仅能满足用户需求,但没有提供其他额外的功能。请问如果你是项目负责人,你会选择为客户开发那个层次的软件? • 问题五:协同工作有什么重要性?