1、软件工程导论(1) 为什么要研究软件工程,卢军 ,教材,软件工程导论-高等学校教材软件工程 ISBN:978-7-302-18623-6 出版社/厂商: 清华大学出版社发行部 作者: 朱少民 出版日期: 2009-1-1,学习方法,思考:通过一学期的学习,大学学习方式的感想?,本课程学习方法:没有完成比较大的软件、系统的亲身体验,体会不到 “工程”的含义。 本书体系结构:1. 软件工程是为了解决软件危机而提出的! 软件危机 软件工程2. 软件工程相关理论,工程导论,机械、电子,汽车、能源,软件、动漫,投影,投影,投影,软件工程体系,http:/ 用系统的、规范的、可度量的方法,开发、运行和维
2、护软件,软件工程是采用系统工程学和管理学相结合的原理、方法和技术来指导、管理和实施软件的各种活动,包括软件开发、运行、维护和服务等,Q2-软件工程的基本目标是什么?,高质量就是最大程度地满足客户需求、帮助客户获得成功 高生产力就是以最小的成本获得最好的收益,即在规定的时间和预算之内完成软件开发、维护和服务等任务,高质量 &高生产力,Q3-为什么要讨论软件工程?,软件危机的出现和加剧 软件系统越来越复杂 软件环境变化很快 软件用户的需求越来越高,Q4-软件工程带来的益处又是什么?,规范软件开发的行为,从而提高软件的可维护、可移植性和可靠性 提供许多科学的方法、最佳实践和工具,帮助人们高效地、系统
3、地、正确地构造软件 帮助我们建立有效的、平稳的并能持续改进的软件过程,预防缺陷、降低成本,最终多快好省地提供优质的软件产品或服务,为组织赢得利润、获得竞争力,Q6-如何理解软件工程?,管理,针对不同的领域建立目标、标准和规则 过程:定义完成软件各项任务的工作阶段、内容、流程、阶段性成果和验收要求 方法:软件开发、运行和维护等所需的技术方法 工具:为方法的运用提供自动或半自动的软件支撑环境,首先就是一种指导软件管理和实施的先进思想。其次,是针对软件特点而建立的科学管理体系。最后,是一门学科,研究适合软件的过程、方法和工具,Q7-软件工程知识体系包含哪些内容?,软件工程分为:软件工程方法学和软件工
4、程管理学10 个知识域 :软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程工具和方法和软件质量 管理。,本章内容,1.1 软件危机 1.2 软件的问题在哪里? 1.3 软件工程的诞生 1.4 软件工程的命题 1.5 软件工程知识体系 1.6 现代软件工程,http:/ 软件危机 1.2 软件的问题在哪里? 1.3 软件工程的诞生 1.4 软件工程的命题 1.5 软件工程知识体系 1.6 现代软件工程,http:/ 软件不再只是程序 1.1.2 危机四伏 1.1.3 软件危机之证,http:/ (Software Crisis) 是在软件开发和
5、维护过程中所遭遇的一系列严重问题,导致开发延期、成本激增或者软件运行质量事故等。,软件不再只是程序,软件 程序 人机交互、实时系统、业务系统,http:/ FORTRAN:Formular Translator ,在气象、力学都 还在用,比如有限元,世界上第一位软件工程师,Ada Lovelace(18151851) 数学家 穿孔机程序创始人,建立了循环和子程序概念 英国著名诗人拜伦 的女儿,典型的例子,IBM 360系列机的操作系统 Fred Brooks在的人月神话(The Mythical Man-Month),http:/ 不能满足客户需求,用户不满意 缺乏质量保证体系,没有成熟的开发
6、流程,产品的质量得不到保证 软件不容易被维护,错误难以纠正,新功能难以扩充-一旦有比较大的改动,从头做 软件发展速度跟不上硬件发展的要求 ,http:/ 丹佛新国际机场的自动化行李处理系统中存在严重的程序缺陷,导致行李箱被绞碎 1999年美国宇航局的火星基地登陆飞船在试图登陆火星表面时突然坠毁失踪。 Windows2000存在许多安全性漏洞 2002年7月23日,我国首都机场因计算机软件系统故障,6000多人滞留机场,150多个航班延误。 2003年8月14日发生的美国及加拿大部分地区史上最大停电事故是由软件错误所引起,http:/ 软件危机 1.2 软件的问题在哪里? 1.3 软件工程的诞生
7、 1.4 软件工程的命题 1.5 软件工程知识体系 1.6 现代软件工程,http:/ 软件的问题在哪里?,1.2.1 软件特性 1.2.2 软件业所面临的问题 1.2.3 软件问题的幽默画,http:/ 软件技术日新月异 易修改性 需求不断变化 非标准化,http:/ 软件技术日新月异:摩尔定律是由英特尔(Intel)创始人之一戈登摩尔(Gordon Moore) 提出来的。其内容为:集成电路上可容纳的晶体管数目,约 每隔18个月便会增加一倍,性能也将提升一倍,当价格不变 时;或说,每一美元所能买到的电脑性能,将每隔18个月翻 两倍以上。这一定律揭示了信息技术进步的速度。 易修改性易修改性导
8、致用户需求不断的变化、项目不断修正 需求不断变化 非标准化:传统工业有国家标准,而软件部分由国际通用,软件开发 = 焦油坑,http:/ 软件需求不充分,同时经常变更 大规模的软件会使开发人员数量的增长很快,导致团队沟通不畅(二次级数增长) 其它问题,http:/ 软件危机 1.2 软件的问题在哪里? 1.3 软件工程的诞生 1.4 软件工程的命题 1.5 软件工程知识体系 1.6 现代软件工程,http:/ my $try (options) next unless exists $hash$try; do_something($try); goto SUCCESS; log_failure
9、(); SUCCESS: .,本章内容,1.1 软件危机 1.2 软件的问题在哪里? 1.3 软件工程的诞生 1.4 软件工程的命题 1.5 软件工程知识体系 1.6 现代软件工程,http:/ Bauer:软件工程是为了经济地获得能够在实际机器上高效运行的、可靠的软件而建立和应用一系列坚实的软件工程原则 SEI: 软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效地解决软件问题 IEEE: 软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,软件工程的内涵,软件工程学科包含为完成软件需求、设计、构建、测试和维护所需的知识、方法和工具。 软件工程不局限在理论之上
10、,更重要在实践上,能够帮助软件组织协调团队、运用有限的资源,遵守已定义的软件工程规范,通过一系列可复用的、有效的方法,在规定的时间内达到预先设定的目标,交叉性学科,计算机科学和数学用于构造软件的模型与算法 工程科学用于制定规范、设计范型、评估成本以及确定权衡等 管理科学用于计划、资源、质量、成本等管理,软件工程由下列3部分组成:,学科范围,本章内容,1.1 软件危机 1.2 软件的问题在哪里? 1.3 软件工程的诞生 1.4 软件工程的命题 1.5 软件工程知识体系 1.6 现代软件工程,http:/ 软件工程知识体系,1.5.1 软件工程知识体系的构成 1.5.2 软件工程要素 1.5.3
11、SWEBOK,http:/ 软件方法学离不开软件过程,包括软件过程的定义、监控、管理和改进 软件开发环境是方法和工具的结合,软件工程管理学,计划管理 成本管理 人员组织 软件配置管理 质量管理 软件度量,软件工程要素,从项目管理看,自然涉及到人员与组织、成本、风险、软件配置项、基线、质量等要素 从技术看,会涉及到设计模式、编程语言、开发平台、网络、通用组件、中间件、接口、数据库、人机界面、服务器、客户端等要素 总体上看,有软件质量、标准、过程、方法、技术、工具、团队等主要因素,流程、方法和工具,基本要素,软件工程 思想 流程 方法 工具 最佳实践,思想,流程,方法,工具,最佳实践,SWEBOK
12、实施三阶段,草人阶段( 1997年5月 )产生软件工程本体知识指南的雏型,主要是为该指南确定恰当的组织结构。 石人阶段( 2001年4月18日),草稿完成、进入试用阶段, SWEBOK 0.95版的发布标志着该阶段结束。 铁人阶段( 2004年),从正式版本1.0版开始到现在,包括最新的2004版本,10个知识域,软件需求 (Software Requirements) 软件设计 (Software Design) 软件构造 ( Software Construction) 软件测试 (Software Testing ) 软件维护 (Software Maintenance) 软件配置管理
13、(Software Configuration Management) 软件工程管理 (Software Engineering Management) 软件工程过程 ( Process) 软件工程工具和方法 ( Tool and Method) 软件质量 (Software Quality,知识体系的构成,知识域及其子域,本章内容,1.1 软件危机 1.2 软件的问题在哪里? 1.3 软件工程的诞生 1.4 软件工程的命题 1.5 软件工程知识体系 1.6 现代软件工程,http:/ 现代软件工程,1.6.1 开源软件运动 1.6.2 SaaS 1.6.3 现代软件工程的基本思想,http:
14、/ OReilly and Richard Stallman Richard Stallman is an activist in the FREE SOFTWARE MOVEMENT(FSM), which he founded in 1983. OPEN SOURCE MOVEMENT split off from FSM in 1998.,开源运动 (19982008),OpenWisdom = Open Source = Community = Share,Sendmail,开源软件产品,CVS,开源软件的特点,日常管理成本则被最小化 开源软件的设计,努力提取其共性而形成参考体系结构,
15、并使其易于移植。 核心小组成员及其责任分配是自发形成的,并不是硬性指派产生。 非正式交流(如邮件列表、论坛等)在开源软件开发的活动中发挥着积极的重要作用 开源项目用户的参与度高 并不刻意遵循特定的软件工程方法和过程 采取独特的、灵活的方式来解决标、资源配置和进度安排等问题,,开源软件开发的经验,早发布、常发布、听取用户的建议。 把用户当做协作开发者和测试人员 精妙的数据结构和笨拙的代码所构成的组合肯定好于笨拙的数据结构和精妙的代码。 最好的设计是最精简的设计 好的程序员知道如何写代码,伟大的程序员知道重用或重构代码,SaaS,Software-as-a-Service的简称 新的软件应用模式
16、厂商统一部署应用软件 客户按需获得服务,SaaS服务,EssUP的八大过程,现代软件工程的基本思想,让过程作为指南,而不是“警察” 过程等于一组实践,不等于惯例 精益概念,摒弃复杂的公式化元模型,取而代之的是简单的、可感知的分类法。 简炼的表示方法,使用卡片和指南表来提供实践及相关工件的一致、简单的解释 专业人员是知识的主体 开放的和可扩展的,小结,只有技术路线、项目管理和质量管理的有机结合,一个软件工程项目才能有序、有计划、高质量地完成 工程需要规范和范型,需要建立相对应的标准 要系统、彻底地解决软件工程问题,需要借助系统工程学、管理学、行为组织学、数学等多个学科的帮助,Q & A,http:/