2009-7-26 1
Instructor,Zhao Liang (赵良 )
Email,zhaoliang103@163.com
Tel,13367253390
QQ,17367649
Software Engineering
2009-7-26 2
教学目标
Goal 1
使学生具有构建高质量软件的能力 —软件是可靠的、易懂的、易修改的和易维护的。
Goal 2
使学生深刻认识到这些技能为什么重要,
并具有软件工程意识。
(1)立足于系统的整体。
,软件工程”课程与其它软件专业课的区别
(2)讲授系统分析、系统设计、测试及维护的理论和方法。
(3)构筑一个软件系统,实践软件开发全过程。
2009-7-26 4
教学方法课堂教学 (2 per week)
… 必上课程
… 讲授核心内容实验教学 (1 per week)
… 每次 3个小时
… 必上课程
… 小组项目的设计和开发
… 小组审议评估小组讨论 (at least 1 per week)
必须定时和小组其他成员沟通交流
2009-7-26 5
考核标准小组项目
小组项目占整个成绩的 40%(考勤 +实验),
文档,
文档包括可行性分析报告、需求分析规格说明书、
设计规格说明书、项目原型及其他相关文档说明,
项目提交,
期末考试
期末考试成绩占总成绩的 60%.
2009-7-26 6
教材
Course Text (Required)
软件工程方法与实践,胥光辉,金凤林,丁力编著,机械工业出版社
Other Texts (Recommended)
软件工程,齐治昌,谭庆平等编著,高等教育出版社
软件工程,张海藩编著,人民邮电出版社
可视化面向对象建模技术,刘超、张莉编著,北京航空航天大学出版社
Roger S,Pressman,“Software Engineering,A
Practitioner Approach (Fifth Edition)”,McGraw Hill
Education
Ian Sommerville,“Software Engineering (6th Edition)”,
McGraw Hill Education
Background Reading
WWW.21swe.com 21世纪软件工程专家网
WWW.51cmm.com 软件工程专家网
WWW.sercenter.com 软件工程研究中心
2009-7-26 7
内容第一部分
传统软件工程第二部分
面向对象软件工程 (UML)
第三部分
软件过程、管理和质量
2009-7-26 8
教学大纲软件工程的基本概念软件开发过程软件需求分析和规格说明书软件设计技术软件测试、文档和维护软件度量软件质量管理
CASE 工具 …
软件工程新技术
转变对软件开发的认识:
上升程序 系统
,软件工程,课程教学与实践的目标
转变思维定式:
上升程序员 系统工程师
(系统分析员 )
工程化训练
2009-7-26 10
第 1讲 软件、软件危机和软件工程
2009-7-26 11
软件已渗入到现代生活的每个角落软件已经成为一种驱动力量
2009-7-26 12
什么是软件软件 是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
程序 是按事先设计的功能和性能要求执行的指令序列 (program)
数据 是使程序能正常操作信息的数据结构
(data structures)
文档 是与程序开发,维护和使用有关的图文材料 (documents)
2009-7-26 13
软件的特点表现形式
软件是一种 逻辑实体,而不是具体的物理实体。因而它具有高度抽象性。
生产方式
软件的生产与硬件不同,在它的开发过程中 没有明显的制造过程,大多数软件仍是 定制的。
维护
在软件的运行和使用期间,没有硬件那样的机械磨损,
老化问题。 (图示)
要求
软件产品不允许误差
2009-7-26 14
软件的特点(续)
软件产品的高质量取决于好的设计 ( High
quality is achieved through)
依赖于人 ( Depend on people)
需要对产品进行构造 ( Require the
construction of a,product”)
2009-7-26 15
故障率时间生命初期 磨损后硬件的故障率曲线修改由于副作用造成故障率的提高实际曲线原来的软件已经面目全非了!
软件故障率的理想曲线
2009-7-26 16
硬件和软件故障率曲线的比较
软件不会用坏( wear out),软件会退化( deteriorate) !
2009-7-26 17
软件开发的特点软件的开发和运行常受到计算机系统的限制,
对计算机系统有着不同程度的依赖性;
软件的开发至今 尚未完全摆脱手工艺的开发方式;
软件开发本身是复杂的:
实际问题的复杂性
程序逻辑结构的复杂性软件成本相当昂贵;
相当多的软件开发工作涉及到社会因素。
2009-7-26 18
软件质量要素可维护性,软件必须能够不断进化以满足用户的需求变化,这是软件产品最根本的要素,因为工作环境是不断变化的,软件也必然要跟着变化。
可依赖性,包括可靠性、保密性和安全性。可靠的软件在系统失败的情况下,也不会导致人员伤亡和经济损失。
有效性,软件不要浪费内存和 CPU等系统资源,因而有效性应包括响应时间、处理时间、内存利用率等。
可用性,软件必须具备可用性。必须是用户不用特殊地努力就能操作。那么,软件必须提供用户界面和充分地说明文档。
2009-7-26 19
软件的分类按软件的功能进行划分:
系统软件
操作系统
数据库管理系统
设备驱动程序
支撑软件
文本编辑程序
文件格式化程序
应用软件
商业数据处理软件
计算机辅助教学软件( CAD)
系统仿真软件
2009-7-26 20
软件的分类按软件规模进行划分:
类别 参加人员数 研制期限 源程序行数
微型 1 1~ 4周 0.5k
小型 1 1~ 6月 1k~ 2k
中型 2~ 5 1~ 2年 5k~ 50k
大型 5~ 20 2~ 3年 50k~ 100k
甚大型 100~ 1000 4~ 5年 1M(=1000k)
极大型 2000~ 5000 5~ 10年 1M~ 10M
2009-7-26 21
软件的分类按软件工作方式划分:
实时处理软件
分时软件
交互式软件
批处理软件
2009-7-26 22
软件的发展
早期(机器指令),
“Software” =,Place a sequence of instructions
together to get the computer to do something useful”.
50年代后期 ( 汇编语言 ),
计算机变得更便宜、普通高级语言的出现
ProgrammerUserComputer
easier
User Computer
2009-7-26 23
软件的发展
60年代早期,
几乎没有由专家完成的大型软件项目 。
60年代中后期,
初次尝试大型软件系统的开发。
70年代和 80年代
,新的工业革命,
,工业社会将转变为信息社会,
……
90年代乃至 21世纪初
,无所不在的计算,(Ubiquitous Computing)
2009-7-26 24
如今及未来,
Software =
Product (information transformer)
Vehicle for delivering a product (OS,network,tools)
软件的发展
2009-7-26 25
直到今天还一直在问的问题,
为什么要花如此长的时间才能完成软件的开发工作?
为什么我们的开发费用如此之高?
为什么我们不能在软件交付前找到产品中所有的错误?
为什么对软件开发过程的管理还存在着困难?
软件的发展
2009-7-26 26
软件危机
Case,美国 IBM公司在 1963年至 1966年开发的
IBM360机的操作系统。这一项目花了 5000人一年的工作量,最多时有 1000人投入开发工作,写出了近 100万行源程序。,.....据统计,这个操作系统每次发行的新版本都是从前一版本中找出 1000个程序错误而修正的结果。,.....
Or maybe Chronic
Affliction is more
accurate?
2009-7-26 27
软件危机
Myth,如果落后于进度表,我们可以增加更多的程序员便能赶上进度。
Reality,软件开发不是象制造业的机械过程。用
Brooks 的话说:,向进度落后的软件项目增加人员只会使该项目进度变的更慢。,
⑴ 项目没有被很好地理解;计划不周,最终导致进度拖延。
问题出在哪里?
2009-7-26 28
软件危机人与人的 交流 比写程序困难得多。
Managers —— evaluate,track progress,......
Programmers —— communicate to each other
Maintainers —— Vital
⑵ 没有充分的文档资料 (documentation)
Myth,一个成功的项目唯一需要交付的就是运行的程序 。
Reality,运行的程序只是软件配臵的一部分,除此之外,还包括程序清单,文档以及相关数据 。 文档是开发工作成功进行的基础,更重要的是为软件维护提供指南作用 。
2009-7-26 29
⑶ 软件可靠性 (reliability)缺少度量的标准,质量无法保证。
如何保证软件产品的质量,是非常复杂困难的问题,特别对于规模庞大的软件 。
The software supporting the American space shuttle
consists of 3 million lines of code,including computers on the
ground controlling the launch and the flight; there were one
hundred thousand lines of code in the shuttle itself in 1985.
President Reagan’s proposed Strategic Defense Initiative
(SDI) is estimated to require 10 to 100 million lines of code.
Many computer scientists and software engineers continue to
believe there is no way to write and test the software to
guarantee adequate reliability.
软件危机
2009-7-26 30
Myth,一旦我们完成了程序的编写,并让它能运行,那我们的任务就完成了 。
Reality,有一个人曾经说过:,你越早开始编写代码,
那你就越晚完成工作 。,工业统计数字表示,产品第一次交付给用户后,还要花费编写该软件 60%-80%的精力来维护 。
软件危机
⑷ 软件难以维护 (maintainability),不易升级 (evolvability)
2009-7-26 31
软件工程
更好的管理问题
不同团队的组织问题
更好的编程语言和工具
统一的编码习惯
“软件工程” (Software Engineering) NATO
Conference,Garmish,Germany,1968.
解决问题的想法:
意识到:,软件,编程,大型软件系统的开发与其它工程项目如建造桥梁、制造飞机、轮船等的开发是同理的,它有自己的 生命周期 (lifecycle) 。
2009-7-26 32
软件工程定义
Boehm,运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。
IEEE,将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。
Fritz Bauer,建立并使用完善的工程化原则,
以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。
2009-7-26 33
软件工程定义
软件工程是一类求解软件的工程,它应用计算机科学、数学 (用于构造模型和算法) 和管理科学 (用于计划、资源、质量和成本等的管理)
等原理,借鉴传统工程 (用于制定规范、设计范型、评估成本、权衡结果) 的原则和方法,
创建软件以达到提高质量、降低成本的目的。
软件工程是一门指导计算机软件开发和维护的工程学科。
2009-7-26 34
软件工程定义
软件工程是一门交叉学科
软件开发技术,软件开发方法学软件开发过程软件工具和软件工程环境
软件工程管理,软件管理学软件经济学软件心理学
软件工程所包含的内容不是一成不变的,随着人们对软件系统的研制开发和生产的理解,
应用发展的眼光看待它。
软件需求
软件设计
软件构造
软件测试
软件维护
软件配臵管理
软件工程管理
软件工程过程
软件工程工具和方法
软件质量软件工程的研究内容
2009-7-26 36
软件工程原理
⑴ 用分阶段的生命周期计划严格管理
项目概要计划?里程碑计划?项目控制计划?产品控制计划?验证计划?运行维护计划
⑵ 坚持进行阶段评审
⑶ 实行严格的产品控制 ——基准配臵管理
(Baseline configuration management)
⑹ 开发小组的成员应该少而精
1+1 < 2
⑷ 采用现代程序设计技术
⑸ 结果应能清楚地审查 —set standards
⑺ 承认不断改进软件工程实践的必要性软件工程框架可用性 性 性确正 合算选取适宜的开发模型采用合适的设计方法提供高质量的工程支持重视软件工程的管理基本过程原则目标过 程支持过程组织过程
2009-7-26 38
软件工程的历史起源于 20世纪 50年代但是从学术的角度看,软件工程还是一个年轻的学科
第一次会议在 20世纪 60年代后期
而在 80年代才从计算机科学分离开
2009-7-26 39
软件工程的历史
1,60年代末~ 80年代初状况,软件系统的规模、复杂性以及在关键领域的广泛应用促进了软件开发过程采纳工程化的方法进行管理。
研究,开发模型、支持工具、开发方法。
成果,瀑布模型、结构化语言( Pascal等)、结构化方法、各种管理方法(如费用估算、文档复审)。
事件,前期主要研究系统实现技术;后期则开始强调管理和软件质量。
焦点,软件项目
2009-7-26 40
2,80年代初~现在状况:,软件工厂,的概念已经提出。
研究,软件生产技术,特别是软件复用技术和软件生产管理的研究和实践。
成果,提出了具有广泛应用前景的面向对象方法和相关的编程语言。
事件,软件过程改进。在工业实践中建立起一种量化的评估程序,判定软件组织成熟的程度。
焦点,软件过程软件工程的历史
2009-7-26 41
近几年:
研究从过程管理转向产品开发,更加注重新的程序开发范型和软件生产。
范围,面向 agent语言、复用技术、需求分析规格说明的形式化研究、高智能高自动化的 CASE成为热点。
软件工程的历史
2009-7-26 42
软件工程的历史
20世纪 60年代晚期,刊物上开始出现软件工程的专业文章出现专业杂志
ACM Transactions on Software Engineering and
Methodologies
Software Engineering Notes
IEEE’s Transactions on Software Engineering
Software
2009-7-26 43
我国软件业的现状技术少标准开发缺规范生产无检验质量无保证
2009-7-26 44
它山之石从标准化与产品流程入手,重视管理。
流程重于项目注重标准化,注重开发的流程管理,以与国际接口。
目前印度软件公司中有 170家公司获得 ISO9000
质量标准认证,是世界上获得质量认证软件企业最多的国家。在得到卡内基 —梅隆大学软件工程学会最高级别的全球 23家计算机软件公司中,有 15家是印度公司。
2009-7-26 45
小结什么是软件?
软件与硬件相比,其特点是什么?
软件质量要素?
产生软件危机的原因?
什么是软件工程?
软件工程研究的内容软件工程原理、基本框架