软件工程课程设计
2018/11/14
7
软件危机
• 软件工程的兴起要根源于20世纪60,70和80年代的软件危机。 在那个时代,很多的软件最后都得到了一个悲惨的结局。很多 的软件项目开发时间大大超出了规划的时间表。一些项目导致 了财产的流失,甚至某些软件导致了人员伤亡。同时软件开发 人员也发现软件开发的难度越来越大。 • OS 360操作系统被认为是一个典型的案例。到现在为止,它仍 然被使用在IBM360系列主机中。这个经历了数十年,极度复杂 的软件项目甚至产生了一套不包括在原始设计方案之中的工作 系统。OS 360是第一个超大型的软件项目,它使用了1000人左 右的程序员。Fred Brooks在随后他的大作《人月神话》(The Mythical Man-Month)中曾经承认,在他管理这个项目的时候, 他犯了一个价值数百万美元的错误。 • 财产的损失:软件的错误可能导致巨大的财产损失。欧洲阿里 亚娜火箭的爆炸就是一个最为惨痛的教训。Βιβλιοθήκη 2018/11/144
软件工程与计算机科学
软件的开发到底是一门科学还是一门工程,这是一个被争论 了很久的问题。实际上,软件开发兼有两者的特点。但是这 并不意味着它们可以被互相混淆。很多人认为软件工程基于 计算机科学和信息科学就如传统意义上的工程学之于物理和 化学一样。在美国,大约40%的软件工程师具有计算机科学 的学位。在世界其他地方,这个比例也差不多。他们并不一 定会每天使用计算机科学方面的知识,但是他们每天都会使 用软件工程方面的知识。
2018/11/14
2
软件工程的定义
•创立与使用健全的工程原则,以便经济地获得可靠且高效率的软件。 •应用系统化,遵从原则,可被计量的方法来发展、操作及维护软件;也 就是把工程应用到软件上。 •与开发、管理及更新软件产品有关的理论、方法及工具。 •一种知识或学科(discipline),目标是生产品质良好、准时交货、符 合预算,并满足用户所需的软件。 •实际应用科学知识在设计、建构电脑程序,与相伴而来所产生的文件, 以及后续的操作和维护上。 •使用与系统化生产和维护软件产品有关之技术与管理的知识,使软件开 发与修改可在有限的时间与费用下进行。 •建造由工程师团队所开发之大型软件系统有关的知识学科。 •对软件分析、设计、实施及维护的一种系统化方法。 •系统化地应用工具和技术于开发以计算机为主的应用。
2018/11/14
5
软件工程与计算机科学的差别[11] 软件工程 在时间、资源、人员这3个主要限制条件下构建满足用户需 求的软件系统。 软件(比如办公包和编译器)。 计算机科学 探索正确的计算和建模方法,从而改进计算方法 本身。 算法(比如希尔排序法)和抽象的问题(比如哲 学家进餐问题)。 研究项目一般不具有设置的进度与时间表
2018/11/14
3
软件工程的内核知识(SWEBOK)
ACM 与 IEEE Computer Society 联合修定的 SWEBOK(Software Engineering Body of Knowledge)提到,软件工程领域中的内核知识包 括: •软件需求(Software requirements) •软件设计(Software design) •软件建构(Software construction) •软件测试(Software test) •软件维护与更新(Software maintenance) •软件构型管理(Software Configuration Management, SCM) •软件工程管理(Software Engineering Management) •软件开发过程(Software Development Process) •软件工程工具与方法(Computer-Aided Software Engineering, CASE) •软件品质(Software Quality)
John Backus, Dan Bricklin, 蒂姆· 伯纳斯-李, 林纳斯· 托瓦 著名的实 践者 兹, 理查德· 马修· 斯托曼。 2018/11/14
无。
6
软件工程与计算机程序设计
• 软件工程存在于各种应用中,存在于软件开发的各个方面。 而程序设计通常包含了程序设计和编码的反复迭代的过程, 它是软件开发的一个阶段。 • 软件工程力图对软件项目的各个方面作出指导,从软件的 可行性分析直到软件完成以后的维护工作。软件工程认为 软件开发与各种市场活动密切相关。比如软件的销售,用 户培训,与之相关的软件和硬件安装等。软件工程的方法 学认为一个独立的程序员不应当脱离团队而进行开发,同 时程序的编写不能够脱离软件的需求,设计,以及客户的 利益。 • 软件工程的发展是计算机程序设计工业化的体现。
2018/11/14 1
软件工程的由来
鉴于软件开发时所遭遇困境,北大西洋公约组织(NATO)在 1968年举办了首次软件工程学术会议,并于会中提出“软件 工程”来界定软件开发所需相关知识,并建议“软件开发应 该是类似工程的活动”。软件工程自1968年正式提出至今, 这段时间累积了大量的研究成果,广泛地进行大量的技术实 践,借由学术界和产业界的共同努力,软件工程正逐渐发展 成为一门专业学科。
软件工程
•软件工程是一门研究用工程化方法构建和维护有效的、实用 的和高质量的软件的学科。 •它涉及到程序设计语言、数据库、软件开发工具、系统平台、 标准、设计模式等方面。 •软件应用于多个方面。典型的软件比如有电子邮件、嵌入式 系统、人机界面、办公包、操作系统、编译器、数据库、游 戏等。同时,各个行业几乎都有计算机软件的应用,比如工 业、农业、银行、航空、政府部门等。而这些应用促进了经 济和社会的发展,提高人们的工作效率,同时提升了生活质 量。 •软件工程师是对应用软件创造软件的人们的统称,软件工程 师按照所处的领域不同可以分为系统分析员、软件设计师、 系统架构师、程序员、测试员等等。人们也常常用程序员来 泛指各种软件工程师。
目标
产品 进度与时 间表
软件项目都有特定的进度与时间表
关注点
软件工程关注如何为用户实现价值。
软件理论关注的是软件本身运行的原理,比如时 间复杂度,空间复杂度,和算法的正确性。
变化程度
随着技术和用户需求的不断变化,软件开发人员必须时刻调 整自己的开发以适应当前的需求。同时软件工程本身也处于 不断的发展中。 相关领域的知识。
对于某一种特定问题的正确解决方法将永远不会 改变。
需要的其 他知识
数学。
著名的探 索者和教 育家
Barry Boehm, David Parnas, and Frederick P. Brooks。
Edsger Dijkstra, 高德纳, Robert Tarjan, Peter Slater,艾伦· 图灵,姚期智。