计算机软件及应用23五个也为ppt课件_第1页
计算机软件及应用23五个也为ppt课件_第2页
计算机软件及应用23五个也为ppt课件_第3页
计算机软件及应用23五个也为ppt课件_第4页
计算机软件及应用23五个也为ppt课件_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程 (Software Engineering) 引子 回答最重要的问题 Q1-什么是软件工程? n软件工程是一种工程形式,它运用计算机 科学和数学原理,针对软件问题获得一种 经济有效的解决方案 n用系统的、规范的、可度量的方法,开发 、运行和维护软件 软件工程是采用系统工程学和管理学相结合的原 理、方法和技术来指导、管理和实施软件的各种 活动,包括软件开发、运行、维护和服务等 Q2-软件工程的基本目标 是什么? n高质量就是最大程度地满足客户需求 、帮助客户获得成功 n高生产力就是以最小的成本获得最好 的收益,即在规定的时间和预算之内 完成软件开发、维护和服务等任务 高质量 &高生产力 Q3-为什么要讨论软件 工程? n软件危机的出现和加 剧 n软件系统越来越复杂 n软件环境变化很快 n软件用户的需求越来 越高 Q4-软件工程带来的益处 又是什么? n规范软件开发的行为,从而提高软件的 可维护、可移植性和可靠性 n提供许多科学的方法、最佳实践和工具 ,帮助人们高效地、系统地、正确地构 造软件 n帮助我们建立有效的、平稳的并能持续 改进的软件过程,预防缺陷、降低成本 ,最终多快好省地提供优质的软件产品 或服务,为组织赢得利润、获得竞争力 Q5-软件工程的基本思想 是什么? n将软件看成一个系统 n通过迭代来完善软件系统,逐渐逼近客户的需求 n软件开发是工程和艺术的统一、创造性和规范性 的统一 n过程决定产品,持续改进过程 n质量以预防为主、重在文化建设 n以顾客为导向、软件即服务 n个人和团队并重 n向传统的成熟工业学习 n适合自己的,才是最好的 软件工程学科构成 n计算机科学 n工程学 n管理学 n用工程学的方法来进行软件开发,并通 过良好的管理来控制开发 软件工程组成部分 n软件需求分析 n软件设计与体系结构 n软件编码技术 n软件测试 n软件过程与管理 几个误区 n1、软件开发就是编程 n2、软件工程是高层的事 n3、软件工程等工作了再学 n4、软件工程都是理论的东西 软件工程课程性质 n计算机学科的专业必修课,软件工程专 业的核心必修课 n以其为导论形成了一系列软件工程类课 程 n软考中占分最多的课程 n软件人才定位的分界线 n软件工程是目前计算机科学领域最活跃 的研究方向,是获得工业界支持最多的研 究热点,也是学科交叉最活跃的领域 CC2001 nCS-AR计算机体系结构与组织 nCS-AL算法与复杂性 nCS-HC人机交互 nCS-OS操作系统 nCS-PF程序设计基础 nCS-SP社会与职业问题 nCS-SE软件工程 nCS-DS离散结构 nCS-NC以网络为中心的计算 nCS-PL程序设计语言 nCS-GV图形学与可视化计算 nCS-IS智能系统 nCS-IM信息管理 nCS-CN数值计算科学 SE2004 nSE-CMP 计算基础 nSE-FND数学和工程基础 nSE-PRF职业实践 nSE-MAA软件建模与分析 nSE-DES软件设计 nSE-VAV软件验证与确认 nSE-EVO软件进化 nSE-PRO软件过程 nSE-QUA软件质量 nSE-MGT软件管理 软件工程课程 n2、课程的安排 n 1)课堂教学 n 2)小组课题 n 3)专题讨论 n 4)课堂发言 软件工程的教学目标 n从根本上改变编程即开发的错误思想 n学会设计软件 n了解软件开发的全过程 n对软件开发的非技术因素有充分的认识 n初步建立软件标准化的思想 n学生可以系统了解软件项目开发与维护的 一般过程,掌握开发高质量软件的方法, 以及能够有效地策划和管理软件开发活动 ,为今后从事计算机大规模开发与维护打 下坚实的基础。 u熟悉软件工程活动内容 u掌握面向对象的分析、设计方法、UML 建模 u掌握测试的基本原则和技术 u了解软件计划,管理,维护等内容 教材和参考书 n教材 u软件工程 清华大学出版社 钱 乐秋、赵文耘等编著 n参考书 u软件工程:实践者的研究方法 机 械工业出版社 roger s.pressman编著 u软件工程导论清华大学出版社 朱少民编著 u人月神话 课程安排 n1 软件工程概述 n2 系统工程 n3 需求工程 n4 设计工程 n5 人机界面设计 n6 软件测试 n7 软件项目管理 课程安排(实验) n用UML进行面向对象分析与设计建模 成绩评定 n平时成绩 30%(点名 ,课堂作业,小 组报告) n实验 20% n期末考试 50%(闭卷笔试) 关键词 n规范 n思想 第一章 概论 n计算机软件 n软件工程 n软件过程 n软件过程模型 n敏捷软件开发 nCASE工具与环境* 1.计算机软件 n定义 n特点 n分类 n软件语言 n发展 n软件危机 1. 软件的定义 n计算机软件指计算机系统中的程序 及其文档 u程序是计算任务的处理对象和处理规则的描 述 u文档是为了便于了解程序所需的阐明性资料 ,文档一般是给人看的,不一定装入计算机 软件 = 程序+文档 程序 = 算法+数据结构+数据 软件的特点 n软件是一种逻辑实体,而不是有形的系统元件,其开发 成本和进度难以准确地估算 n软件是被开发的或被设计的,它没有明显的制造过程, 一旦开发成功,只需复制即可,但其维护的工作量大 n软件不会磨损和老化 n其他特点 u软件的开发和运行常受到计算机硬件的限制, 对计算机硬件有着不同程度的依赖性 u软件的开发至今尚未完全实现自动化 u软件成本相当昂贵 u相当多的软件工作涉及到社会因素 软件的分类 n系统软件 u属于计算机系统中最靠近硬件的一层,其它软 件一般都通过系统软件发挥作用,它与具体的应用 领域无关。 如操作系统、编译程序等 n支撑软件 u支持软件的开发和维护的软件。 如数据库管理系统、网络软件、软件开发环境 等。 n应用软件 u特定应用领域专用的软件。 软件语言 n软件语言是用于书写计算机软件的语言。 n它主要包括: u需求定义语言(requirements definition language ) 用来书写软件需求定义 软件需求包括功能需求和非功能需求 u功能性语言(functional language ) 用来书写软件功能规约(functional specification ) 软件功能规约只刻画软件系统“做什么”的外部功能 ,而不涉及系统“如何做”的内部算法。 u设计性语言(design language ) 用来书写软件设计规约(design specification) 软件设计规约刻画软件“如何做”的内部算法,是软 件实现的依据 u实现性语言(programming language) u文档语言(documentation language ) 用来书写软件文档 软件的发展 n 1946-1956年 从计算机问世到实用的高级程 序语言出现前 u没有系统的软件开发方法和管理机制、 自定义软件、批处理、有限分布 n1956-1968年 从实用的高级程序语言出现到 软件工程出现前 u产生人机交互的新概念、多用户、实时 、数据库。 n1968年-至今 从软件工程出现到现在 软件危机 n含义 u计算机软件的开发和维护过程中所 遇到的一系列严重问题 许多软件项目不能满足客户的要求 许多软件项目超出预算和时间安排 n典型表现 n产生原因 n克服途径 几乎所有软件 都不同程度地 存在这些问题 ! 软件危机 n典型表现 u对软件开发成本和进度的估计常常很不正确 u用户对“已完成的”软件系统不满意的现象经 常发生 u软件产品的质量往往靠不住 u软件常常是不可维护的 u软件通常没有适当的文档资料 u软件成本在计算机系统总成本中所占的比例 逐年上升 u软件开发生产率提高的速度远远跟不上计算 机应用迅速普及深入的趋势 软件危机 n产生原因 u软件是逻辑产品,开发进度、成本难以估计 u缺乏或不完整、不一致的文档给维护带来困难 u用户对软件需求的描述往往不够精确,有遗漏,有二 义 u软件开发人员对需求的理解与用户的本来愿望有差异 u大型软件项目需多人协同完成,缺乏管理经验 u开发人员不能有效地、独立自主地处理大型软件的全 部关系 u缺乏有力的方法学和工具的支持 u软件项目的特殊性和人类智力的局限性 n克服途径 u消除错误的概念和做法 u推广使用成功的开发技术和方法 u使用软件工具和软件工程支持环境 u加强软件管理 2.软件工程 n软件工程定义 n软件工程框架 n软件工程基本原理 n软件工程方法 软件工程定义 nFritz Bauer:软件工程是为了经济地获得可靠的 和能在实际机器上高效运行的软件而建立和使用 的好的工程原则 nIEEE: 软件工程是(1)将系统化的、规范的、 可度量的方法应用于软件的开发、运行和维护的 过程,即将工程化应用于软件中;(2)(1)中 所述方法的研究 n计算机科学技术百科全书:软件工程是应用计算 机科学、数学及管理科学等原理,以工程化的原 则和方法制作软件的工程 软件工程框架 n目标 u生产具有正确性、可用性以及价格合宜的 产品 n过程 u生产一个最终满足需求且达到工程目标的 软件产品所需要的步骤 n原则 u选取适宜的开发模型 u采用合适的设计方法 u提供高质量的工程支持 u重视软件工程的管理 软件工程基本原理 n确保软件储安平质量和开发效率原理的最小集合7条 基本原理 u用分阶段的生命周期计划严格管理 u坚持进行阶段评审 尽早发现在软件开发过程中犯的错误 u实行严格的产品控制 在软件开发过程中不应随意改变需求 u采用现代程序设计技术 u结果应能清楚地审查 规定开发组织的责任和产品标准,从而使得说得到的结 果能够清楚地审查 u开发小组的人员应该少而精 u承认不断改进软件工程实践的必要性 软件工程方法学 n方法学(也称范型):软件生命周期全过程中 使用的一套技术的集合 n三要素:方法、工具和过程 n传统方法学(结构化范型) u要么面向行为,要么面向数据 u自顶向下顺序完成各阶段任务 n面向对象方法学 u对象+类+继承+用消息通信 u多次反复迭代的演化过程 u降低软件产品的复杂性,提高其可理解性, 简化软件开发和维护工作,促进软件重用 3.软件过程 n软件过程是软件生存周期中的一系列相 关的过程。 u过程是活动的集合,活动是任务的集 合。 n软件工程过程是为了获得高质量软件所 需完成的一系列任务框架,它规定了各 项任务的工作步骤 软件生存周期 n软件生存周期是指软件产品或软件系统从产生 、投入使用到被淘汰的全过程。 n大体可分为6个阶段: u计算机系统工程 u需求分析 u设计 u编码 u测试 u运行和维护 计算机系统工程 n确定待开发软件的总体要求和范围,以 及它与其它计算机系统元素之间的关系 n进行成本估算,做出进度安排 n进行可行性分析,即从经济、技术、法 律等方面分析待开发的软件是否有可行 的解决方案,并在若干个可行的解决方 案中作出选择。 需求分析 n主要解决待开发软件要“做什么”的问题 n确定软件的功能、性能、数据、界面等 要求,生成软件需求规约 设计 n主要解决待开发软件“怎么做”的问题。 n软件设计通常可分为系统设计(也称概要 设计或总体设计)和详细设计。 u系统设计的任务是设计软件系统的体系 结构,包括软件系统的组成成分、各成分的 功能和接口、成分间的连接和通信,同时设 计全局数据结构; u详细设计的任务是设计各个组成成分的 实现细节,包括局部数据结构和算法等。 编码、测试、运行和维护 n编码 u 用某种程序设计语言,将设计的结果转换为 可执行的程序代码。 n测试 u发现并纠正软件中的错误和缺陷。测试主要 包括单元测试、集成测试、确认测试和系统测试 。 n运行和维护 u在软件运行期间,当发现了软件中潜藏的错 误或需要增加新的功能或使软件适应外界环境的 变化等情况出现时对软件进行修改。 4.软件过程模型 n软件过程模型是软件开发全部过程、活 动和任务的结构框架 n也称软件开发模型或软件生存周期模型 软件过程模型 n典型的软件过程模型有: u瀑布模型(waterfall model) u演化模型(evolutionary model) 增量模型(incremental model) 原型模型(prototyping model) 螺旋模型(spiral model) u喷泉模型(water fountain model) u基于构件的开发模型(component-based development model) u形式方法模型(formal methods model) 瀑布模型 系统工程 /验证 需求分析 与规约/验证 设计与 规约/验证 编码/ 单元测试 集成测试 系统测试 运行与 维护 主要思想 n软件开发过程与软件生命周期是 一致的 n相邻二阶段之间存在因果关系 n需对阶段性产品进行评审 文档驱动 瀑布模型 n优点 u软件生命周期模型,使软件开发过程可以在分 析、设计、编码、测试和维护的框架下进行; u软件开发过程具有系统性、可控性,克服了 软件开发的随意性 。 n缺点 u缺乏灵活性,难以适应需求不明确或需求经 常变化的软件开发 u开发早期存在的问题往往要到交付使用时才 发现,维护代价大 演化模型 n演化模型适用于对软件需求缺乏准确认识的情况 n演化模型的开发过程就是从构造初始的原型出发 ,逐步将其演化成最终软件产品的过程。 u在获取了一组基本的需求后,通过快速分析构 造出该软件的一个初始可运行版本,称之谓原型( prototype),然后根据用户在试用原型的过程中提 出的意见和建议、或者增加新的需求,对原型进行改 造,获得原型的新版本,重复这一过程,最终得到令 客户满意的软件产品。 n典型的演化模型有:增量模型、原型模型、螺旋 模型。 n 增量模型融合了瀑布模型的基 本成分(重复地应用)和演化 模型的迭代特征 n 增量模型强调每一个增量都发 布一个可运行的产品 增量模型 项目日历时间 软 件 功 能 性 和 特 征 1 2 3 4 5 第2次增量发布 增量2 1 2 3 4 5 第n次增量发布 增量n 1 2 3 4 5 第1次增量发布 增量1 5 部署(发布,反馈) 4构造(编码,测试) 3建模(分析,设计) 2计划 1交流 增量模型 n适用于: u需求经常变化的软件开发 u市场急需而开发人员和资金不 能在设定的市场期限之前实现一个 完善的产品的软件开发 n早期阶段使投资得到明显回报 n易于维护 n要求软件具有开放式结构 原型模型 部署交付和反馈构建原型 交流 快速设计方式建模 快速计划 n原型(prototype)是预期系统的一个可执行版本,它 反映了系统性质(如功能、计算结果等)的一个选定 的子集。一个原型不必满足目标软件的所有约束,其 目的是能快速、低成本地构建原型。 n原型方法从软件工程师与客户的交流开始,其目的是 定义软件的总体目标,标识需求。然后快速制订原型 开发的计划,确定原型的目标和范围,采用快速设计 的方式对其建模,并构建原型。 n被开发的原型应交付给客户试用,并收集客户的反馈 意见,这些反馈意见可在下一轮迭代中对原型进行改 进。在前一个原型需要改进,或者需要扩展其范围的 时候,进入下一轮原型的迭代开发。 原型模型 原型模型 n优点 u通过与用户交互而得到验证,据此产生的规 格说明文档正确描述用户需求 u后续阶段发生错误的可能性也比较小 u原型的快速建立可以加速软件开发过程,节 约软件开发成本 n缺点 u只关注需求不注重系统内部结构 u可能导致系统设计差、效率低,难于维护 螺旋模型 n是瀑布模型和演化模型的 结合,并增加了风险分析 n螺旋模型沿着螺线旋转, 在四个象限上分别表达四 个方面的活动 u制定计划 u风险分析 u工程实施 u客户评估 n螺旋模型指引的软件项 目开发沿着螺线自内向 外旋转,每旋转一圈, 表示开发出一个更为完 善的新软件版本。 n多数情况下沿着螺线的 活动会继续下去,自内 向外,逐步延伸,最终 得到所期望的系统。 螺旋模型 n主要适应于内部开发的大规模软件项目 n风险驱动,要求软件开发人员具有丰富 的风险评估经验和专业知识 n喷泉模型适是合于面向对 象开发的模型 n体现迭代和无间隙特征 u迭代:各开发活动常 常重复工作多次,相关的 功能在每次迭代中随之加 入演进的系统 u无间隙:开发活动之 间不存在明显的边界 喷泉模型 n支持软件复用(reuse) n利用预先包装好的软件构件(包括组织 内部开发的构件和现存商品化构件 COTS)来构造应用系统 基于构件的开发模型 n领域工程 的目的是 构建领域 模型、领 域基准体 系结构和 可复用构 件库 n应用系统 工程的目 的是使用 可复用构 件组装应 用系统。 领域分析 构件可变 性 分析 构建 可复用构 件 领域模 型 领域基准 体系结构 图 可复用 构件库 分析体系结构 设计 获取构件 构件特化 和修改 评价 构件组装 和测试 开发未找 到 构件的部 分 应用系统工 程 应用系 统 领域工程 形式方法模型 n形式化方法(formal methods)是建立在严格数学基 础上的一种软件开发方法。软件开发的全过程中,从需 求分析、规约、设计、编程、系统集成、测试、文档生 成、直至维护各个阶段,凡是采用严格的数学语言,具 有精确的数学语义的方法,都称为形式化方法。 n形式化方法用严格的数学语言和语义描述功能规约和设 计规约,通过数学的分析和推导,易于发现需求的岐义 性、不完整性和不一致性,易于对分析模型、设计模型 和程序进行验证。通过数学的演算,使得从形式化功能 规约到形式化设计规约,以及从形式化设计规约到程序 代码的转换成为可能。 思考 n假设你要开发一个软件,它的功能是把73624.9385这个数开平方, 所得到的结果应该精确到小数点后4位。一旦实现并测试之后,该 产品将被抛弃。你打算选用哪种软件生命周期模型?请说明你做出 这样选择的理由。 n假设你要为一家生产和销售长统靴的公司开发一个软件,该产品 将监控该公司的存货:跟踪从购买橡胶开始,到靴子生产,发货给 各个连锁店,直至卖给顾客的全过程,你为这个项目选择生命周期 时使用什么模型? n你为靴类连锁店开发的存货监控很受欢迎,你所在的软件开发公司 决定把它重新写成一个通用的软件包,适用于各种生产并通过自己 的连锁店销售产品的公司,因此,这个新产品必须是可移植的,并 且应该能够很容易地适应新的运行环境,满足不同用户的需求,你 在选择生命周期模型时使用的准则与第二题使用的准则有哪些不同 ? 敏捷软件开发( Agile ) n软件开发的新挑战 快速的市场进入时间,要求高生产率 快速变化的需求 快速发展的技术 n传统的软件开发方法 强调过程 强调文档 开发人员负担过重 称为重载(Heavyweight)方法 Agile方法的价值观 n个人和交互高于过程和工具 n可运行软件高于详尽的文档 n与客户协作高于合同(契约)谈判 n对变更及时做出反应高于遵循计划 Agile方法的指导原则 (1)最优先的是通过尽早地和不断地提交有价值的软件使客户满意 (2)欢迎变化的需求 (3)以几周到几个月为周期,尽快、不断地发布可运行软件 (4)在整个项目过程中,业务人员和开发人员必须天天一起工作 (5)以积极向上的员工为中心建立项目组,给予他们所需的环境和支持 ,对他们的工作予以充分的信任 (6)项目组内效率最高、最有效的信息传递方式是面对面的交流 (7)测量项目进展的首要依据是可运行的软件 (8)敏捷过程提倡可持续的开发 (9) 应时刻关注技术上的精益求精和好的设计,以增强敏捷性 (10)简单化是必不可少的,这是尽可能减少不必要工作的艺术 (11)最好的构架、需求和设计出自于自我组织的团队 (12)团队要定期反思怎样才能更有效,并据此调整自己的行为 Agile方法的适用范围 适合采用Agile方法的情况: n需求不确定、易挥发(Volatile,意 指今天的要求明天就不需要了) n有责任感和积极向上的开发人员 n用户容易沟通并能参与 Agile的典型方法 nExtreme Programming (简称XP) nSCRUM nCrystal Methodologies (简称Crystal) nFeature Driven Development(简称FDD) nDynamic Systems Development Methodology(简称DSDM) nAdaptive Software Development(简称ASD) nPragmatic Programming等 XP方法 n广泛用于需求模糊和挥发性强的场合 u适用于10人以下项目组、开发地点集中的场合 n4个价值观 u交流(Communication) u简单(Simplicity) Just enough 思想 u反馈(Feedback) 非正式的评审(走查,Walkthrough)、小发布等 u勇气(Courage) 信任合作的同事,也相信自己;只有在绝对需要的时 候才创建文档;让业务人员制定业务决策,技术人员制定技术决 策;用可能的最简单的工具;相信程序员能制定设计决策,不需 要给他们提供过多的细节等。 n12个核心实践(P29-31) XP方法的12个核心实践 1.完整的团队(Whole Team) 所有的小组成员应在同一个工作地点工作 成员中必须有一个现场用户(On-site User)由他提出需 求,确定开发优先级 通常还设一个“教练”(Coach)角色 教练指导XP方法的实施,以及与外部的沟通和协调 2.计划对策(Planning Game) 包括两类:发布计划和迭代(Iteration)计划 3. 系统比喻 (Metaphor) 系统比喻是待开发软件的一个每个成员都熟悉的形象化比喻,相当 于一个粗略的软件体系结构 4. 小发布(Small release) 经常、不断地发布可运行的、具有商业价值的小软件版本,供现场用户评估 或最终使用 5. 测试(testing) XP方法提倡测试优先,即先写测试后编代码(testing then coding) 6. 简单设计(Simple Design) 设计只考虑当前定义的功能而不考虑以后需求的变化 该设计是完成目前功能所需的最简洁的设计 7. 结对编程(Pair Programming) 一个程序员编程的同时,另一个程序员负责检查程序的正确性和可 读性 结对的伙伴可以动态调整 8. 设计改进(Design Improvement) 在不影响程序的外部可见行为的情况下,按高内聚低耦合的原则对程 序结构进行改进,保持代码简洁、无冗余 XP方法的12个核心实践 持续集成(Continuous Integration) 每完成一个模块的开发(包括该模块的单元测试)后,立即将其组装 到系统中,并进行集成测试,完成该集成测试后才能进行下一次集成 10. 代码全体共有(Collective code Ownership) 团队中的任何人可以在任何时候修改系统任何位置上的任何代码 团队的成员都可以参加模型的开发,又有系统比喻、结对编程、编 码标准、持续集成等实践,这些都为代码全体共有提供了支持 编码标准(Coding Standard) XP方法强调制订一个统一的编码标准,包括命名、注释、格式等编 程风格 12. 可持续步调(Sustainable Pace) 每周40小时工作制 XP方法的12个核心实践 XP方法的开发过程 最新版 本 发布计 划 用户认 可 用户 故事 (user stories) 下一迭 代 Bugs新用户故事 测试用 例 迭代 开发 体系结 构骨架 (spike) 系统比 喻 制订

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论