1 / 56

课 名 : 软件工程 教学方式:授课+考试 + 大作业设计 授课教师:陈巧丽 联系方式: E_mail:cqiaoli@163

课 名 : 软件工程 教学方式:授课+考试 + 大作业设计 授课教师:陈巧丽 联系方式: E_mail:cqiaoli@163.com. 一、课程的性质、任务:. “ 软件工程 ” 是高职高专院校计算机应用与软件技术专业教学计划中一门核心基础课程,它是研究软件开发和软件管理的一门工程科学。

lori
Download Presentation

课 名 : 软件工程 教学方式:授课+考试 + 大作业设计 授课教师:陈巧丽 联系方式: E_mail:cqiaoli@163

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 课 名:软件工程 教学方式:授课+考试+大作业设计 授课教师:陈巧丽 联系方式:E_mail:cqiaoli@163.com

  2. 一、课程的性质、任务: • “软件工程”是高职高专院校计算机应用与软件技术专业教学计划中一门核心基础课程,它是研究软件开发和软件管理的一门工程科学。 • 它的主要任务是掌握支持软件开发和管理的理论、方法、技术、标准以及计算机辅助软件工程的工具(Visio或Rose)环境等知识;使学生具有软件开发能力(包括熟练进行程序设计语言的结构化编码与可视化设计能力;UML的阅读和建模能力;培养用软件工程化及项目化的思想处理解决问题的能力等)。

  3. 概括说:软件开发能力最关键的步骤有三步:

  4. 二、通过学习应能达到如下目标: 1.接受一种思想。掌握软件工程的基本原理、概念与方法----主要包括软件系统的可行性研究、需求分析、概要设计、详细设计、编码、测试、维护、面向对象、项目管理等方面的基本知识与方法。2.掌握软件工程中的一些基本技术方法,如数据流图、数据字典、结构分析方法(如Jackson方法等),面向对象分析方法、集成测试方法、项目管理的基本方法等。3.结合模拟案例,要求学生从实际中掌握从面向过程到面向对象思想理论的基本方法和技巧。掌握软件开发文档的组织编写等。 4. 掌握一种工具。学期末能用Visio或Rose软件完成大作业的设计(画各种软件工程图)(指定或自找题目) 5. 把目前或以后要学的程序设计知识(C、Java、VB、 VC++、 VB.NET等)提高到一定理论高度认识:编程能否用? 学会思想比掌握一种工具更为重要。 小提示:

  5. 三、几点建议: “学知识,最重要的是融会贯通!” 人类解决复杂问题时普遍采用的一个策略就是“各个击破”,也就是对问题进行“分解,分解,再分解,然后再分别解决各个子问题!”

  6. “现在大家都已认识到,如果有哪个项目不遵循软件工程原则必定会受到实践的惩罚。”“现在大家都已认识到,如果有哪个项目不遵循软件工程原则必定会受到实践的惩罚。” “软件工程课是我们参加工作以后最能直接应用的一门专业课。” ——一位刚毕业参加工作的计算机专业学生

  7. 第一章 绪论 • 什么是软件 • 软件的特点 • 软件的发展 • 软件生存期 • 什么是软件工程 • 软件工程的目的和要求

  8. 1.1软件工程简述 • 先接受2个正确观点: • 1、“开发软件不等于编写程序” —开发软件应该完成的工作远远多于编写程序应该完成的工作。 • 设计算法(即完成指定功能的步骤),然后用程序设计语言(例如:C语言)表达该算法。 • 而开发软件并非就是编写程序,事实上编写程序仅仅是开发软件所应完成的工作的一部分,而且只占一小部分。 • 为了开发出一个符合用户需要、质量合格的软件,软件工程师必须首先弄清楚用户面临的问题是什么,也就是要明确软件的“主攻”方向; • 接下来应该进行可行性研究方案,分析用户面临的问题是否有行得通的解决方案。为避免浪费资源,仅在该软件的开发是可行的前提下,才进行实质性的开发工作;

  9. 然后应该进行需求分析工作,通过与用户的反复交流,搞清楚用户对该软件的具体需求,这些需求是进行软件设计的依据;在编写程序之前需要先进行设计。然后应该进行需求分析工作,通过与用户的反复交流,搞清楚用户对该软件的具体需求,这些需求是进行软件设计的依据;在编写程序之前需要先进行设计。 • 通常,大型软件的设计工作又分成两个阶段进行,先进行总体设计(又称为概要设计),再进行详细设计; • 编写程序实质上是把设计结果翻译成用某种程序设计语言书写的程序; • 程序编写出来之后,还需要经过严格的测试过程(需要的工作量通常占软件开发全部工作量的40%~50%) ,软件确实符合用户需求而且质量合格,才能交付给用户使用。

  10. 2、“错误做法会导致软件危机”。 • 开发软件不等于编写程序。但是,迄今为止,仍然有不少人错误地认为开发软件就是编写程序,或者认为开发软件主要就是编写程序。人们之所以有错误的认识并在开发软件时采用了错误的做法,主要可归因于在计算机系统发展的早期阶段“开发软件”的个体化特点。 • 所谓软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。(软件危机的具体表现在后面介绍)

  11. 1.1软件工程简述 • 软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。 • 程序是按事先设计的功能和性能要求执行的指令序列。计算机程序包括源程序和目标程序。 • 数据是使程序能正常操纵信息的数据结构(即数据的组织形式)。 • 文档是与程序开发,维护和使用有关的图文材料。

  12. 1.1软件工程简述 • 软件的特点 • 软件是一种逻辑实体,而不是具体的物理实体。因此,它具有抽象性。 • 软件的生产与硬件不同,没有明显的制造过程。对软件的质量控制,必须立足于软件开发方面。 • 在软件的运行和使用期间,没有像硬件那样的磨损、老化问题。 • 软件的开发和运行往往受到计算机系统的限制,对计算机系统有不同程度的依赖性。

  13. 1.1软件工程简述 • 面向过程的程序=算法+数据结构 • 面向对象的程序=对象+消息 • 面向构件的程序=构件+构架 • 软件=程序+数据+文档

  14. 1.1软件工程简述 • 软件的特点(续) • 迄今为止,软件的开发尚未完全摆脱手工艺的方式。 • 软件本身是复杂的。 • 软件的成本相当昂贵。(见下页图示) • 相当多的软件工作涉及到社会因素。

  15. 1.1软件工程简述 • 软件的分类 • 按软件的功能划分:系统软件、支撑软件、应用软件 • 按软件的规模划分:微型、小型、中型、大型、超大型 • 按软件的工作方式划分:实时、分时、交互、批处理 • 按软件服务对象的范围划分:项目软件、产品软件

  16. 1.1软件工程简述 一、计算机软件发展的各个时期 1. 第一代(60年代中期之前)程序设计阶段 • 硬件通用,软件专用;程序规模小,编写者和使用者为同一人(同组人)。 2. 第二代(60年代中期-70年代中期)程序系统阶段 • 出现“软件作坊”、产品软件;“个体化”开发方法。 3. 第三代(70年代中期之后)软件工程阶段 软件开发成为一门新兴的工程学科——软件工程。 4. 第四代(90年代后)现代软件工程阶段。

  17. 程序设计 程序系统 软件工程 现代软件工程 软件的范畴 程序 程序及说明书 产品软件 (项目软件) 项目工程 主要程序设计语言 汇编及机器语言 高级语言 高级语言系统、程序设计语言 面向对象可 视化设计语言 软件工作范围 程序编写 包括设计和测试 软件生存期 整个软件生 存期 需求者 程序设计者本人 少数用户 市场用户 面向所有用 户 计算机软件发展的三个时期及特点

  18. 计算机软件发展的三个时期及特点

  19. 1.1软件工程简述 二、什么是软件危机 • 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。主要是两个问题。 1. 如何开发软件,怎样满足对软件的日益增长的需求。 2. 如何维护数量不断膨胀的已有软件

  20. 1.1软件工程简述 三、软件危机的主要表现 1. 对软件开发成本和进度的估计不准确 2. 用户不满意 3. 软件质量不高、可靠性差 4. 软件常常不可维护、错误难以改正。 5. 缺乏适当的文档资料 6. 软件成本占系统总成本的比例逐年上升 7. 软件开发速度跟不上计算机发展速度

  21. 1.1软件工程简述 四、产生软件危机的原因 1. 与软件本身的特点有关 • 软件不同于硬件,它是计算机系统的逻辑部件而不是物理部件。在写出程序代码并在计算机运行之前,软件开发过程的进展情况较难衡量,软件开发的质量也较难评价。因此,管理和控制软件开发过程相当困难。 2. 软件不易于维护 (1)软件维护通常意味着改正或修改原来的设计,客观上使软件较难维护。

  22. 1.1软件工程简述 (2)软件不同于一般程序,它的规模大,不易于维护。 3. 在软件开发过程中,或多或少地采用了错误的方法和技术。 4. 对用户需求没有完整准确的认识,就匆忙着手编写程序。

  23. 1.1软件工程简述 五、解决软件危机的途径 1. 技术措施 使用更好的软件开发方法和开发工具 2. 组织管理措施 • 软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。

  24. 1.1软件工程简述 一、什么是软件工程 • 软件工程是指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。 • 软件工程是一门涉及软件计划、需求分析、设计、编码、测试和维护的原理、方法及工具的研究和应用的学科。

  25. 1.1软件工程简述 二、软件工程的基本原理 • 1968年,北大西洋公约组织(NATO),召开的有关计算机软件会议上正式提出“软件工程”术语。 • 目前有100多条关于软件工程的准则,其中最出名的是著名软件工程专家B.W.Boehm在1983年提出的7条基本原理。

  26. 1.1软件工程简述 1. 用分阶段的生命周期计划严格管理 • 经统计表明,不成功的软件项目中有一半左右是由于计划不周造成的。 • Boehm认为,在软件的整个生命周期中应制定并严格执行六类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。

  27. 1.1软件工程简述 2. 坚持进行阶段评审 • 大部分错误是在编码之前造成的 • 因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程的错误

  28. 1.1软件工程简述 3. 实行严格的产品控制 • 在软件开发过程中不要随意改变需求,因为改变某项需求往往需要付出较高的代价,但在实践中用户往往会提出需求变更,因此需要采取科学的产品控制技术。 • 目前主要实行基准配置管理:基准配置是指经过阶段评审后的软件配置成分,如各个阶段产生的文档或程序代码。 • 对涉及基准配置的修改,必须经过严格的评审,通过后才能实施修改。

  29. 1.1软件工程简述 4. 采用现代程序设计技术 • 实践表明:采用先进的技术既可提高软件开发的效率,又可提高软件维护的效率。 • 80年代及之前:结构化分析、设计技术 • 90年代:面向对象分析、设计技术

  30. 1.1软件工程简述 5. 结果应能清楚地审查 • 软件产品是看不见、摸不着的逻辑产品,开发过程难以评价和管理。 • 根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,使所得的结果能够清楚地审查

  31. 1.1软件工程简述 6. 开发小组的人员应该少而精 • 开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。 • 开发小组人员数目的增加,使相互交流复杂、费用增加。

  32. 1.1软件工程简述 7. 承认不断改进软件工程实践的必要性 • 遵循前6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但不能保证赶上时代前进的步伐。 • 积极主动采纳新的软件技术,且不断总结经验。

  33. 1.1软件工程简述 三、软件工程的目标及框架、原则 • ⑴ 软件工程的目标可概括为“生产具有正确性、可用性以及开销合宜的产品”; • ⑵ 软件工程的活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”; • ⑶ 软件工程实施过程中的四条基本原则: ①选取适宜的开发模型; ②采用合适的设计方法; ③提供高质量的工程支持; ④重视开发过程的管理。

  34. 1.2 软件的生存周期及其开发模型 1. “生命周期法”的起源。 软件工程采用的“生命周期法”,就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后再逐步完成每个阶段的任务. • 软件生存周期包括问题定义、可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等活动,可以将这些活动以适当方式分配到不同阶段去完成。

  35. 1.2软件的生存周期及其开发模型 2. 生命周期划分的原则 • 任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。 3. 生命周期的划分 • 软件生命周期一般分为:软件定义(问题定义、可行性研究、需求分析)、软件开发(总体设计、详细设计、编码和单元测试、综合测试)、软件使用与维护等三个时期。

  36. 1.2 软件的生命周期及其开发模型 • 软件定义 • 问题定义 • 可行性分析 • 需求分析 • 软件开发 • 系统设计 • 编码 • 测试 • 软件与维护

  37. 1.2软件的生命周期及其开发模型 • 软件生命周期的各个阶段: (1)问题定义 (2)可行性分析 (3)需求分析 分析软件需求,编写软件需求规格说明 (4)概要设计和详细设计 确定软件体系结构,设计软件模块 (5)程序编写 (6)软件测试 (7)运行和维护

  38. 1.2软件的生存周期及其开发模型 一、瀑布模型 • 瀑布模型的优点: • 通过设置里程碑,明确每阶段的任务与目标。 • 可为每阶段制定开发计划,进行成本预算,组织开发力量。 • 通过阶段评审,将开发过程纳入正确轨道。 • 严格的计划性保证软件产品的按时交付。 • 瀑布模型的缺点: • 缺乏灵活性,不能适应用户需求的改变。 • 开始阶段的小错误被逐级放大,可能导致软件产品报废。 • 返回上一级的开发需要十分高昂的代价。 • 随着软件规模和复杂性的增加,软件产品成功的机率大幅下降。 • 瀑布模型的适应范围: • 它主要适应于小规模的软件开发。

  39. 2.2 软件开发过程模型 二、原型模型 1. 基本思想 • 在获取一组基本的需求定义后,利用高级软件工具的可开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新的版本开发。反复进行这个过程,直到得出系统的“精确解”,即用户满意为止。经过这样一个反复补充和修改的过程,应用系统的“最初版本”就逐步演变为系统的“最终版本”。

  40. 1.2 软件的生存周期及其开发模型 • 原型:一个具体的可执行模型,它实现了系统的若干功能。 • 原型法:不断地运行系统“原型”来进行启发、揭示和判断的系统开发方法。

  41. 1.2软件的生存周期及其开发模型 • 原型法的主要思路: • 根据用户的需求迅速构造一个低成本的用于演示及评价的试验系统(原型) • 由用户对原型进行评价 • 在用户评价的基础上对原型进行修改或重构 。

  42. 1.2软件的生存周期及其开发模型 • 有了满意的系统原型,同时也积累了使用原型的经验,用户常会提出新目标,从而进一步重新构造原型周期。新目标的范围要比修改或补充不满意的原型大。 • (1)渐增型 • (2)用于验证软件需求的原型 • (3)用于验证设计方案

  43. 1.2软件的生存周期及其开发模型 3. 软件原型是软件的最初版本,以最少的费用、最短的时间开发出的、以反映最后软件的主要特征的系统。它具有以下特征: • (1)它是一个可实际运行的系统。

  44. 1.2软件的生存周期及其开发模型 • (2)它没有固定的生存期。一种极端是扔掉原型(以最简便方式大量借用已有软件,做出最后产品的模型,证实产品设想是成功的,但产品中并不使用); 另一种极端是最终产品的一部分即增量原型(先做出最终产品的核心部分,逐步增加补充模块),演进原型居于其中(每一版本扔掉一点,增加一点,逐步完善至最终产品)。

  45. 1.2软件的生存周期及其开发模型 • (3)从需求分析到最终产品都可作原型,即可为不同目标作原型。 • (4)它必须快速、廉价。 • (5)它是迭代过程的集成部分,即每次经用户评价后修改、运行,不断重复双方认可。

  46. 1.2软件的生存周期及其开发模型 • 快速原型法的特点: • 有直观的系统开发过程 • 用户参与系统开发的全过程 • 可以逐步明确用户需求 • 用户直接掌握系统的开发进度 • 用户接受程度高

  47. 1.2 软件的生存周期及其开发模型 • 快速原型法的不足: • 不适用于拥有大量计算或控制功能的系统 • 不适用于大型或复杂的系统 • 容易掩盖需求、分析、设计等方面的问题 • 结果不确定——随原型构造评价过程而定 • 整体考虑较少 • 快速原型法主要适应于: • 适用于解决有不确定因素的问题 • 适用于对用户界面要求高的系统 • 适用于决策支持方面的应用 • 适用于中型系统

  48. 1.2软件的生存周期及其开发模型 三、螺旋模型 • 在原型基础上,进行多次原型反复并增加风险评估,形成螺旋模型。

More Related