《软件工程基础ppt课件》由会员分享,可在线阅读,更多相关《软件工程基础ppt课件(24页珍藏版)》请在金锄头文库上搜索。
1、第三章 软件工程基础3.1 软件工程基本概念3.2 结构化分析方法3.3 结构化设计方法3.4 软件测试3.5 程序的调试3.1 软件工程基本概念 3.1.1 软件定义与软件特点1、软件的定义:软件是指与计算机操作相关的计算机程序、规程、规则 ,以及可能有的文件、文档及数据。2、软件的三个要素:程序、数据和文档。3、软件的特点:4、软件的分类:按功能分应用软件、系统软件和支撑软件(或工具软件 )3.1.2 软件危机与软件工程1、软件危机的含义:泛指在计算机软件的开发和维护中遇到的一系列严 重问题。2、软件危机主要表现为: 软件需求的增长的不到满足; 软件开发的成本和进度无法控制; 软件质量难以
2、保证; 软件不可维护或维护程度非常低; 软件的成本不断提高; 软件开发生产率的提高跟不上硬件的发展和应用需要的增长。3、软件危机产生的原因:宏观方面:技术进步跟不上增长需求从具体的工程来看:困难来源于软件工程所面临的任务和其他工程的 差异。4、软件工程的定义: 软件工程是应用于计算机软件的定义、开发和维护的一整 套方法、工具、文档、实践标准和工序。 软件工程的三个要素:方法、工具和过程。方法是完成软件工程项目的技术手段;工具是支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理 软件工程的核心思想是把软件当做一个工程产品来处理。3.1.3 软件工程过程与软件生命周期1、软件工
3、程过程定义:软件工程过程是把输入转化为输出的一组相关的资源和活动。内涵:软件工程过程是指为获得软件产品,在软件工具支持下由软件工 程师完成的一系列软件过程活动。从软件开发的观点来看,它就是使用适 当的资源,为开发软件进行一组开发活动,在过程结束时将输入(用户要 求)转为输出(软件产品)四个基本活动:Plan软件规格说明、Do软件开发Check软件确认和Action软件演进。2、软件生命周期定义:软件产品从提出、实现、使用维护到停止使用退役的全过程。三个阶段:见书上的图软件定义:可行性研究与计划制定、需求分析软件开发:概要设计、详细设计、软件实现、软件调试软件维护:软件的运行、维护和退役3.1.
4、4 软件工程的目标与原则1、软件工程的目标:目标是在给定成本、进度的前提下,开发出具有时 效性、可理解性、可维护性、可重用性、可移植性、可追踪性和可互操作 性且满足用户需求的产品。软件工程的理论和技术性研究的内容: 软件开发技术软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境。 软件工程管理软件工程管理包括:软件管理学、软件工程经济学、软件心理学等内容。 软件管理学包括人员组织、进度安排、质量保证、配置管理、项目计划等。2、软件工程的原则包括:抽象、信息隐蔽、模块化(低耦合)、局部化(高内聚)、确定 性、一致性、完备性和可验证性。3.1.5 软件工程工具与软件开发环境1、软件
5、工程开发工具软件工具的发展是从单项工具的开发逐步向集成工具发展的,软件工 具为软件工程的方法提供了自动的或半自动的软件支撑环境。 2、软件开发环境全面支持软件开发全过程的软件工具集合。计算机辅助软件工程( CASE)是当前软件开发环境中富有特色研究工作和发展方向。3.2 结构化分析方法 结构化方法的核心和基础是结构化程序设计理论。 软件开发方法包括:分析方法设计方法程序设计方法结构化方法包括结构化分析方法、结构化设计方法和结构化编程方法。3.2.1 需求分析与需求分析方法1、需求分析软件需求是指用户对目标软件系统在功能、性能、设计约束等方面的期望 。需求分析的任务是发现需求、求精、建模和定义需
6、求的过程。需求分析阶段的工作是需求获取、需求分析、编写需求规格说明书和需求评审 。 2、需求分析方法 两种: 结构化分析方法面向数据流的结构化分析方法(SA)、面向数据结构的Jackson方法(JSD )、面向数据结构的结构化数据系统开发方法(DSSD)。 面向对象分析方法从需求分析建立的模型的特性来分:静态分析和动态分析方法。3.2.2 结构化分析方法1、关于结构化分析方法结构化分析方法是结构化程序设计理论在软件需求分析阶段的应用。它是 基于功能分解的分析方法,其目的是帮助弄清用户对软件的需求。结构化分析 方法着眼于数据流。结构化分析方法的实质:着眼于数据流,自顶向下,逐层分解,建立系统的处
7、理流程, 以数据流图和数据字典为主要工具,建立系统的逻辑模型。 2、结构化分析的常用工具数据流图(DFD):描述数据处理过程的工具,是需求理解的逻辑模型的图形表示 ,它直接支持系统功能建模。图形:加工 、数据流 、数据源 、源 数据字典(DD):是对DFD中出现的被命名图形元素的确切解释。数据字典是 结构化分析的核心。图见书本 判定树:从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根 据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们 构造判定树。 判定表:与判定树相似,当数据流图中的加工要依赖于多个逻辑条件的取值,即完 成该加工的一组动作是由于某一组
8、条件取值的组合而引发的,使用判定表描述比较适宜 。 3.2.3 软件需求规格说明书(SRS)是需求分析阶段的最后成果,是软件开发中的重要文档 之一。作用:便于用户、开发人员进行理解和交流;反映出用户问 题的结构,可以作为软件开发工作的基础和依据;作为确认 测试和验收的依据内容:概述、数据描述、功能描述、性能描述、参考文献目 录和附录软件需求规格说明书的特点: (1)正确性;(2)无岐义性;(3)完整性;(4)可验证性; (5)一致性; (6)可理解性; (7)可追踪性。 3.3 结构化设计方法 3.3.1 软件设计的基本概念1、软件设计的基础软件设计是确定系统的物理模型。从技术观点看,包括结构
9、设计、数据设计、接口设计和过程设计。 从工程管理角度来看,软件设计分为两步:概要设计和详细设计。2、软件设计的基本原理(1)抽象 (2)模块化 (3) 信息隐蔽(4)模块独立性衡量软件的模块独立性使用耦合性和内聚性两个定义的度量标准。要求高内聚、低耦合模块的内聚性是指一个模块内的各处理元素之间的彼此结合的 紧密程度的度量。模块间内聚性从弱到强排列为:偶然内聚、逻辑内聚、时间内 聚、通信内聚、顺序内聚、功能内聚模块的耦合性是模块间互相连接的紧密程度的度量。模块间耦合由强到弱排列为:内容耦合、公共耦合、外部耦合 、控制耦合、标记耦合、数据耦合、非直接耦合3、结构化设计方法基本思想是将软件设计成由相
10、对独立、单一功能的模块组成 的结构。为了提高模块的独立性,应该尽量提高模块的内聚性 、降低模块间的耦合性。3.3.2 概要设计在需求分析阶段,已经将系统分解成层次结构,而在概要设计阶段,需要 进一步分解,划分为模块以及模块的层次结构1、概要设计的任务 设计软件系统结构 数据结构与数据库设计 编写概要设计文档 概要设计文档评审软件结构设计工具-结构图(SC),也称程序结构图。 P76图3.8结构图的基本符号有: 模块 数据信息 控制信息模块用一个矩形表示,箭头表示模块间的调用关系。 带实心圆的箭头表示传递的是控制信息,空心圆箭心表示传递的是数据。结构图的基本形式:基本形式、顺序形式、重复形式、选
11、择形式。 结构图有四种模块类型:传入模块、传出模块、变换模块和协调模块。程序结构图的有关术语:P77简单财务管理系统结构图 深度:表示控制的层数 上级模块、从属模块:上下两层模块a和b,且a调用b,由a是上级 模块,b是从属模块 宽度:整体控制跨度(最大模块数的层)的表示 扇入、扇出:扇入是指调用一个给定模块的模块数;扇出是指 一个模块直接调用其他模块数 原子模块:树中位于叶子结点的模块2、面向数据流的设计方法典型的数据流的类型:变换型和事务型 变换型:是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入 系统的信息通过变换中心,经过加工处理后再沿输出通路变换成外部形式离开软 件系统
12、。 B、事务型:在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处 理,这些处理能够完成作业要求的功能,这种数据流叫做事务型数据流变换型系统结构图由输入、中心变换、输出三部分组成。3、设计的准则经验表明,好的软件设计结构通常顶层高扇出,中间扇出 较少,底层高扇入。3.3.3 详细设计1、详细设计的任务:为软件结构图中的每一个模块确定实现算 法和局部数据结构,用某种选定的表达工具表示算法和数据结构的 细节。2、过程设计的任务:对模块规定的功能以及算法的设计,给出 适当的算法描述。3、过程设计的工具:图形工具:程序流程图(PFD).N-S图.问题分析图(PAD图).HIPO表格工具:判定
13、表语言工具:PDL(过程设计语言)程序流程图的基本图符:控制流 加工 逻辑条件 书P81或3.4 软件测试 软件测试是保证软件质量的重要手段,其主要过程涵盖了整个软件生命期的过程 ,包括需求定义阶段的需求测试、编码阶段的单元测试、集成测试以及后期的确 认测试、系统测试,验证软件是否合格、能否交给用户使用等。3.4.1 软件测试的目的为了发现错误而执行程序的过程。3.4.2 软件测试的准则 所有测试都应追溯到需求 严格执行测试计划,排除测试的随意性 充分注意测试中的群集现象 程序员应避免检查自己的程序 穷举测试不可能,测试只能证明程序中有错误,不能证明没有错误 妥善保存测试计划、测试用例、出错统
14、计和最终分析报告3.4.3 软件测试技术与方法综述从是否许需要执行被测软件的角度,可以分为静态测试和 动态测试;按照功能划分可以分为白盒测试和黑盒测试。1、静态测试和动态测试静态测试主要包括代码检查、静态结构分析、代码质量度量 等;动态测试是基于计算机的测试,是为了发现错误而执行程序 的过程。设计高效、合理的测试用例是动态测试的关键。测试用例(Test Case)是为测试设计的数据。测试用例由输入 数据和与之对应的预期输出结果两部分组成。测试用例的格式为:输入值集和输出值集2、白盒测试和黑盒测试(1)白盒测试白盒测试方法也称结构测试或逻辑驱动测试。它是根据软件产品的内部工 作过程,检查内部成分
15、,以确认每种内部操作符合设计规格要求。白盒测试的基本原则:保证所测模块中每一独立路径至少执行一次;保证所测模块所有判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;验证所有内部数据结构的有效性。白盒测试的主要方法:逻辑覆盖:逻辑覆盖泛指一系列以程序内部的逻辑结构为基础的测试用例设计技 术。逻辑覆盖测试方法有:语句覆盖、路径覆盖、判定覆盖、条件覆盖、判断- 条件覆盖;基本路径测试:其思想和步骤是,根据软件过程性描述中的控制流程确定程序的 环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例,对每一条 独立执行路径进行测试 (2)黑盒测试黑盒测试也
16、称为功能测试或数据驱动测试。是对软件已经实现的功能是否 满足需求进行测试和验证。方法主要有:等价类划分法:将程序的所有可能的输入数据划分成若干部分(及若干等价 类),然后从每个等价类中选取数据作为测试用例 边界值分析法:它是对各种输入、输出范围的边界情况设计测试用例的方法 。错误推测法:靠经验和直觉推测程序中可能存在的各种错误,从而有针对性 地编写检查这些错误的例子的方法因果图3.4.4 软件测试的实施四个步骤:(1)单元测试:对模块进行正确性检验(最小单元);(2)集成测试:发现与接口有关的错误;(3)确认测试(验收测试):测试功能是否符合要求;(4)系统测试:在实际运行环境中进行一系列的集成测试 和确认测试。3.5 软件调试 程序调试的任务是诊断和改正程序中的错误,而软件测试是尽可能地发 现软件中的错误,测试贯穿整个软件生命周期,而调试主要在开发