《计算机软件工程导论ppt课件》由会员分享,可在线阅读,更多相关《计算机软件工程导论ppt课件(64页珍藏版)》请在金锄头文库上搜索。
1、软件工程导论课程内容 学习软件工程的意义? 为什么会产生软件危机? 为什么需要软件工程? 什么是软件生命周期? 什么是软件过程?什么是软件工程? 软件工程涉及的内容非常多,而且学习 时理论抽象的东西居多,没有具体的实 践经验在将来处理具体问题时会有难度 。不过,耐心先学习课本理论、多看杂 志开阔视野、最重要的程序设计和系统 设计的计算机基础千万不可抛到一边, 否则将来实践时,很难理解开发人员面 临问题的实质。什么是软件工程? 我想,既然是工程,就不是单一的设计程序, 加以对应的文档,应该可以说是一门艺术,是 一门综合性,交叉性的学科。可能会用到相应 的计算机科学技术,数学知识,和一些管理学 方
2、面的内容。就象造房子,要勘察,测量,设 计,建造,最后的装饰以及今后的维护。而软 件工程亦及如此,设计一个软件,首先,是应 该做市场的调查,确定该软件有一定的前景; 其次是具体设计;然后,就是要把软件做精, 做得更好,这就要求我们不断的将其优化;再 就是调式,测出软件的性能;最后,就是要维 护,及时打上补丁,适应今后的变化。你是否做过以下工作 根据客户需要开发软件或程序? 历时半年或以上开发一个软件或程序? 和3个人(含3人)协同开发软件或程序? 从开发软件或程序中得到快乐?学习软件工程的意义 对软件认识上的提升 明确需求分析和可行性分析的重要性 培养团队协作精神 学习一系列工程性的方法“软件
3、工程”教学与实践的目标u转变对软件的认识:上升程序 系统u 转变思维定式:上升程序员 系统工程师(系统分析员) 工程化训练1.1 软件危机1.2 软件工程1.3 软件生命周期1.4 软件过程1.5 小结软件危机 软件危机是指在计算机软件的开发和维 护过程中所遇到的一系列严重问题。 概括地说,软件危机包含下述两方面的 问题: 如何开发软件,以满足对软件日益增长的需 求; 如何维护数量不断膨胀的已有软件。软件危机主要有以下一些典型表现 : (1) 对软件开发成本和进度的估计常常很不准 确。 (2) 用户对“已完成的”软件系统不满意的现象经 常发生。 (3) 软件产品的质量往往靠不住。 (4) 软件
4、常常是不可维护的。 (5) 软件通常没有适当的文档资料。 (6) 软件成本在计算机系统总成本中所占的比 例逐年上升。 (7) 软件开发生产率提高的速度,远远跟不上 计算机应用迅速普及深入的趋势。1.1.2 产生软件危机的原因 一方面与软件本身的特点有关 另一方面也和软件开发与维护的方法不 正确有关。软件危机原因 管理和控制软件开发过程相当困难 软件维护通常意味着改正或修改原来的 设计,这就在客观上使得软件较难维护 软件的一个显著特点是规模庞大,而且 程序复杂性将随着程序规模的增加而呈 指数上升 如果坚持不懈地使用经过实践考验证明 是正确的方法,许多困难是完全可以克 服的软件危机原因 对用户要求
5、没有完整准确的认识就匆忙 着手编写程序是许多软件开发工程失败 的主要原因之一 在开发时期首先需要对软件进行设计 编写程序的阶段 程序编写完之后还必须经过大量的测试 工作软件版本号的笑话 1.0版:这几乎是不能推出的版,但我们必须将它发布 ,因为实验室的伙伴已精疲力竭,发布日期近在眼下, 市场部的同事早已迫不及待。 1.1版:我们已经修正了全部致命的错误 2.0版:有热心人又发现了新的错误,因为修正了错误, 所以顺手改一下版本号。 2.1版:对不起,千万不要惊讶,只有一些令人生厌的印 刷错误,绝对不会引起任何麻烦。 3.0版:我想我们终于把这个软件做的完美无瑕,绝大多 数客户也认为他们使用起来得
6、心应手。 4.0版:功能有丰富了!但软件整整大了一倍,也就是说 你需要付更多钱,需要更快的处理器 4.1版:我们发誓:只有1-2个小错误。 6.0版:虽然已经有人在讨论报废计划,但在加入了可爱 的Demo后,我们正努力延长它的寿命,争取卖出更多软 件。软件配置 一个软件产品必须由一个完整的配置组 成,软件配置主要包括程序、文档和数 据等成分 在后期引入一个变动比在早期引入相同 变动所需付出的代价高23个数量级图1.1 引入同一变动付出的代价随时间变化 的趋势软件维护的重要性 轻视维护是一个最大的错误 实际上用于软件维护的费用占软件总费 用的55%70% 软件工程学的一个重要目标就是提高软 件的
7、可维护性,减少软件维护的代价。1.1.3 消除软件危机的途径 应该彻底消除在计算机系统早期发展阶 段形成的“软件就是程序”的错误观念。 一个软件必须由一个完整的配置组成, 事实上,软件是程序、数据及相关文档 的完整集合。IEEE软件定义 1983年IEEE为软件下的定义是:计算机程序、 方法、规则、相关的文档资料以及在计算机上 运行程序时所必需的数据。 应该推广使用在实践中总结出来的开发 软件的成功的技术和方法,并且研究探 索更好更有效的技术和方法 应该开发和使用更好的软件工具。 如果把各个阶段使用的软件工具有机地 集合成一个整体,支持软件开发的全过 程,则称为软件工程支撑环境。 为了解决软件
8、危机 技术措施(方法和工具) 组织管理措施 软件工程正是从管理和技术两方面研究 如何更好地开发和维护计算机软件的一 门新兴学科。1.2 软件工程 1.2.1 软件工程的介绍 概括地说,软件工程是指导计算机软 件开发和维护的一门工程学科。 采用工程的概念、原理、技术和方法 来开发与维护软件,把经过时间考验 而证明正确的管理技术和当前能够得 到的最好的技术方法结合起来,以经 济地开发出高质量的软件并有效地维 护它,这就是软件工程。定义 1968年在第一届NATO会议上曾经给出了 软件工程的一个早期定义:“软件工程就 是为了经济地获得可靠的且能在实际机 器上有效地运行的软件,而建立和使用 完善的工程
9、原理。”这个定义不仅指出了 软件工程的目标是经济地开发出高质量 的软件,而且强调了软件工程是一门工 程学科,它应该建立并使用完善的工程 原理。软件工程具有下述的本质特性。 1. 软件工程关注于大型程序的构造 2. 软件工程的中心课题是控制复杂性 3. 软件经常变化 4. 开发软件的效率非常重要 5. 和谐地合作是开发软件的关键 6. 软件必须有效地支持它的用户 7. 在软件工程领域中是由具有一种文化背景的 人替具有另一种文化背景的人创造产品1.2.2 软件工程的基本原理 软件工程专家B.W.Boehm于1983年在一 篇论文中提出了软件工程的7条基本原理 。 B W.Boehm博士是软件业中最
10、有影响的 专家之一,他开创并发展了COCOMO II 模型。他的经典著作软件工程经济学 奠定了软件成本估算领域的基础。 Boehm博士与美国南加州大学软件工程 中心的其他同事一起,引领着软件成本 估算技术的发展。1. 用分阶段的生命周期计划严格管理 2. 坚持进行阶段评审 3. 实行严格的产品控制 4. 采用现代程序设计技术 5. 结果应能清楚地审查 6. 开发小组的人员应该少而精 7. 承认不断改进软件工程实践的必要性1.2.3 软件工程方法学 软件工程方法学包含3个要素: 方法 方法是完成软件开发的各项任务的技术方法,回 答“怎样做”的问题 工具 工具是为运用方法而提供的自动的或半自动的软
11、 件工程支撑环境 过程 过程是为了获得高质量的软件所需要完成的一系 列任务的框架,它规定了完成各项任务的工作步 骤1. 传统方法学 传统方法学也称为生命周期方法学或结构化范 型 采用结构化技术(结构化分析、结构化设计和结 构化实现)来完成软件开发的各项任务,并使用 适当的软件工具或软件工程环境来支持结构化 技术的运用。 这种方法学把软件生命周期的全过程依次划分 为若干个阶段,然后顺序地完成每个阶段的任 务。 采用这种方法学开发软件的时候,从对问题的 抽象逻辑分析开始,一个阶段一个阶段地进行 开发。2. 面向对象方法学 当软件规模庞大,或者对软件的需求是 模糊的或会随时间而变化的时候,使用 传统
12、方法学开发软件往往不成功,此外 ,使用传统方法学开发出的软件,维护 起来仍然很困难。面向对象方法学要点 概括地说,面向对象方法学具有下述4个要 点。 (1) 把对象(object)作为融合了数据及在数据上 的操作行为的统一的软件构件。 (2) 把所有对象都划分成类(class)。 (3) 按照父类(或称为基类)与子类(或称为派生 类)的关系,把若干个相关类组成一个层次结 构的系统(也称为类等级)。 (4) 对象彼此间仅能通过发送消息互相联系。面向对象方法学 面向对象方法学的出发点和基本原则, 是尽量模拟人类习惯的思维方式,使开 发软件的方法与过程尽可能接近人类认 识世界解决问题的方法与过程,从
13、而使 描述问题的问题空间(也称为问题域)与实 现解法的解空间(也称为求解域)在结构上 尽可能一致。 人类认识客观世界解决现实问题的过程 ,是一个渐进的过程。1.3 软件生命周期 软件生命周期由 软件定义 软件开发 运行维护 3个时期组成,每个时期又进一步划分成 若干个阶段。 软件定义时期的任务是: 确定软件开发工程必须完成的总目标; 确定工程的可行性; 导出实现工程目标应该采用的策略及系统必须完成 的功能; 估计完成该项工程需要的资源和成本,并且制定工 程进度表。 这个时期的工作通常又称为系统分析,由系统 分析员负责完成 软件定义时期通常进一步划分成3个阶段 问题定义 可行性研究 需求分析软件
14、开发阶段 开发时期具体设计和实现在前一个时期 定义的软件,它通常由下述4个阶段组成 : 总体设计 详细设计 编码和单元测试 综合测试。 其中前两个阶段又称为系统设计,后两 个阶段又称为系统实现。软件维护 维护时期的主要任务是使软件持久地满足用户 的需要。 当软件在使用过程中发现错误时应该加以改正; 当环境改变时应该修改软件以适应新的环境; 当用户有新要求时应该及时改进软件以满足用户的 新需要。 通常对维护时期不再进一步划分阶段,但是每 一次维护活动本质上都是一次压缩和简化了的 定义和开发过程。问题定义 1. 问题定义 问题定义阶段必须回答的关键问题是:“要 解决的问题是什么?” 通过对客户的访
15、问调查,系统分析员扼要地 写出关于问题性质、工程目标和工程规模的 书面报告,经过讨论和必要的修改之后这份 报告应该得到客户的确认。可行性研究 2. 可行性研究 这个阶段要回答的关键问题是:“对于上一 个阶段所确定的问题有行得通的解决办法吗 ?”需求分析 3. 需求分析 这个阶段的任务是准确地确定“为了解决这 个问题,目标系统必须做什么”,主要是确 定目标系统必须具备哪些功能。总体设计 4. 总体设计 这个阶段必须回答的关键问题是:“概括地 说,应该怎样实现目标系统?”总体设计又称 为概要设计。详细设计 5. 详细设计 详细设计阶段的任务就是把解法具体化,也 就是回答下面这个关键问题:“应该怎样具 体地实现这个系统呢?”编码和单元测试 6. 编码和单元测试 这个阶段的关键任务是写出正确的容易理解 、容易维护的程序模块。 程序员应该根据目标系统的性质和实际环境 ,选取一种适当的高级程序设计语言(必要 时用汇编语言),把详细设计的结果翻译成 用选定的语言书写的程序,并且仔细测试编 写出的每一个模块。综合测试 7. 综合测试 这个阶段的关键任务是通过各种类型的测试 (及相应的调试)使软件达到预定的要求。软件维护 8. 软件维护 维护阶段的关键任务是,通过各种必要的维 护活动使系统持久地满足用户的需要。