软件与软件工程介绍.ppt
第1部分 软件工程基础,第1章 软件及软件工程介绍,1.1 软件与软件危机,软件的作用具有产品和产品生产载体的双重作用。作为产品,软件显示了由计算机硬件体现的计算能力,扮演着信息转换的角色:产生、管理、查询、修改、显示或者传递各种不同的信息。作为产品生产的载体,软件提供了计算机控制(操作系统)、信息通信(网络),以及应用程序开发和控制的基础平台(软件工具和环境)。,1.1 软件与软件危机,软件的概念 虽然软件对于现代的人并不陌生,但很多人对于软件的理解并不准确,“软件就是程序,软件开发就是编程序”的这种错误观点仍然存在。,什么是软件?,1.1 软件与软件危机,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。程序是按事先设计的功能和性能要求执行的指令序列。数据是使程序能正常操纵信息的数据结构。文档是与程序开发,维护和使用有关的图文材料。,1.1 软件与软件危机,软件的特性,(1)形态特性:软件是无形的、不可见的逻辑实体。度量常规产品的几何尺寸、物理性质和化学成分对它却是毫无意义的。(2)智能特性:软件是复杂的智力产品,它的开发凝聚了人们的大量脑力劳动,它本身也体现了知识实践经验和人类的智慧,具有一定的智能。它可以帮助我们解决复杂的计算、分析、判断和决策问题。,(3)开发特性:尽管已经有了一些工具(也是软件)来辅助软件开发工作,但到目前为止尚未实现自动化。软件开发中仍然包含了相当份量的个体劳动,使得这一大规模知识型工作充满了个人行为和个人因素。(4)质量特性:目前还无法得到完全没有缺陷的软件产品。,1.1 软件与软件危机,(5)生产特性:与硬件或传统的制造业产品的生产完全不同,软件一旦设计开发出来,如果需要提供多个用户,它的复制十分简单,其成本也极为有限。(6)管理特性:由于上述的几个特点,使得软件的开发管理显得更为重要,也更为独特。,1.1 软件与软件危机,(7)环境特性:软件的开发和运行都离不开相关的计算机系统环境,包括支持它的开发和运行的相关硬件和软件。软件对于计算机系统的环境有着不可摆脱的依赖性。(8)维护特性:软件投入使用以后需要进行维护,但这种维护与传统产业产品的维护概念有着很大差别。,1.1 软件与软件危机,(9)废弃特性:与硬件不同,软件并不是由于被“用坏”而被废弃的。(10)应用特性:软件的应用极为广泛,如今它已渗入国民经济和国防的各个领域,现已成为信息产业、先进制造业和现代服务业的核心,占据了无可取代的地位。,1.1 软件与软件危机,软件危机暴发于上个世纪六十年代末。主要表现为:软件的发展速度远远滞后于硬件的发展速度,不能满足社会日益增长的软件需求。软件开发周期长、成本高、质量差、维护困难。,1.1 软件与软件危机,软件危机,典型例子:美国IBM公司在1963年至1966年开发的IBM 360机的操作系统。这个项目的负责人事后总结了他在组织开发过程中的沉痛教训时说:正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深。最后无法逃脱灭顶的灾难,程序设计工作正像这样一个泥潭,一批批程序员被迫在泥潭中拼命挣扎,谁也没有料到竟会陷入这样的困境,1.1 软件与软件危机,具体来说,软件危机主要有以下一些典型表现:对软件开发成本和进度的估计常常很不准确。用户对“已完成的”软件系统不满意的现象经常发生。软件产品的质量往往靠不住。软件常常是不可维护的。软件通常没有适当的文档资料。软件成本在计算机系统总成本中所占的比例逐年上升。软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。,1.1 软件与软件危机,除了软件本身的特点,软件危机发生的主要原因有:缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定。软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。软件开发过程不规范。如,没有真正了解用户的需求就开始编程序。随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。缺少有效的软件评测手段,提交用户的软件质量不能完全保证。,1.1 软件与软件危机,彻底消除“软件就是程序”的错误观念。充分认识到软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。推广和使用在实践中总结出来的开发软件的成功技术、方法和工具。按工程化的原则和方法组织软件开发工作。,如何摆脱软件危机?,1.1 软件与软件危机,1.2 软件工程及其基本原理,软件工程的概念,为了克服软件危机,1968年10月在北大西洋公约组织(NATO)召开的计算机科学会议上,Fritz Bauer首次提出“软件工程”的概念,试图将工程化方法应用于软件开发。在NATO会议上,Fritz Bauer对软件工程的定义是:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”,1993年IEEE给出的定义:“软件工程是:把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;研究中提到的途径。”。,1.2 软件工程及其基本原理,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好技术结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。,1.2 软件工程及其基本原理,1.2 软件工程及其基本原理,软件工程的目标,软件工程的目标是运用先进的软件开发技术和管理方法来提高软件的质量和生产率,也就是要以较短的周期、较低的成本生产出高质量的软件产品,并最终实现软件的工业化生产。,1.2 软件工程及其基本原理,软件的质量特性:功能性、可靠性、可使用性、效率、可维护性和可移植性。功能性是指软件所实现的功能达到它的设计规范和满足用户需求的程度;可靠性是指在规定的时间和条件下,软件能够正常维持其工作的能力;可使用性是指为了使用该软件所需要的能力;效率是指在规定的条件下用软件实现某种功能所需要的计算机资源的有效性;可维护性是指当环境改变或软件运行发生故障时,为了使其恢复正常运行所做努力的程度;可移植性是指软件从某一环境转移到另一环境时所做努力的程度。,1.2 软件工程及其基本原理,质量目标之间的关系,(1)关注大型软件的构造(2)中心课题是控制复杂性(3)软件经常变化(4)开发软件的效率非常重要(5)和谐地合作是开发软件的关键(6)软件必须有效地支持它的用户(7)在软件工程领域中是由一种文化背景的人替具有另一种文化背景的人创造产品,1.2 软件工程及其基本原理,软件工程的本质特性,(1)按软件生存周期分阶段制订计划并认真实施(2)坚持进行阶段评审(3)坚持严格的产品控制(4)使用现代软件开发技术(5)明确责任(6)用人少而精(7)不断改进开发过程,1.2 软件工程及其基本原理,软件工程的基本原理,1.3 软件生命周期,概念 软件也有一个孕育、诞生、成长、成熟和衰亡的生存过程,我们称这个过程为软件生命周期或软件生存期。软件生存期由软件定义、软件开发和运行维护3个时期组成,每个时期又可划分为若干个阶段。,1.3 软件生命周期,软件定义时期 主要任务是解决“做什么”的问题,即确定工程的总目标和可行性;导出实现工程目标应使用的策略及系统必须完成的功能;估计完成工程需要的资源和成本;制订工程进度表。通常又分为3个阶段:问题定义、可行性研究和需求分析。,1.3 软件生命周期,软件开发时期 主要任务是解决“如何做”的问题,即具体设计和实现在前一个时期定义的软件。由概要设计、详细设计、编码和测试4个阶段组成。,1.3 软件生命周期,软件运行维护时期 主要任务是使软件持久地满足用户的需要,通常有4类维护活动:改正性维护,也就是诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件以适应环境的变化;完善性维护,即根据用户的要求改进或扩充软件,使它更完善;预防性维护,即修改软件为将来的维护活动预先做准备。,1.3 软件生命周期,开发过程中的典型文档 软件需求规格说明书:描述将要开发的软件做什么。项目计划:描述将要完成的任务及其顺序,并估计所需要的时间及工作量。软件测试计划:描述如何测试软件,使之确保软件应实现规定的功能,并达到预期的性能。软件设计说明书:描述软件的结构,包括概要设计及详细设计。用户手册:描述如何使用软件。,1.3 软件生命周期,各个阶段所要完成的基本任务问题定义与可行性研究 本阶段要回答的关键问题是“到底要解决什么问题?在成本和时间的限制条件下能否解决问题?是否值得做?”(2)需求分析 本阶段要回答的关键问题是“目标系统应当做什么?”(3)软件设计 设计是软件工程的技术核心。本阶段要回答的关键问题是“如何实现目标系统?”,1.3 软件生命周期,各个阶段所要完成的基本任务(4)程序编码和单元测试 本阶段要解决的问题是“正确地实现已做的设计”,即“如何编写正确的、可维护的程序代码?”(5)集成和系统测试 测试是控制软件质量的重要手段,本阶段的主要任务是做集成测试和系统测试。(6)软件运行和维护 已交付的软件投入正式使用,便进入运行阶段。这一阶段可能持续若干年。软件在运行中可能由于多方面的原因,需要对它进行修改。,1.4 软件工程方法学,概念软件工程包含技术和管理两方面的内容,是技术和管理紧密结合所形成的工程学科。通常将软件开发全过程中使用的一整套技术方法的集合称为方法学(methedology),也称为范型(paradigm)。目前使用最广泛的软件工程方法学:传统方法(结构化方法),面向对象方法。,1.4 软件工程方法学,三要素:方法、工具和过程。软件工程方法为软件开发提供了“如何做”的技术;软件工具为软件工程方法提供了自动的或半自动的软件支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务框架,它规定了完成各项任务的工作步骤。,1.4 软件工程方法学,结构化方法 也称为生命周期方法学或结构化范型。将软件生命周期的全过程依次划分为若干个阶段,采用结构化技术来完成每个阶段的任务。特点:(1)强调自顶向下顺序地完成软件开发的各阶段任务;(2)结构化方法要么面向行为,要么面向数据,缺乏使两者有机结合的机制。,1.4 软件工程方法学,面向对象方法是将数据和对数据的操作紧密地结合起来的方法。软件开发过程是多次反复迭代的演化过程。面向对象方法在概念和表示方法上的一致性,保证了各项开发活动之间的平滑过渡。对于大型、复杂及交互性比较强的系统,使用面向对象方法更有优势。,1.5 软件工程知识体系及知识域介绍,软件工程教育(3个历史时期)(1)1978年以前:软件工程教育以计算机专业的一门孤立的课程形式存在。(2)19781988年期间:早期的研究生学位教育,开始建立软件工程专业的研究生学位教育项目。(3)1988年以后:快速发展的研究生学科教育,使软件工程的理论快速发展,其中,卡内基梅隆大学软件工程研究所(SEI)的影响不可忽视。,1.5 软件工程知识体系及知识域介绍,软件工程知识体软件工程已从计算机科学与技术中脱离出来,逐渐形成了一门独立的学科。对其知识体系的研究从20世纪90年代初就开始了。标志是美国Embry-Riddle航空大学计算与数学系Thomas B.Hilburn教授的“软件工程知识体系指南”(Guide to Software Engineering Body of Knowledge,SWEBOK)研究项目。,1.5 软件工程知识体系及知识域介绍,软件工程知识体系指南的目标(1)促使软件工程本体知识成为世界范围的共识。(2)澄清软件工程与其他相关学科,如与计算机科学、项目管理、计算机工程以及计算机数学之间的关系,并且确定软件工程学科的范围。(3)反映软件工程学科内容的特征。(4)确定软件工程本体知识的各个专题。(5)为相应的课程和职业资格认证材料的编写奠定基础。,1.5 软件工程知识体系及知识域介绍,软件工程知识体系指南的内容 SWEBOK指南将软件工程知识体系划分为10个知识域(knowledge areas,KA),分为两类过程。一类是开发与维护过程,包括软件需求、软件设计、软件构造、软件测试和软件维护;另一类是支持和组织过程,包括软件配置管理、软件工程管理、软件工程过程、软件工程工具与方法和软件质量。每个知识域还可进一步分解为若干论题。,1.5 软件工程知识体系及知识域介绍,软件工程知识体系指南的内容,1.5 软件工程知识体系及知识域介绍,每个知识域又可分解为若干子知识域,如表所示。,1.6 软件产业的形成与发展,我国软件产业的形成 软件产业是以开发、研究、经营、销售软件产品或软件服务为主的企业组织及其在市场上的相互关系的集合。软件产业是信息产业的核心,是国民经济基础性、战略性产业,直接关系国家政治、经济和社会的安全。目前我国软件产业链已经初步形成,在其形成的过程中,我国的软件产业主要经历了萌芽期、起步期、进入期和发展期4个阶段。进入了2000年以后,中国的软件企业开始进入网络软件时期。,1.6 软件产业的形成与发展,全球软件产业的发展 到目前为止,全球软件产业的发展已经经历了比较完整的5代。第一代:早期专业的服务公司(19491959年)第二代:早期软件产品公司(19591969年)第三代:强大的企业解决方案提供商的出现(19691981年)第四代:客户大众市场软件(19811994年)第五代:互联网增值服务(1994年至今),1.6 软件产业的形成与发展,软件产业的发展模式 目前得到公认的产业发展模式有美国模式、印度模式、爱尔兰模式、日本模式等。美国模式技术与服务领导型 美国的软件产业主要由3个部分组成。(1)以商业销售或租赁为目的,设计和生产软件产品的公司。(2)开发因特网和电子商务技术,提供网上信息和服务的公司。(3)专为计算机提供软件服务的公司。,1.6 软件产业的形成与发展,软件产业的发展模式印度模式国际加工服务型 印度的软件产业属于外向型的产业,以外包服务为主,软件企业对于促进印度的出口起了十分重要的作用。爱尔兰模式生产本地化型 根据欧洲市场20多种不同语言的实际需要,爱尔兰将自己定位为美国软件公司产品欧洲化版本的加工基地,吸引跨国软件公司和国际知名学府在国内建立研发和分支机构,实现国外软件产品本地化。,1.6 软件产业的形成与发展,软件产业的发展模式日本和欧洲模式嵌入式系统开发型 日本以硬件带动软件发展,其软件属于嵌入式的。松下、东芝、日立等跨国公司都有自己的软件公司,他们研发的软件产品往往随着企业的各类产品出口世界各地。德国模式企业级应用及自主研发型 德国软件产业可分为“主要软件企业”和“辅助软件企业”两类。第一类除从事数据处理服务的企业外,还包括数据处理设备制造商。第二类是指机械制造、电子、通信、汽车、金融服务等行业的企业。,1.6 软件产业的形成与发展,软件工程在软件产业中的作用 一方面,软件产业离不开软件工程理论及标准的指导;另一方面,软件产业的发展需要大量软件工程人才。软件工程理论是人们从长期的软件工程实践中总结出来的,对软件开发起着重要的指导作用。软件产业的发展需要大量的软件工程人才。实际情况已经证明,软件产业的竞争不仅是技术和资本的竞争,从根本上来讲是人才的竞争。,小结,对软件及软件工程进行了概要介绍介绍了软件的作用、概念、特性及软件危机的主要表现;对软件工程的概念、软件工程的基本原理以及软件工程知识体系进行了简要介绍;最后介绍了软件产业的形成与发展以及软件工程在软件产业中的重要性。,小结,介绍了软件生命周期方法软件生命周期方法将软件生命周期划分为若干个相对独立的阶段,每个阶段都完成一定的任务;基本上按顺序完成各个阶段的任务;在完成每个阶段的任务时采用结构化技术和适当的软件工具;在每个阶段结束之前都进行严格的技术复审和管理复审。软件生命周期方法使软件开发结束了之前的混乱状态。,Thats All!,