2①3五个也为.ppt_第1页
2①3五个也为.ppt_第2页
2①3五个也为.ppt_第3页
2①3五个也为.ppt_第4页
2①3五个也为.ppt_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

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

温馨提示

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

评论

0/150

提交评论