第一章软件工程学概述

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

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

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

资源描述

软件工程导论课名:软件工程教材:软件工程导论参考教材:1实用软件工程(第二版)2软件工程实践者的研究方法教学方式:授课课时:54目录第1章软件工程学概述第2章可行性研究第3章需求分析第4章形式化说明技术第5章总体设计第6章详细设计第7章实现第8章维护第9章面向对象方法学引论第10章面向对象分析第11章面向对象设计第12章面向对象实现第13章软件项目管理第1章软件工程学概述1.1软件综述1.2软件危机1.3软件工程1.4软件生命周期1.5软件过程1.1.1软件的发展1.程序设计阶段(20世纪50年代初-20世纪60年代中期)2.程序系统阶段(20世纪60年代中期-20世纪70年代末)3.软件工程阶段(20世纪70年代中期-20世纪80年代中期)4.第四阶段(20世纪80年代中期-至今)四个阶段典型技术比较阶段第一阶段第二阶段第三阶段第四阶段典型技术·面向批处理·有限的分布·自定义软件·多用户·实时·数据库·软件产品·分布式系统·嵌入“智能”·低成本硬件·消费者的影响·强大桌面系统·面向对象技术·专家系统·人工神经网络·并行计算·网络计算1.1.2软件的定义软件的定义如下:(1)在运行中能提供所希望的功能和性能的指令集。(2)使程序能够正确运行的数据结构。(3)描述程序研制过程、方法所用的文档。1.1.3软件的特点1.重视软件开发过程。2.软件不会磨损、老化,但维护比较复杂。3.软件的开发和运行经常受到计算机系统的限制,对计算机系统有不同程度的依赖性。4.软件的开发尚未完全摆脱手工的开发方式。5.软件的开发费用越来越高,成本相当昂贵。6.软件的开发过程复杂,需要在开发过程中进行管理。7.软件具有抽象性失效率时间磨合调整磨损用坏硬件失效率曲线失效率时间修改点实际曲线理想曲线软件失效率曲线1.2.1软件危机简介1.软件危机软件危机指的是软件开发和维护过程中遇到的一系列严重问题。软件危机包含以下两方面的问题:如何开发软件,怎样满足对软件的日益增长的需求;如何维护数量不断膨胀的已有软件。2.软件危机的主要表现(1)对软件开发成本和进度的估计常常很不准确。(2)用户对“已完成的”软件系统不满意的现象经常发生。(3)软件产品的质量往往靠不住。(4)软件常常是不可维护的。(5)软件通常没有适当的文档资料。(6)软件成本在计算机系统总成本中所占的比例逐年上升。(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。1.2.2产生软件危机的原因1.客观原因软件是计算机系统中的逻辑部件而不是物理部件,其显著特点是缺乏“可见性”,因此,管理和控制软件开发过程相当困难。此外,软件维护通常意味着改正或修改原有的设计,从而使得软件较难维护。规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。软件可能具有的状态数通常都是天文数字,无法完全预见软件可能遇到的每一种情况。2.主观原因由于早期阶段开发软件的个体化,使得许多软件工程师对软件开发和维护有不少糊涂认识,在实际工作中或多或少地采用了错误的方法。程序只是完整的软件产品的一个组成部分,一个软件产品必须由一个完整的配置组成。软件配置主要包括程序、文档和数据等成分。软件开发的不同阶段进行修改需要付出的代价是不相同的。引入同一变动付出的代价随时间变化的趋势软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。1.2.3消除软件危机的途径首先应该树立对计算机软件的正确认识。软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。软件开发应该是组织良好、管理严密、各类人员团结协作共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,并研究能更有效地开发软件的技术和方法。应该积极开发和使用计算机辅助软件工程(CASE)工具。1.3.1软件工程简介1.软件工程的定义软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。1968年在第一届NATO会议上给出了软件工程的一个早期定义:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”1993年IEEE进一步给出了一个更全面更具体的定义:“软件工程是:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。”2.软件工程的本质特性:软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品1.3.2软件工程的基本原理用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性1.3.3软件工程方法学通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。软件工程方法学包含3个要素:方法、工具和过程。其中,方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。1.传统方法学传统方法学也称为生命周期方法学或结构化范型。采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务。把软件生命周期划分成若干个阶段,然后顺序完成各阶段的任务。每阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。在每一个阶段结束之前都必须进行严格的技术审查和管理复审。2.面向对象方法学把对象(object)作为融合了数据及在数据上的操作的软件构件。也就是说,用对象分解取代了传统方法的功能分解。把所有对象都划分成类(class)。按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。对象彼此间仅能通过发送消息互相联系。1.4软件生命周期一个软件从定义到开发、使用和维护,直到最终被废弃,要经历一个漫长的时期,通常把这个时期称为生存周期。软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。软件生存周期的三大阶段:1.软件定义阶段软件定义时期的任务是:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又称为系统分析,由系统分析员负责完成。软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。(1)问题定义:问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。(2)可行性研究:这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”系统分析员需要在较抽象的高层次上进行的分析和设计过程。可行性研究的结果是使用部门负责人作出是否继续进行这项工程的决定的重要依据。(3)需求分析:是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典和简要的算法表示系统的逻辑模型。并用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书(specification)。2.软件开发阶段开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。(1)总体设计:这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”总体设计又称为概要设计。首先,应该设计出实现目标系统的几种可能的方案。软件工程师应该用适当的表达工具描述每种方案,分析每种方案的优缺点,并在充分权衡各种方案的利弊的基础上,推荐一个最佳方案。此外,还应该制定出实现最佳方案的详细计划。如果客户接受所推荐的方案,则应该进一步完成设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。(2)详细设计:详细设计阶段的任务就是把总体设计中提出的解决办法具体化,回答的关键问题是:“应该怎样具体地实现这个系统呢?”详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。(3)编码和单元测试:程序员应该根据目标系统的性质和实际环境,选取一种适当的高级程序设计语言(必要时用汇编语言),把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。(4)综合测试:这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。应该用正式的文档资料把测试计划、详细测试方案以及实际测试结果保存下来,作为软件配置的一个组成部分。3.运行维护阶段维护时期的主要任务是通过各种必要的维护活动使软件持久地满足用户的需要。具体地说,当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应该及时改进软件以满足用户的新需要。软件生存周期1.5软件过程过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。通常使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。生命周期包括:问题定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试、运行维护,8个阶段。1.瀑布模型在20世纪80年代之前,瀑布模型一直是惟一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型。传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。规定了软件生存周期的各个阶段如同瀑布流水,逐级下落,自上而下、相互衔接的固定次序。实际的瀑布模型按照瀑布模型开发软件,有下述的几个特点:阶段间具有顺序性和依赖性推迟实现的观点质量保证的观点优点:强迫开发人员采用规范的方法(例如,结构化技术);严格地规定了每个阶段必须提交的文档;每个阶段结束前必须正式进行严格的技术审查和管理复审。缺点:在可运行的软件产品交付给用户之前,用户只能通过文档来了解未来的产品是什么样的;开发人员和用户之间缺乏有效的沟通,很可能导致最终开发出的软件产品不能真正满足用户的需求。2.快速原型模型快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。通常,用户试用原型系统之后会提出许多修改意见,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用……一旦用户认为这个原型系统确实能做他们所需要的工作,开发人员便可据此书写规格说明文档,根据这份文档开发出的软件可以满足用户的真实需求。快速原型模型优点:使用这种软件过程开发出的软件产品通常能满足拥护的真实需求;软件产品的开发过程基本上是线性顺序过程3.增量模型增量模型也称为渐增模型,使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试

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

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

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

×
保存成功