《【大学课件】软件工程学.ppt》由会员分享,可在线阅读,更多相关《【大学课件】软件工程学.ppt(50页珍藏版)》请在三一文库上搜索。
1、软件工程学,中国科学技术大学网络学院,http:/ 目 录,第1章 软件工程学概述 第2章 系统分析 第3章 需求分析 第4章 软件设计方法 第5章 用户界面设计 第6章 编码,总 目 录,第7章 测试 第8章 软件维护 第9章 面向对象技术 第10章 软件质量管理 第11章 软件项目管理,第1章 软件工程学概述,1.1 什么是软件 1.2 软件危机 1.3 软件工程 1.4 软件生命周期 1.5 软件过程,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。 程序是按事先设计的功能和性能要求执行的指令序列 数据是使程序能正常操纵信息的数据结构 文档是与程序开
2、发,维护和使用有关的图文材料,1.1 什么是软件,软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性 软件的生产与硬件不同,在它的开发过程中没有明显的制造过程 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题,1.1.1 软件的特点,软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性 软件的开发至今尚未完全摆脱手工艺的开发方式 软件本身是复杂的 实际问题的复杂性 程序逻辑结构的复杂性 软件成本相当昂贵 相当多的软件工作涉及到社会因素,按软件的功能进行划分: 系统软件 操作系统 数据库管理系统 设备驱动程序 通信处理程序等,1.1.2软件的分类,支撑软件 文
3、本编辑程序 文件格式化程序 磁盘向磁带向数据传输的程序 程序库系统 支持需求分析、设计、实现、测试和支持管理的软件,应用软件 商业数据处理软件 工程与科学计算软件 计算机辅助设计制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件,按软件规模进行划分: 类别 参加人员数 研制期限 源程序行数 微型 1 14周 0.5k 小型 1 16月 1k2k 中型 25 12年 5k50k 大型 520 23年 50k100k 甚大型 1001000 45年 1M(=1000k) 极大型 20005000 510年 1M10M,按软件工作方式划分: 实时处
4、理软件 分时软件 交互式软件 批处理软件 按软件服务对象的范围划分: 项目软件 产品软件,通常把在计算机软件的开发与维护过程中所遇到的一系列严重问题笼统地称为软件危机。这些问题绝不仅仅是不能正常,运行的软件才具有的。实际上,几乎所有软件都不同程度地存在这些问题。 概括地说,软件危机包含下述两方面的问题: (1)如何开发软件以满足社会对软件日益增长的需求; (2)如何更有效地维护数量不断膨胀的已有软件。,1.2.1 软件危机简介,具体地说,软件危机主要有以下一些典型表现: (1) 对开发软件成本和进度的估计常常很不准确 (2) 经常出现用户对“已完成的”软件产品不满意的情况 (3) 软件产品的质
5、量往往达不到要求 (4) 软件往往没有适当的文档资料 (5) 软件成本在计算机系统总成本中所占的比例逐年上升 (6) 软件开发生产率提高的速度远远不能满足社会对软件产品日益增长的需求 鉴于软件危机周期长且难于预测,把它为“软件萧条”或“软件困扰”可能更恰当一些。,1. 客观原因 软件是计算机系统中的逻辑部件而不是物理部件,其显著特点是缺乏“可见性”,因此,管理和控制软件开发过程相当困难。此外,软件维护通常意味着改正或修改原有的设计,从而使得软件较难维护。 软件的另一个突出特点是规模庞大,而程序复杂性将随着程序规模增加以指数上升。软件可能具有的状态数通常都是天文数字,无法完全预见软件可能遇到的每
6、一种情况。,1.2.2 产生软件危机的原因,2. 主观原因 在计算机系统发展的早期阶段开发软件的个体化特点,使得许多软件工程师对软件开发和维护有不少糊涂认识,在实际工作中或多或少地采用了错误的方法,这是使软件问题发展成软件危机的主要原因。 错误的认识和做法主要表现为,忽视软件需求分析的重要性,认为软件开发就是写程序,轻视软件维护。 事实上,对用户的需求没有完整准确的认识就匆忙着手编写程序,是许多软件开发工程师失败的主要原因之一。,必须认识到,软件开发和维护要经历一个漫长的时期(称为软件生命周期),编写程序只是软件开发过程中的一个相对来说比次要的阶段。 另一方面还必须认识到,程序只是完整的软件产
7、品的一个组成部分,一个软件产品必须由一个完整的配置组成。软件配置主要包括程序、文档和数据等部分。 严酷的事实是,在软件开发的后期阶段引入一个变动比在早期引如同一个变动所需付出的代价高几百倍甚至上千倍。所谓软件维护,就是在软件开发工作结束后,在使用现场对软件进行修改,是极端艰巨复杂的工作,需要花费很大代价。由此可见,轻视软件维护是一个最大的错误。软件工程的一个重要目标就上提高软件的可维护性,减少软件维护的代价。,引入同一变动付出的代价随时间变化的趋势,首先应该树立对计算机软件的正确的认识。软件是程序、数据及文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当
8、地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。,1.2.3 消除软件危机的途径,软件开发应该是组织良好、管理严密、各类人员团结协作共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,并研究能更有效地开发软件的技术和方法。 应该积极开发和使用计算机辅助软件工程(CASE)工具。,总之,为了消除软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从技术和管理两方面研究如何更好地开发和维护软件的一门新兴的工程学科。,软件工程是指导计算机软件开发的维护的一门工程学科,该学科的目的是生产出能按期交付的、
9、在预算范围内的、满足用户需求的、质量合格的软件产品。,1.3 软件工程 1.3.1 软件工程简介,软件工程具有下述本质特性: 软件工程关注于大型程序的构造。 软件工程的中心课题是控制复杂性。 软件产品交付使用后仍然需要经常修改。 开发软件的效率非常重要。 开发人员和谐地合作是成功地开发软件的关键。 软件必须有效地支持它的用户。 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。,用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性,1.3.2 软件工程
10、的基本原理,软件工程方法为软件开发提供了 “如何做” 的技术 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境 软件工程过程定义了: 方法使用的顺序 要求交付的文档资料 为保证质量和适应变化所需要的管理 软件开发各个阶段完成的里程碑,1.3.3 软件工程方法学,概括地说,软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,通常把两个时期再进一步划分成若干个阶段。 软件定义时期的基本任务是:确定软件开发工程的总目标;研究该项目的可行性;分析确定客户对软件产品的需求;估算完成该项目所需的资源和成本,并且制定工程进度表。这个时期的工作称为系统分析,由系统分析员负责完成。
11、,1.4 软件生命周期,通常把软件定义时期进一步划分成问题定义、可行性研究和需求分析3个阶段。其中需求分析阶段应该完成的工作包括需求获取和需求分析两部分。揭示客户需求的过程称为需求获取或需求收集;一旦确定了最初的一系列需求,就应该进一步提炼和扩展这些需求,并用软件需求规格说明书把客户需求准确地记录下来,这个过程称为需求分析。,软件开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计(又称为结构设计);详细设计;编码和单元测试;综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。,运行维护时期的主要任务是,通过对已交付使用的软件做必要修改,使软件持久地满
12、足客户的需求。具体地说,当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应该及时改进或扩充软件以满足用户的新需求。通常对维护时期不再进一步划分阶段,但是每一个维护活动本质上都是一次压缩和简化了的定义和开发过程。,使用结构化范型开发软件时,软件生命周期各阶段中使用的概念及应完成的任务性质显著不同。需求分析阶段的基本任务是确定软件必须“做什么”,使用的概念主要是“功能”。设计阶段的任务是确定“怎样做”,其中结构设计的任务是把软件分解成不同的模块,使用的概念是“模块”;详细设计的任务是设计实现每个模块所需要的数据结构和算法,使用的概念是“数据结构”和
13、“算法”。,简单地说,软件生命周期各阶段的任务是: 1. 问题定义 问题定义阶段必须回答的关键问题是:“要解决的问题是什么?” 2. 可行性研究 这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?” 3. 需求分析 这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。,4. 总体设计 这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”总体设计又称为概要设计。 5. 详细设计 总体设计阶段以比较抽象概括的方式提出了解决问题的办法。详细设计阶段的任务就是把解法具体化,也就是回答
14、下面这个关键问题:“应该怎样具体地实现这个系统呢?”,7. 综合测试 这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。 6. 编码和单元测试 这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。 8. 软件维护 维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。,软件过程定义了运行技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。 通常使用生命周期模型概括地描述软件过程。生命周期模型规定了软件过程包含的各个阶段,以及完成这些阶段的顺序。,1.5 软件过程,典型的生命周
15、期模型如下所述 : 1. 瀑布模型 传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。,1.5.1 瀑布模型,传统的瀑布模型,实际的瀑布模型,瀑布模型的主要优点如下: 强迫开发人员采用规范的技术方法; 严格地规定了每个阶段必须提交的文档; 每个阶段结束前必须正式进行严格的技术审查和管理复审。 瀑布模型的主要缺点是: 在可运行的软件产品交付给用户之前,用户只能通过文档来了解未来的产品是什么样的。开发人员和用户之间缺乏有效的沟通,很可能导致最终开发出的软件产品不能真正满足用户的需求。,1.5.2 快速原型模型 所谓“快速原型”,是快速建立起来的、可在计算机上运行的程序,它所能完成的功能往往
16、是最终的软件产品所能完成的功能的子集。原型是软件开发人员与用户沟通的强有力工具,因此有助于所开发出的软件产品满足用户的真实需求。,快速原型模型,快速原型模型的主要优点是: 使用这种软件过程开发出的软件产品通常能满足用户的真实需求; 软件产品的开发过程基本上是线性顺序过程。,1.5.3 增量模型(渐增模型),风险更大的增量模型,使用增量模型开发软件时,把软件产品作为一系列增量构件来设计、编码、集成和测试。每个构件由若干个相互协作的模块构成,并且能够完成相对独立的功能。 增量模型的主要优点是: 能在较短时间内向用户提交可完成部分工作的产品; 逐步增加产品功能,从而使用用户有较充裕的时间学习和适应新
17、产品,减少一个全新的软件给客户组织带来的冲击。,为了使用增量模型成功地开发软件,软件工程师必须有较高的技术水平,能够设计出开放的软件体系结构。 尽量采用增量模型比采用其他生命周期模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报,因为用增量模型开发出的软件具有可扩充性。,螺旋模型的基本思想是,使用原型及其他方法尽量降低风险。理解这种模型的一个简便方法,实际把它看作在每个阶段之前都增加了风险分析的快速原型模型。,1.5.4 螺旋模型,简化的螺旋模型,完整的螺旋模型,螺旋模型所描述的软件过程主要适用于内部开发的大型软件项目,螺旋模型主要有下述优点: 有利于已有软件的重用; 有助于把软件质量作为软件开发的一个重要目标; 减少了过多测试或测试不足所带来的风险; 软件维护与软件开发没有本质区别。 使用螺旋模型开发软件,要求软件开发人员具有丰富的风险评估知识和经验。,迭代是软件开发过程中普遍存在的一种内在属性。在面向对象范型中,软件开发过程各阶段之间的迭代或同一阶段内各个工作步骤之间的迭代,比在结构化范型中更常见。 喷泉模型是典型的面向对象生命周期模型,它充分体现了面向对象软件开发过程迭代和平滑过渡的特性。,1.5.5 喷泉模型,喷泉模型,
链接地址:https://www.31doc.com/p-3025868.html