软件工程复习.doc_第1页
软件工程复习.doc_第2页
软件工程复习.doc_第3页
软件工程复习.doc_第4页
软件工程复习.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1 软件工程的由来w “软件工程”这个词是由NATO(North Atlantic Treaty Organization北大西洋公约组织属下的一个研究组在1967年提出的,这个研究组提议召开一次会议,专门讨论“软件所面临的问题”。1968年,由NATO科学委员会主办的这次会议在德国加米施(Garmish)召开,会议提交的报告就被命名为软件工程 。w 1968年NATO提出软件工程的概念,倡导以工程的原理、原则和方法进行软件开发,以期解决当时出现的软件危机。2 软件危机的定义 软件危机定义 软件危机定义:软件开发和维护过程中遇到的一系列严重问题。 软件危机包含两方面的问题: 如何开发软件,以满足对软件日益增长的需求; 如何维护数量不断膨胀的已有软件。 3 产生软件危机的原因 1、软件本身的特点 软件是个逻辑实体,不是物理实体,具有抽象性管理和控制软件困难 软件规模庞大软件开发困难 软件故障是在开发过程中产生而在测试时没有发现的问题软件故障修改困难 软件维护会产生新的错误软件维护困难 2、人为因素,软件开发和维护的方法不正确w 1)软件开发技术落后、生产方式落后、开发工具落后w 2)对用户要求没有完整准确认识就匆忙着手编写程序w 3)只重视程序而忽视软件配置其余成分: 4)轻视维护:维护费用占软件总费用的55%-70% 4 软件危机的消除 缓解软件危机的途径w 1、更新观念:采用工程化的方法和途径来开发与维护软件w 2、汲取系统工程的理念,采用必要的组织管理和技术管理措施w 3、应该不断地发现、完善、推广、使用再实践中总结出来的开发软件的成功的技术和方法。w 4、开发和使用更好的软件工具,提高软件生产率。 5 软件工程、软件过程的定义w 软件工程 采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。w 软件过程 为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。6 软件工程的目标w 软件工程是一门工程性的学科,软件工程的目标是成功地构造一个大型软件系统。所谓成功是指达到以下标准:w 有较低的开发成本。w 能达到用户所要求的软件功能。w 有很好的软件性能。w 软件有较好的可移植性、稳定性、健壮性和可靠性。w 有较好的可维护性,较低的维护成本。w 能按计划规定的进度开发,及时交付使用。7 软件过程与软件工程方法学关系w 目前使用得最广泛的软件工程方法学可以分为w 传统方法学 面向数据流设计方法 面向数据结构设计方法。w 面向对象方法学w 软件过程是软件工程方法学的三个要素(方法、工具和过程)之一。软件过程必须科学、合理才能获得高质量的软件产品。8 软件工程基本原理 用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性9 软件生命周期各阶段的任务w (1)问题定义 确定系统的目标、规模和基本任务。w (2)可行性研究 从经济、技术、法律等方面分析确定系统是否值得开发,及时建议停止项目开发,避免人力、物力、时间的浪费。w (3)需求分析 确定软件系统应具备的具体功能。通常用数据流图、数据字典和简明算法描述表示系统的逻辑模型,防止系统的设计与用户的实际需求不相符的后果。w (4)概要设计 确定系统设计方案,软件的体系结构。确定软件由哪些模块组成以及这些模块之间的相互关系。w (5)详细设计 描述应该如何具体地实现系统。详细设计每个模块,确定实现模块所需要的算法和数据结构。 (6)软件实现阶段 进行程序设计(编码)和模块测试。 (7)综合测试阶段 通过各种类型的测试,查出软件设计中的错误并改正,确保软件质量;还要在用户的参与下进行验收,才可交付使用。 (8)软件运行、维护 软件运行期间,通过各种必要的维护使系统改正错误、或修改扩充功能使软件适应环境变化,以便延长软件的使用寿命,提高软件的效益。每次维护的要求及修改步骤都应详细准确地记录下来,作为文档保存。10 软件开发模型 瀑布模型 快速原型模型(Rapid Prototype Model) 增量模型 喷泉模型 螺旋模型 (Spiral Model) RUP(统一过程) 11 CASE的定义w 在软件工程活动中,软件工程师和管理员按照软件工程的方法和原则,借助于计算机及其软件工具的帮助,开发、维护、管理软件产品的过程,称为计算机辅助软件工程CASE (Computer-Aided Software Engineering)。第2章 软件计划1可行性研究的内容w 经济可行性 :进行成本效益分析。从经济角度判断系统开发是否“合算”。w 技术可行性 :进行技术风险评价。从开发者的技术实力、以往工作基础、问题的复杂性等出发,判断系统开发在时间、费用等限制条件下成功的可能性。w 法律可行性 :确定系统开发可能导致的任何侵权、妨碍和责任。w 方案的选择 :评价系统或产品开发的几个可能的候选方案。最后给出结论意见。 2 需求分析的任务w 需求分析的基本任务 尽可能准确地回答“系统必须做什么?”这个问题。 软件人员和用户一起完全弄清用户对系统的确切要求 w 需求分析具体任务 1、确定目标系统的具体要求 2.建立目标系统的逻辑模型 3.书写“软件需求规格说明” 4.修正系统的开发计划 5.制定初步的系统测试计划 6.编写初步的用户手册 7. 编写数据要求说明书 3数据流图的符号 w 1、数据流图的基本符号w4.根据需求描述画数据流图w 招干考试成绩管理系统w 某校医疗费管理系统w 房地产经营管理系统w 火车卧铺订票系统4根据需求描述画数据流图 1)从问题描述中提取四种成分 数据源点:考生 数据终点:考生 处理:招干考试成绩管理系统 数据流:输入流:考生情况、考生成绩;输出流:考生成绩单、录用通知书 数据存储: 2)画顶层数据流图 5 画数据流图的注意点w 命名:数据流图中每个成分的命名是否恰当,直接影响数据流图的可理解性。w 数据流图中不可夹带控制流;w 子、父图平衡;w 子图中出现的数据存储可以不出现在父图中;w 分解一层时一般不宜超过59个处理逻辑,一个处理逻辑分解到基本处理逻辑为止。6 数据字典数据元素组成数据的方式w 数据字典中数据元素组成数据的方式: 顺序:以确定次序连接两个或多个分量; 选择:从两个或多个可能的元素中选一个; 重复:把指定的分量重复0 次或多次。 可选:一个分量可有可无(重复0 次或1 次) 7 数据字典定义使用的符号w 符号: 1)= 定义为 2)+ 连接两个分量 A+B 3) A或B A/B/C或 A|B|C 4) 重复 1A5 5)()可选 (A,B)8 其它需求分析图形工具 w 层次图 w Warnier图 w IPO图 第3章 结构化设计 1.软件设计的两个阶段 概要设计(总体设计):通常是确定系统的设计方案和结构设计两个阶段,与此同时要进行数据库设计和制定测试计划。 详细设计:进行过程设计、系统接口设计和数据设计。 2.概要设计的基本任务 1确定设计方案 2软件总体结构设计 3数据文件设计 4制定测试计划 5书写概要设计文档 6审查和复审3.软件结构设计 确定系统由哪些模块组成,并确定模块之间的相互。在详细设计阶段确定每个模块处理过程。4 模块和模块化定义 模块:又称构件,是能够单独命名并独立地完成一定功能,独立地设计、编制、调试、查错、修改和维护的程序语句的集合。例如高级语言中的过程、函数、子程序等都可作为模块。 模块化:把系统按照一定的规则分割成分割成能完成独立功能的模块,明确规定各模块及其输入输出规格,使模块的界面不会产生混乱。5模块化可产生的效果 1)降低复杂度 2)提高软件的可靠性 3)提高可维护性 4)有助于软件开发工程的组织管理 5)有助于信息隐藏和局部化6 划分模块的原则 评价模块分割的标准有以下几个方面: 模块的大小: 模块的大小以模块的功能意义、复杂程度、易于理解、便于控制为标准。 模块之间的联系程度(耦合) 模块内的联系程度(内聚) 模块信息的隐蔽程度。 7耦合(coupling)w 软件结构中各个模块之间相互依赖的程度的度量。 w 耦合七等级w 非直接耦合:调用和被调用模块之间不存在直接的数据联系。w 数据耦合:调用和被调用模块之间存在简单变量这样的数据传递。w 特征耦合:调用和调用模块之间存在诸如数组这样的数据结构的数据传递。w 控制耦合:耦合的模块之间传递的不是数据信息,而是控制信息,或称开关量或标志量。w 外部耦合:允许多个模块访问同一个全局变量。w 公共耦合:允许多个模块访问同一个全局性数据结构。w 内容耦合:允许一个模块直接调用另一个模块中的数据。w 非直接耦合、数据耦合、特征耦合属于弱耦合。非直接耦合是最希望的情况。8 内聚w 内聚指的是一个模块内部各组成部分的处理动作的组合强度,又称块内联系。w 内聚七等级 偶然内聚:模块内各成分无实质性的联系,只是偶然地被凑到一起。 逻辑内聚:模块内部各组成部分的处理动作在逻辑上相似,但功能却彼此不同或无关。 时间内聚:将若干在同一个时间带内进行的工作集中在一个模块内,但这些工作彼此无关。 过程内聚:模块内部包含的各个成分按照某种确定的顺序进行,但所做工作没有什么关系。 通讯内聚:模块内的各个组成部分都使用相同的输入数据或产生相同的输出数据。 顺序内聚:模块中各个组成部分顺序执行,前一个成分的输出就是后一个成分的输入。 功能内聚:模块内的各个组成部分全都为完成同一个功能而存在,共同完成一个单一的功能,并且只完成一个功能。9 软件结构设计的图形工具 层次图和HPIO图 结构图(Structured Chart ,SC) 10 结构图(SC)(1) SD方法在概要设计中的主要表达工具 约定编辑学生记录读学生记录学生数据无此学生学号不加区分的数据数据信息控制信息w 结构图(SC)(2)w SC中的简单调用BACx,yzzw 结构图(SC)(3)w SC中的选择调用ACBDA根据内部判断决定是否调用BA按另一判定结果选择调用C或D结构图(SC)(4)w SC中的循环调用BCA根据内在的循环重复调用B、C等模块w11数据流图的分类 变换型数据流图 事务型数据流图。 12 过程设计工具 1 程序流程图 2 盒图(N-S图) 3 PAD图(Problem Analysis Diagram) 4 判定表 5 判定树 6 PDL(过程设计语言) 13 盒图(N-S图,Nassi-Shneiderman1973 )N-S图由而且仅由顺序、选择、循环三种基本结构组成。基本图例如下:14 PAD图 其基本控制结构如下:15 判定表、判定树 能够根据描述画出对应的判定表、判定树第4章 软件编码和软件测试1.程序内部的文档包括 恰当的标识符(变量和标号)的名字; 适当的注释; 程序的视觉组织。 2.程序的注释w 程序的注释分为两种:序言性注释和功能性注释。 序言性注释通常安排在每个程序模块的起始部分,它是对程序的整体说明,对于理解程序本身具有引导作用。 功能性注释嵌入在源程序体内,用以描述其后的语句或程序段的处理功能。 书写功能性注释,注意以下几点:w 描述的对象是一段程序,而不是每一个语句;w 适当使用缩进和空行,使程序与注释容易区别;w 注释一定要准确。不精确的甚至是错误的注释不仅对理解程序毫无帮助,反而会妨碍对程序的理解。3. 软件测试对象w 测试对象包括整个阶段的文档和程序,包括需求分析说明书、概要设计规格说明、详细设计规格说明、源程序等。4 测试用例w 把以发现错误为目标,用于软件测试的输入数据及与之对应的预期输出结果叫做测试用例。 5静态分析与动态测试w 静态分析: 不执行测试软件,而是通过对需求分析说明书、软件设计说明书及源程序做结构检查、流程图分析、编码分析等来找出软件错误。 w 动态测试: 执行程序并分析程序来查错。 6 黑盒法与白盒法 黑盒法 又称:功能测试、数据驱动测试、基于规格说明书的测试 不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。 白盒法 又称:结构测试、玻璃盒测试、 基于覆盖的测试. 分析程序的内部逻辑结构,注意选择适当的覆盖标准,设计测试用例,对主要路径进行尽可能多的测试。7软件测试的目标w 不论黑盒还是白盒测试都不能进行穷尽测试, 所以软件测试不可能发现程序中存在的所有错误, 因此需精心设计测试方案, 力争尽可能少的次数,测出尽可能多的错误.8 测试原则 (1)开发和测试队伍分别建立 (2)测试用例应由输入数据和预期的输 出结果两部分组成. (3)兼顾合理的输入和不合理的输入数据 (4)应检查程序是否作了不该做的事 (5)注意群集现象 (6) 程序修改后要回归测试 (7)应长期保留测试用例,直至系统废弃。9 软件测试步骤w 单元测试w 集成测试w 程序审查会和人工运行w 确认测试w 系统测试w 平行运行10 单元测试(模块测试) 时间 在源程序代码经过编译、评审,确认没有语法错误之后,便可开始进行。 测试者 单元测试可以由程序作者进行,也可以由同行互测对方的单元进行。主要目的是检查模块内部的错误。因此,测试方法应以白盒法为主。 测试策略: 单元测试一般总把白盒法盒黑盒法结合运用。先用黑盒法设计出一组基本的测试用例,然后用白盒法,根据覆盖标准补充新的测试用例以满足覆盖标准。 在一般情况下,单元测试应以白盒法为主。11 集成测试w 集成测试(Integration Testing)也称为联合测试或组装测试,有组装和检验两重意义。w 测试者: 独立的测试小组w 测试策略 测试方法以黑盒法为主。 12 确认测试 确认测试(validation testing),又称为有效性测试或验收测试。其任务是验证系统的功能、性能等特性是否符合需求规格说明。 测试者 以任务委托单位及用户代表为主参加测试; 测试策略 一般在模拟的环境下,运用黑盒法进行; 13 系统测试w 系统测试(system testing )是把软件、硬件和环境连接在一起,在实际运行环境下进行全面测试,检查系统是否与需求分析一致,主要针对分析和设计阶段的错误。w 测试方法主要是黑盒法。14 逻辑覆盖w 逻辑覆盖是以程序的内部逻辑结构为基础的测试用例设计技术,属于白盒测试。 语句覆盖:设计足够的测试用例,使得程序中的每个语句至少执行一次。 判定覆盖:设计足够的测试用例,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次,判定覆盖又称分支覆盖。 条件覆盖:设计足够的测试用例,使得程序判定中的每个条件能获得各种可能的结果。 判定/条件覆盖:设计足够的测试用例,使得判定中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。 条件组合覆盖:设计足够的测试用例,使得每个判定中的条件的各种可能组合都至少出现一次。w 能够根据PDL描述画出对应的程序流程图、N-S图、PAD图,并根据覆盖要求设计测试用例。15 等价类划分 等价类划分属于黑盒测试。使用等价类划分设计测试用例时,主要依据程序的功能说明。 等价类划分方法:根据输入数据和输出数据的特点,将程序输入域划分成若干个部分,即子集,每个子集中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。因此从每个子集中选取具有代表性的数据作为代表进行测试来发现程序中的错误。 有效等价类:符合需求规格及软件设计规定的数据子集。 无效等价类:不符合需求规格及软件设计规定的数据子集。第5章 软件维护1. 软件维护的定义w 软件维护就是在软件已经交付使用以后对其进行修改,以纠正错误或改进性能和其他属性,使产品适应改变了的环境。 2. 软件维护的分类w 软件维护的类型 完善性维护:扩充原有系统的功能,提高系统的性能,提高软件运行的效率,满足用户的实际需要而进行的维护活动。 纠错性维护:对在测试阶段未能发现的,在软件投入使用后才逐渐暴露出来的错误的测试、诊断、定位、纠错以及验证、修改的回归测试过程,称为纠错性维护。 适应性维护:计算机的软、硬件环境,数据环境在不断的变化,使运行的软件能适应运行环境或者数据的变动而修改软件的过程称为适应性维护。 预防性维护:为了进一步改善软件的可靠性和易维护性,或者为预见的将来软件运行和维护打下更好的基础而对软件进行修改。3.结构化维护与非结构化维护的对比.结构化维护与非结构化维护的对比 非结构化维护 缺乏必要的文档说明,文档缺少或者不一制,难于确定数据结构、系统接口等特性,这样的维护工作令人生畏,事倍功半。 结构化维护 指软件开发过程是按照软件工程方法进行的,开发各阶段的文档齐全,软件的维护过程,有一整套完整的方案、技术、审定过程及文档。 4 软件维护的副作用w 修改代码的副作用:在修改源代码时,可能引起的错误。w 修改数据的副作用:在修改数据结构时,有可能造成软件设计与数据结构不匹配,因而导致软件出错。w 修改文档过程会产生新的错误,导致文档与程序功能不匹配、缺省条件改变等错误,产生文档的副作用。5 软件可维护性的定义w 软件可维护性是指维护人员对该软件进行维护的难易程度,具体包括理解、改正、改动和改进软件的难易程度。 6 可维护性的度量w 可理解性:表明人们通过阅读源代码和相关文档,了解程序功能及其如何运行的容易程度。w 可靠性:表明一个软件按照用户的要求和设计目标,在给定的一段时间内正确执行的概率。w 可测试性:表明论证软件正确性的容易程度。对于程序模块,可用程序复杂性来度量可测试性。w 可修改性:一个可修改的软件应当是可理解的、通用的、灵活的、简单的。w 可移植性:表明软件转移到一个新的计算环境的可能性的大小。或者软件能有效地在各种环境中运行的容易程度。一个可移植性好的软件应具有良好、灵活、不依赖于某一具体计算机 或操作系统的性能。w 效率:包括时间和空间的效率。w 可使用性:从用户的角度出发,将可使用性定义为程序方便、实用及易于使用的程度。7 提高可维护性的方法w 软件的可维护性对于延长软件的生存期具有决定的意义;因此必须考虑如何才能提高软件的可维护性,为此,需从以下几个方面考虑: 建立明确的软件质量目标 使用提高软件质量的技术和工具 进行明确的质量保证审查 选择可维护的程序设计语言 改进程序的文档第6章 面向对象方法学与UML1.面向对象开发技术的基本思想 面向对象方法解决现实世界中复杂问题的方法,就是将现实世界的问题从组成结构上自然分解成一个个对象,用对象及对象之间的联系建立起问题域的模型。 这种分解方式同传统的从功能角度对问题进行分解的方法完全不同,它对现实世界的描述更加直接并且更符合人类的思维方式。2.面向对象方法的主要优点 与结构化方法相比,面向对象方法有以下优点: 符合人们通常的思维方式 稳定性好 可重用性好 容易开发大型软件产品 可维护性好 3 面向对象的软件工程方法 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程(OOP) 面向对象的测试(OOT) 面向对象的维护(OOSM)4 UML图 五类九种图 用例图:用于表示系统的功能,并指出各功能的操作者 静态图:包括类图、对象图及包,表示系统的静态结构 行为图:包括状态图和活动图,用于描述系统的动态行为和对象之间的交互关系 交互图:包括顺序图和合作图,用于描述系统的对象之间的动态合作关系 实现图:包括构件图和配置图,用于描述系统的物理实现 5 用例图 用例代表某些用户可见的功能,实现一个具体的用户目标。 整个系统功能是由一系列用例组成,所有用例全部设计完成,系统设计工作也就完成了,这就是用例驱动方法。 用例图从用户的角度描述系统功能,并指出各功能的操作者。 用例图中的主要元素是:用例、执行者和通信联系。对于系统开发人员来说,用例是一个有价值的工具:它是用来从用户的观察角度收集系统需求的靠得住的一项技术。 代表洗衣机用户的人形图被称为参与者,椭圆形代表用例。 参与者是发起用例的实体,可以是一个人也可以是另一个系统。6 类图和包w 类的图标由类名、类的属性、类的操作三部分组成。w 类图就是由这些类框和表明类之间关联的连线所组成。w7 对象图w 对象是类的一个实例,是具有具体值和行为的一个具体事物。w 对象有三种表示方式: 对象名:类名 :类名 对象名8状态图w 在任一给定的时刻,一个对象总是处于某一特定的状态。w 9活动图w 活动图是状态图的一种特殊情况。不需指明任何事件,只要动作被执行,活动图中的状态就自动开始转换。ww 如果状态转换的触发事件是内部动作的完成,可用活动图描述;w 当状态的触发事件是外部事件时,常用状态转换图表示。10 协作图 协作图用于描述系统中相互协作的对象之间的交互关系和关联链接关系。11 组件图(构件图)w 组件是逻辑事物的物理包。w 组件图表示系统中的不同的物理组件及其联系,它表达的是系统代码本身的结构。12配置图(部署图)w 配置图用来描述计算机和设备,展示它们之间的连接,以及驻留在每台机器中的软件。w第7章 面向对象设计及UML应用1 面向对象分析建立三个模型及作用w 对象模型:描述系统组成。几乎解决任何一个问题,都需要从客观世界实体

温馨提示

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

评论

0/150

提交评论