内容提供商:北京旋信科技有限公司领先的服务外包人才解决方案提供商软件测试基础知识(软件工程概述)(实训指导)内容提供商:北京旋信科技有限公司一、本课程学习目的消除错误地认识学习软件工程基本理论学习主流的软件开发方法熟悉软件开发过程掌握软件开发全过程中的各重要阶段的任务及相关描述方法;如何分析问题并设计出合理的解决方案如何保证软件质量培养软件工程师的基本素质2内容提供商:北京旋信科技有限公司可执行部分不可执行部分文档1文档2文档3一、软件的定义、特点1软件的定义程序+数据+文档与计算机系统操作有关的程序、数据以及任何与之相关的文档的集合。程序3内容提供商:北京旋信科技有限公司一、软件的定义、特点1软件的定义:什么是程序(1/2):程序:由程序设计语言所描述的、能为计算机所识别、理解和处理的语句序列程序例子Main(){inti,j;//变量定义charStr[10];i=i+j;//语句说明……}4内容提供商:北京旋信科技有限公司一、软件的定义、特点1软件的定义:什么是程序(2/2)程序设计语言具有良好、严格语法和语义目前程序设计语言主要有以下几种类型面向机器:如汇编语言、机器语言等面向过程:如Fortran,Pascal,C等等面向对象:如Java等等面向问题:如结构化查询语言SQL等等5内容提供商:北京旋信科技有限公司一、软件的定义、特点1软件的定义:什么是文档:文档:记录软件开发活动和阶段性成果、理解软件所必需的阐述性资料需求分析文档、软件设计文挡、用户文档等编写文档目的促进对软件的开发,管理和维护;便于各种人员(用户,开发人员)的交流6内容提供商:北京旋信科技有限公司一、软件的定义、特点2软件的特点不会老化逻辑产品(智力,无形)维护困难和复杂(完善,纠错,…...)生产只需复制软件开发性质如成本、进度等难以估计软件的开发更加依赖于开发人员的业务素质、智力、人员的合作、组织和管理7内容提供商:北京旋信科技有限公司二、软件的发展过程1、20世纪50年代—60年代初:程序设计阶段特点:个体化;只有程序清单;以硬件发展为主2、20世纪60年代初—70年代初:程序系统阶段特点:作坊式;软件数量剧增;软件维护费用惊人;提出“软件工厂”概念;出现软件危机3、70年代—90年代:软件工程阶段软件成本剧增;硬件技术(微电子学)日趋成熟;软件工程时代4、90年代至今:现代信息技术飞速发展(并行计算机处理、三层处理模式、数据仓库、多媒体技术、网络技术、电子商务等)称为:网络时代8内容提供商:北京旋信科技有限公司三、软件危机1、软件危机定义:软件在开发和维护过程中遇到的一系列问题困扰学术界和工业界用户对软件开发缺乏信心软件开发的高投入和高风险Crisis!9内容提供商:北京旋信科技有限公司三、软件危机2、软件危机的表现(1of3)成本高IBM360OS,5000多人年,耗时4年(1963-1966),花费2亿多美元美国空军:1955年软件占总费用(计算机系统)的18%,70年60%,85年达到85%美国全球军事指挥控制系统,硬件1亿美元,软件高达7.2亿美元计算机软件和硬件费用比010203040506070809060年代80年代计算机软件计算机硬件10内容提供商:北京旋信科技有限公司三、软件危机2、软件危机的表现(2of3)软件质量得不到保证软件应用面的扩大:科学计算、军事、航空航天、工业控制、企业管理、办公、家庭软件越来越多的应用于安全犹关(safetycritical)的系统,对软件质量提出更高的要求80年代欧洲亚丽安娜火箭的发射失败,原因是软件错误美国阿托拉斯火箭的发射失败,原因是软件故障英国1986年开发的办公室信息系统Folios经4年,因性能达不到要求,1989年取消日本第5代机因为软件问题在投入50亿美元后于1993年下马由于软件质量问题导致失败的软件项目非常多11内容提供商:北京旋信科技有限公司三、软件危机2、软件危机的表现(3of3)进度难以控制项目延期比比皆是由于进度问题而取消的软件项目较常见只有一小部分的项目能够按期完成维护非常困难软件维护的多样性软件维护的复杂性软件维护的副作用12内容提供商:北京旋信科技有限公司三、软件危机3、软件危机包含两方面问题一、如何开发软件,以满足不断增长,日趋复杂的需求;二、如何维护数量不断膨胀的软件产品。4、软件危机产生的原因逻辑产品,不同于物理产品复杂性高•逻辑产品,逻辑复杂性,远高于硬件复杂性•软件的复杂性随规模呈指数级上升规模大•应用扩大,代码量,1000万行,仍在不断膨胀影响软件生产率和质量的因素比较复杂•人员的能力和水平•团队合作缺乏有效、系统原理、原则、方法和工具的指导和辅助:13内容提供商:北京旋信科技有限公司三、软件危机5、对软件开发的深层次认识:开发一个具有一定规模和复杂性的软件系统与编写一个简单的程序不一样正如建设一个平房和高楼大厦建造房屋的过程确定和分析需求房子的总体设计(建筑平面图和建筑透视图)房子的详细设计(建筑平面图的细化以及规格说明)识别并设计房子的组成部分建造房子的每一个组成部分测试房子的每一个组成部分把房子的各个部分集成在一起,在住户搬进来之前作最后的修改大型、复杂软件系统的开发是一项工程,必须按照工程化的方法组织软件的生产和管理,必须经过分析、设计、实现、测试、维护等一系列软件过程和活动14内容提供商:北京旋信科技有限公司6、解决危机的技术途径20世纪60年代爆发,然而实际上软件危机随着计算机软件的产生而产生,只是在此之前其问题的严重性没有引起人们的关注和重视提出有效的方法和工具支持软件开发1968年提出软件工程概念和思想20世纪70年代的结构化软件开发方法20世纪80年代的面向对象的软件开发方法新的技术:软件重用、快速原型、需求工程典型技术:COM,Java,C++,J2EE,.Net,….支撑工具和环境:Jbuilder,VisualStudio,WebLogic,…三、软件危机15内容提供商:北京旋信科技有限公司三、软件危机7、技术手段不能完全解决软件危机到了20世纪90年代,软件危机依然存在,甚至更为严重应用变得越来越大和复杂,技术变得更加力不从心错误的观念“只要有好的软件开发方法和工具就能高效率地开发出高质量的软件”16内容提供商:北京旋信科技有限公司三、软件危机8、解决危机的管理途径问题出在哪里?20世纪80年代末,美国工业界开始认识到管理的重要性美国的一项研究表明,70%的项目由于管理不善导致难以控制进步、成本和质量;进一步的研究发现:管理是影响软件项目成功开发的全局性因素,而技术只影响局部如果软件开发组织不能对软件项目进行有效管理,就不能充分发挥软件开发方法和工具的潜力,也就不能高效率地开发出高质量的软件产品17内容提供商:北京旋信科技有限公司四、软件工程的提出1解决软件危机?硬件发展?开发人员增加?软件开发工具的发展?软件工程!由于认识到软件的设计、实现、维护和传统的工程规则有相同的基础。1967年NATO的研究组织首次提出“软件工程”1968年NATO软件工程会议正式提出“软件工程”概念1968-至今,40余年18内容提供商:北京旋信科技有限公司四、软件工程的提出2、软件工程定义1968年NATO(北大西洋公约组织)会议上首次提出软件工程:给出了软件工程的早期定义:软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而建立和使用的好的工程原则。(强调软件工程的目标)IEEE:软件工程是(1)将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中;(2)(1)中所述方法的研究。计算机科学技术百科全书:所谓软件工程就是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最先进的技术方法结合起来。19内容提供商:北京旋信科技有限公司五、软件工程的发展1、传统软件工程管理:希望实现软件开发过程的工程化。这方面最为著名的成果就是提出了大家都很熟悉的“瀑布式”生命周期模型。它是在60年代末“软件危机”后出现的第一个生命周期模型。如下所示:分析→设计→编码→测试→维护后来,又有人针对该模型的不足,提出了快速原型法、螺旋模型、喷泉模型等对“瀑布式”生命周期模型进行补充。现在,它们在软件开发的实践中被广泛采用。认识到了文档的标准以及开发者之间、开发者与用户之间的交流方式的重要性。方法:侧重与对软件开发过程中分析、设计的方法的研究。这方面的重要成果就是在70年代风靡一时的结构化开发方法,即PO(面向过程的开发或结构化方法)以及结构化的分析、设计和相应的测试方法。20内容提供商:北京旋信科技有限公司六、软件工程的发展2、现代软件工程方法:面向对象的分析、设计方法(OOA和OOD)的出现使传统的开发方法发生了翻天覆地的变化。随之而来的是面向对象建模语言(以UML为代表)、软件复用、基于组件的软件开发等新的方法和领域。管理:从企业管理的角度提出的软件过程管理。即关注于软件生存周期中所实施的一系列活动并通过过程度量、过程评价和过程改进等涉及对所建立的软件过程及其实例进行不断优化的活动使得软件过程循环往复、螺旋上升式地发展。其中最著名的软件过程成熟度模型是美国卡内基梅隆大学软件工程研究所(SEI)建立的CMM(CapabilityMaturityModel),即能力成熟度模型。21内容提供商:北京旋信科技有限公司3、软件工程三要素软件程是一种层次化的技术。包含了一个观点,和三要素,如下图:工具+方法+过程工具方法过程质量焦点软件工程包括两方面内容:软件开发技术包括软件开发方法学、软件工具和软件工程环境。软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。软件工程技术有两个明显的特点:第一,强调规范化。第二,强调文档化。22内容提供商:北京旋信科技有限公司六、克服软件危机的途径消除错误的概念和做法推广使用成功的开发技术和方法使用软件工具和软件工程支持环境加强软件管理23内容提供商:北京旋信科技有限公司七、软件工程的基本原理严格按照软件生命周期各阶段的计划进行管理。坚持阶段评审实施严格的产品控制开发小组的成员应该少而精结果应能清楚地审查认识不断改进软件工程实践的必要性24内容提供商:北京旋信科技有限公司八、软件工程的目标生产具有正确性、可用性以及价格合宜的产品正确性反映软件产品实现相应功能规约的程度;可用性反映软件的基本结构、实现及其文档为用户可用的程度;价格合宜反映软件开发与运行的总代价满足用户要求的程度。25内容提供商:北京旋信科技有限公司五、本课程的学习目的1、了解软件工程的基本思想和理论;2、掌握软件开发全过程中的主流技术和方法;26