• 1. 邸书灵 信息科学与技术学院 2013-2-27 软件工程概论 Introduction to Software Engineering
  • 2. 关于课程 性质 专业必修  目的 对软件系统开发中的技术问题和管理问题有一个基本的认识 初步掌握主要的软件开发理论和技术、方法 树立工程化思想,为今后的软件开发实践打下良好的基础  要求:认真、努力2
  • 3. 关于课程(Cont.) 先修课程 过程化高级程序设计 面向对象程序设计  后续课程 软件需求与分析 统一建模语言 软件项目管理 软件体系结构 软件测试技术3
  • 4.  学时 32=32(讲课,即理论学时)  主要内容  成绩 总成绩=考试成绩*80%+平时成绩*20% 平时成绩=出勤+课堂表现+作业等关于课程(Cont.)4
  • 5. 教材及参考书 教材 软件工程 —理论、方法与实践;孙家广,刘强 高等教育出版社;2010.11  参考书 《软件工程-理论与实践》许家珆 曾翎 彭德中编著 高等教育出版社 2004.7 《软件工程技术概论》朱三元 钱乐秋 宿为民 编著 科学出版社 2002.1 软件工程 (第二版)邓良松 刘海岩 陆丽娜 编著 西安电子科技大学出版社 2004.65
  • 6. ?????? 什么是软件?  你用过哪些软件?  你如何评价软件的优劣?  你知道软件是怎样开发出来的吗?  你接触过软件开发吗?在其中什么作用?  你了解哪些软件开发技术?软件开发工具?  ……6
  • 7. ?????? 什么是工程?  什么是软件工程?  为什么要学习软件工程?  如何实施软件工程?技术?工具?方法?  软件工程:课程course/专业major/学科subject?  ……7
  • 8. 第一章 概述1.1 软件 1.2 软件工程 1.3 软件工程知识体系 1.4 软件工程职业道德规范 8
  • 9. 第一章 概述1.1 软件 1.1.1 软件的发展 1.1.2 软件的特性 1.1.3 软件危机 9
  • 10. 1.1 软件• 软件的定义(IEEE Standard Glossary of Software Engineering Terminology)软件是计算机程序、规程以及运行计算机系统可能需要的相关文档和数据。• 软件=程序?No文档是描述程序研制过程、方法及使用的图文材料Institute of Electrical and Electronics Engineers (IEEE) 美国电气和电子工程师协会 ?10
  • 11. 1.1 软件•软件的真正含义不是一个定义所能够体现的。 •从软件的内容来说,软件更像是一种嵌入式的数字化知识,其形成是一个通过交互对话和抽象理解而不断演化的过程。 •软件的应用领域广泛、呈现形式多样,因此软件类型难以界定。 •根据软件服务对象的范围,一般分为通用和定制两种。11
  • 12. 1.1 软件•通用软件(Generic Software):由软件开发组织开发、面向市场用户公开销售的独立运行系统。如OS、DBMS、Word、AutoCAD等。 •定制软件(Customized Software ):由某个特定用户委托、软件开发组织在合同的约束下开发的软件。如企业办公系统、卫星控制系统等。优点:一次开发,多次出售。缺点:有风险。优点:满足用户个性化需求。缺点:重复利用性差。12
  • 13. 1.1.1 软件的发展(1)第一阶段:20世纪50-60年代 应用:快速计算 语言: Algol、Fortran。算法技术。 程序质量依赖于程序员个人的技巧 60年代末出现了“软件危机” (2)第二阶段:20世纪70年代 应用:涉及非数值计算的商业事务处理。 语言:Pascal 、Cobol、RDBMS。结构化软件技术。 软件的概念包含了文档。开始采用开发模型,瀑布模型被普遍使用。13
  • 14. 1.1.1 软件的发展(3)第三阶段:20世纪80年代 微处理器出现,计算机大众化 语言: 面向对象,如C++等 CASE:计算机辅助软件工程 开始注重软件质量 (4)第四阶段:20世纪90年代至今 Internet技术迅速发展,软件系统从封闭走向开放 WEB应用、分布式软件、软件复用、构件技术 进入21世纪:Internet向智能网络时代发展,网格技术、Web Services 分布式计算等。14
  • 15. 复杂性( Complexity ) 一致性( Conformity ) 可变性( Changeability ) 不可见性( Invisibility )1.1.2 软件的特性15
  • 16. •No silver bullet: essence and accidents of software engineering– Fredrick P. Brooks,IBM OS360 项目经理 – 1999 年图灵奖获得者作者指出,正是软件固有的复杂性造成了软件开发的诸多问题。 课后:查找资料,简述该书内容。 并对silver bullet加以解释。 复杂性(没有银弹:软件工程中的根本和次要问题) 16
  • 17. 复杂性(1)软件是人类思维和智能在计算机上的再现,远比任何由人类创造的其他实体要复杂得多。 (2)在大型软件系统中,无数个数据、状态、和逻辑关系的可能组合,以及人类思维的复杂性和不确定性导致的理解歧义和差异,使得整个系统的复杂性急剧增加,也使得软件的设计、实现和测试都相当困难。 (3)软件的复杂性是软件的固有属性、本质特性。17
  • 18. 一致性(1)软件必须遵从人为的惯例并适应已有的技术和系统。 • 软件必须遵循各种接口、协议和标准 • 有些情况下,兼容性是软件开发的目标 (2)软件需要随接口的不同而改变,随时间的推移而变化,而这些变化是不同的人设计的结果。 (3)许多复杂性来自保持与其他接口的一致,对软件的任何再设计,都无法简化这些复杂特性。18
  • 19. 可变性(1)软件需要随着应用、硬件、用户和社会等各种因素的变化而不断地被修改和扩展。 (2)软件的修改会带来一些副作用,如增加成本、引入新错误、失效率增加等。但也给软件带来了新的生命力。 (3)所有成功的软件都会发生变更!19
  • 20. 不可见性(1)软件是不可见的和无法可视化的。 • 软件的客观存在不具有空间的形体特征 • 定义“需要做什么”成为软件开发的根本问题 (2)人们一直试图使用不同的技术进行软件可视化。 • 控制流程、数据流、依赖关系、UML、…… • 这些技术仍然无法给出准确的、完整的描述20
  • 21. 1.1.3 软件危机软件危机(Software Crisis)是指在计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机出现于 20 世纪 60 年代末。 “软件危机”主要表现4: (1)经费预算经常突破,完成时间一再拖延。 (2)开发的软件不能满足用户要求。 (3)开发的软件可维护性差。 (4)开发的软件可靠性差。21
  • 22. 1.1.3 软件危机软件危机的原因4: 软件的开发成本和进度难以准确估计,很多项目延迟交付甚至取消 软件存在错误多、性能低、不可靠、不安全等质量问题 软件开发费用不断增加。软件成本在计算机系统的整个成本中所占比例越来越大 软件维护极其困难,而且很难适应不断变化的用户需求和使用环境 22
  • 23. ARIANE 5 火箭– 1996 年 6 月,耗资 70 亿美元,发射 37 秒后爆炸 – 发射失败的原因在于软件的错误• 软件错误– 程序中试图将 64 位浮点数转换成 16 位整数时产生溢出 – 缺少错误处理程序对数据溢出进行管理• 严格地遵守软件确认过程可以避免这种错误!!!软件错误的实例23
  • 24. • 爱国者导弹– 曾在海湾战争期间对抗伊拉克飞毛腿导弹 – 1991 年 2 月,一次对抗失利中 28 名美国士兵丧生– 问题的症结在于导弹软件包含一个累加计时误差软件错误的实例24
  • 25. 千年虫问题– 迫于计算机存储空间的限制,程序员将日期年份缩减 为 2 位数 – 世界各地更换或升级 2000 年问题软件的花费超过数亿美元11 1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。软件错误的实例25
  • 26. IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。 1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序: DO 5 I=1,3 误写为: DO 5 I=1 . 3软件错误的实例26
  • 27. 第一章 概述1.2 软件工程 1.2.1 软件工程的概念 1.2.2 软件工程的三要素 1.2.3 软件质量的特性 1.2.4 软件工程方法 1.2.5 计算机辅助软件工程CASE 1.2.6 当前面临的主要挑战27
  • 28. 工程的概念•“工程”是将自然科学原理应用到工农业生产部门中去而形成各学科的总称。 •“工程”是科学的某种应用,通过这一应用,使自然界的物质和能源的特性能够通过各种结构、机器、产品、系统和过程,是以最短的时间和精而少的人力做出高效、可靠且对人类有用的东西。  28
  • 29. 工程的概念• 在现代社会中“工程”一词有广义和狭义之分。 • 狭义而言,工程定义为“以某组设想的目标为依据,应用有关的科学知识和技术手段,通过一群人的有组织活动将某个(或某些)现有实体(自然的或人造的)转化为具有预期使用价值的人造产品过程”。 • 广义而言,工程则定义为由一群人为达到某种目的,在一个较长时间周期内进行协作活动的过程。 29
  • 30. 工程的概念30
  • 31. • 手工和工程规模上的差异– 花园小道 vs. 汽车高速公路 – 树上小屋 vs. 摩天大楼– 加法程序 vs. 医院档案系统• 手工(Craft): 小规模的设计与建造– 简单问题与单一目标 – 个人控制与个人技能• 工程(Engineering): 大规模的设计与建造– 复杂问题与目标分解– 多人参与,需考虑运营、管理、成本、质量控制、安全等 工程的概念31
  • 32. 工程的特征• 平衡与决策– 需要进行一系列决策和认真评价,并在每一个决策点做出适 当选择,适当与否可以通过平衡成本和利益的分析来判断。• 度量与验证– 应该度量事物,在适当的时候定量工作;需要校正并验证度量,并在经验和实验数据的基础上进行近似。• 运用工具– 工程师需要将工具系统地应用在过程中,因此选用适当的工具是工程的关键。32
  • 33. •–•–•–•–团队协同工作注重训练有素,并以团队的形式进行有效的工作。角色分工多重角色:研究、开发、设计、生产、测试、构造、实施、 管理以及其他诸如销售、咨询和教学等。最佳实践通过专业团体不断地开发和确认工程原则、标准和实践。强调重用工程师应该重用设计和设计制品。工程的特征33
  • 34. 1.2.1 软件工程的概念• 软件工程的定义[Fritz Bauer, 1968]软件工程是为了经济地获得能够在实际机器上高效运行的可靠软 件而建立和使用的一系列好的工程化原则。[CMU, 1990]软件工程是以工程的形式应用计算机科学和数学原理,从而经济 有效地解决软件问题。 [IEEE,1993]软件工程是①将系统性的、规范化的、可定量的方法应用于软件 的开发、运行和维护,即工程化应用到软件上; ②对①中所述方 法的研究。生于1924年, 德国慕尼黑技术大学名誉教授和计算机科学家。 34
  • 35. 软件工程是工程概念在软件领域中的一个特定应用。 与其他工程一样,软件工程是在不确定和资源受限的条件下,采用系统的、规范的、可定量的方法进行有关原则的实施和应用。 软件工程涉及软件产品的各个环节。但人们往往重视软件开发技术、忽视软件项目管理的重要性。统计表明,软件项目失败的主要原因几乎与技术和工具没有关系,更多的是管理不当造成的。1.2.1 软件工程的概念35
  • 36. 小 结1.1 软件 1.1.1 软件的发展 1.1.2 软件的特性 1.1.3 软件危机 1.2 软件工程 1.2.1 软件工程的概念
  • 37. 作业思考题:为什么要研究和学习软件工程? 作 业:1.1,1.2