软件工程概述

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第一章软件工程概述1.1软件的发展历史1.2软件工程与软件过程1.3软件开发的基本策略1.4软件的错误观点2019/10/9计算机科学与工程学院12019/10/9计算机科学与工程学院21.1软件和软件危机1.早期阶段——程序设计阶段在计算机发展的早期阶段,人们认为计算机的主要用途是快速计算,软件编程简单,不存在什么系统化的方法,开发没有任何管理,程序的质量完全依赖于程序员个人的技巧。一、发展历史2.第二阶段--程序系统阶段从60年代中期到70年代末期多用户系统引入了人机交互的新概念,实时系统能够从多个源收集、分析和转换数据,从而使得进程的控制和输出的产生是以毫秒而不是分钟来进行,产生了第一代数据库管理系统出现了软件产品和“软件作坊”的概念,设计人员开发程序不再像早期阶段那样只为自己的研究工作需要,而是为了用户更好地使用计算机。被开发的软件可以在较宽的范围内使用。主机、微机上的程序可以有数百上千的用户。出现了“软件危机”问题。采用“软件工程”的方法来解决“软件危机”问题。2019/10/9计算机科学与工程学院33.第三阶段—软件工程阶段1970年代中期--1980年代末期分布式系统极大地提高了计算机系统的复杂性,网络的发展对软件开发提出了更高的要求,特别是微处理器的出现和广泛应用,孕育了一系列的智能产品。软件开发技术的度量问题受到重视,最著名的有软件工作量估计COCOMO模型、软件过程改进模型CMM等。2019/10/9计算机科学与工程学院4CMM——SoftwareCapabilityMaturityModel软件能力成熟度模型4.第四阶段强大的桌面系统和计算机网络迅速发展的时期计算机体系结构由中央主机控制方式变为客户机/服务器方式专家系统和人工智能软件进入了实际应用,出现了并行计算和网络计算的研究,面向对象技术在许多领域迅速取代了传统软件开发方法软件从个性化的程序变为工程化的产品,从“软件=程序”发展为“软件=程序+数据+文档”。软件的需求成为软件发展的动力,软件工作的考虑范围不再只顾及程序的编写,而是涉及到软件的整个生命周期。2019/10/9计算机科学与工程学院52019/10/9计算机科学与工程学院6软件的发展历史图195019601970198019902000面向批处理有限的分布自定义软件多用户实时数据库软件产品分布式系统嵌入“智能”低成本硬件消费者的影响强大的桌面系统面向对象技术专家系统人工神经网络并行计算网络计算机早期第三阶段第四阶段第二阶段二、软件的概念和特点1.软件的概念,有3层含义:(1)能够完成预定功能和性能的可执行指令(program);(2)使得程序能够适当地操作信息的数据结构(data);(3)描述程序的操作和使用的文档(document)。2019/10/9计算机科学与工程学院72019/10/9计算机科学与工程学院8(1)软件是逻辑的,而不是物理的产品。(2)软件是由开发或工程化而形成的,没有明显的制造过程。软件成本集中于“开发”上,意味着软件项目不能像硬件制造项目那样来管理。(3)软件在运行和使用期间,不存在硬件那样的磨损和老化问题,但它存在退化问题,开发人员必须维护软件。2.软件具有以下不同的特点:2019/10/9计算机科学与工程学院9时间故障率生命初期磨损后硬件故障率的变化曲线时间故障率理想曲线实际曲线修改软件的故障率曲线2019/10/9计算机科学与工程学院10(4)大多数软件是自定的,而不是通过已有构件组装而成的。迄今为止,软件的开发尚未完全摆脱手工的方式。(5)软件成本相当昂贵。(6)软件本身是复杂的。软件比任何其他人类制造的结构更复杂,甚至硬件的复杂性和软件相比也是微不足道的。软件本质上的复杂性是软件产品难以理解,影响软件过程的管理,并使维护过程十分复杂。三、软件的分类2019/10/9计算机科学与工程学院11给出一个科学的、统一的、严格的计算机软件分类标准是不现实的。但对软件的类型进行必要的划分,对于开发和维护软件是很有价值的。因此,有必要从不同角度对计算机软件做适当的分类。1.按软件的功能进行划分:系统软件:与硬件紧密结合的软件操作系统数据库管理系统设备驱动程序通信处理程序等2019/10/9计算机科学与工程学院12•文本编辑程序•文件格式化程序•程序库系统•支持需求分析、设计、实现、测试和支持管理的软件支撑软件:协助用户开发软件的工具性软件商业数据处理软件工程与科学计算软件计算机辅助设计/制造软件系统仿真软件智能产品嵌入软件医疗、制药软件事务管理、办公自动化软件计算机辅助教学软件2019/10/9计算机科学与工程学院13应用软件:为特定领域内、特定目的开发的软件2.按软件规模进行划分:类别参加人员数研制期限源程序行数微型11~4周0.5k小型11~6月1k~2k中型2~51~2年5k~50k大型5~202~3年50k~100k甚大型100~10004~5年1M(=1000k)极大型2000~50005~10年1M~10M2019/10/9计算机科学与工程学院14实时处理软件分时软件交互式软件批处理软件2019/10/9计算机科学与工程学院153.按软件工作方式划分:4.按软件服务对象的范围划分:项目软件:受某个特定用户或机构的委托,在合同的约束下靠罚机构开发的软件。产品软件:软件开发机构开发出来直接提供给市场的。2019/10/9计算机科学与工程学院16四、软件危机软件危机定义:软件在开发和维护过程中遇到的一系列严重问题。软件危机包含两层含义:•如何开发软件•如何维护数量不断膨胀的已有软件2019/10/9计算机科学与工程学院172019/10/9计算机科学与工程学院181.软件危机的表现软件危机爆发于20世纪60年代末期,虽然人们一直致力于发现解决危机的方法,但是软件危机至今依然困扰着我们,并没有一种方法可以解决。软件危机的具体表现如下:(1)软件开发的进度难以控制,经常出现经费超预算、完成期限一再拖延的现象。2019/10/9计算机科学与工程学院19(2)软件需求在开发初期不明确,导致矛盾在后期集中暴露,从而对整个开发过程带来灾难性的后果。(3)由于缺乏完整规范的资料,加之软件测试不充分,从而造成软件质量低下,运行中出现大量问题。(4)软件文档资料不完整、不合格图定性地描述了在不同时期引入同一个变动需要付出的代价的变化趋势。2019/10/9计算机科学与工程学院20(5)软件的可维护性差程序中的错误难以改正,程序不能适应硬件环境的改变,不能应用户要求增加新的功能。(6)软件价格昂贵,软件成本在计算机系统总成本中所占的比例逐年上升2019/10/9计算机科学与工程学院212.危机的原因①用户对软件需求的描述不精确,可能有遗漏、有二义性、有错误,甚至在软件开发过程中,用户还提出修改软件功能、界面、支撑环境等方面的要求。②软件开发人员对用户需求的理解与用户的本来愿望有差异,这种差异必然导致开发出来的软件产品与用户要求不一致。③大型软件项目需要组织一定的人力共同完成,多数管理人员缺乏开发大型软件系统的经验,而多数软件开发人员又缺乏管理方面的经验。各类人员的信息交流不及时、不准确、有时还会产生误解。2019/10/9计算机科学与工程学院22④软件项目开发人员不能有效地、独立自主地处理大型软件的全部关系和各个分支,因此容易产生疏漏和错误。⑤缺乏有力的方法和工具方面的支持,过分地依靠程序人员在软件开发过程中的技巧和创造性,加剧软件产品的个性化。⑥软件产品的特殊性和人智力的局限性,导致人们无力处理“复杂问题”。所谓“复杂问题”的概念是相对的,一旦人们采用先进的组织形式、开发方法和工具提高了软件的开发效率和能力,新的、更大的、更复杂的问题又摆在人们面前。2019/10/9计算机科学与工程学院233.克服危机的途径1968年秋季,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。由于认识到软件的设计、实现、维护和传统的工程规则有相同的基础,在那次会议上首次提出了“软件工程”(softwareengineering)这个概念。一、软件工程的概念2019/10/9计算机科学与工程学院241983年,IEEE(InstituteofElectrical&ElectronicEngineers,电气与电子工程师协会)给出了一个全面的定义:软件工程:是研究和应用如何以系统化的、规范的、可度量的方法去开发、运行和维护软件,即把工程化应用到软件上。1.2软件工程软件工程的根本在于提高软件的质量与生产率,最终实现软件的工业化生产。在“软件工程”的概念提出后的几十年里,各种有关软件的技术、思想、方法和概念层出不穷,典型的包括结构化的方法、面向对象方法、软件开发模型和软件开发过程等,软件工程逐步发展为一门独立的科学。2019/10/9计算机科学与工程学院252019/10/9计算机科学与工程学院26软件工程是一种层次化的技术。包含了一个观点和三个要素,如下图:工具方法过程质量焦点2019/10/9计算机科学与工程学院27软件工程过程:是进行一系列有组织的活动,从而能够合理和及时地开发出计算机软件。过程定义了技术方法的采用、工程产品(包括模型、文档、数据、报告、表格等)的产生、里程碑的建立、质量的保证和变更的管理。三要素:质量观点:软件工程必须以有组织的质量保证为基础开发软件。2019/10/9计算机科学与工程学院28软件工程方法:为软件开发提供“如何做”的技术。它包括了项目计划、需求分析、系统设计、程序实现、测试与维护等一系列的任务。软件工程工具:为过程和方法提供自动的或半自动的支持。这些软件工具被集成起来,建立起一个支持软件开发的系统,称之为计算机辅助软件工程(CASE,ComputerAidedSoftwareEngineering)。CASE集成了软件、硬件和一个存放开发过程信息的软件工程数据库,形成了一个软件工程环境。二、软件工程学研究的目标2019/10/9计算机科学与工程学院29采用先进的软件工程方法,使质量、成本和生产率三者之间的关系达到最优的平衡状态。软件开发成本较低;软件功能能够满足用户的需求;软件性能较好;软件可靠性高;软件易于使用、维护和移植;能按时完成开发任务,并及时交付使用。三、软件工程学的原则2019/10/9计算机科学与工程学院30为了开发出高质量低成本的软件,在软件开发过程中必须遵循下列软件工程原则:1.抽象(abstraction)抽取事物最基本的特性和行为,忽略非基本的细节。采用分层次抽象的办法可以控制软件开发过程的复杂性,有利于软件的可理解性和开发过程的管理。2019/10/9计算机科学与工程学院312.信息隐藏(informationhiding)•将模块中的软件设计决策封装起来的技术。•按照信息隐藏的原则,系统中的模块应设计成“黑箱”,模块外部只能使用模块接口说明中给出的信息,如操作、数据类型等等。3.模块化(modularity)使程序有许多个逻辑上相对独立的模块组成。•模块(module)是程序中逻辑上相对独立的单元;•模块的大小要适中;•高内聚、低耦合。2019/10/9计算机科学与工程学院324.一致性(consistency)•整个软件系统(包括文档和程序)的各个模块均应使用一致的概念、符号和术语;•程序内部接口应保持一致;•软件与硬件接口应保持一致;•系统规格说明与系统行为应保持一致;•实现一致性需要良好的软件设计工具(如数据字典、数据库、文档自动生成与一致性检查工具等等)、设计方法和编码风格的支持。四、软件生存周期2019/10/9计算机科学与工程学院33软件生存周期:是指软件产品从考虑其概念开始到该软件产品交付使用,直至最终退役为止的整个过程,一般包括计划、分析、设计、实现、测试、集成、交付、维护等阶段。2019/10/9计算机科学与工程学院342019/1

1 / 58
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功