贵大软件工程复习资料 - 图文

更新时间:2024-04-03 13:28:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软件工程 复习 第1章 软件工程概述 什么是计算机软件?

? 计算机软件指计算机系统中的程序、数据及其相关文档的集合。

? 三要素:软件=程序+文档+数据

? 程序是按照特定顺序组织的计算机数据和指令的集合。 ? 数据是使程序能正常执行的数据结构。

? 文档是与程序的开发、维护和使用有关的资料。它是为了便于了解程序所需的阐

明性资料,文档一般是给人看的,不一定装入计算机。

软件的主要特点

? 软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确地估算。 ? 软件是被开发的或被设计的,它没有明显的制造过程,一旦开发成功,只需复制即可,

但其维护的工作量大。

? 软件的使用没有硬件那样的机械磨损和老化问题。

软件的分类

? 系统软件:属于计算机系统中最靠近硬件的一层,其它软件一般都通过系统软件发挥

作用,它与具体的应用领域无关。如操作系统、编译程序等。

? 支持软件:支持软件的开发和维护的软件。如数据库管理系统、网络软件、软件开发

环境等。

? 应用软件:特定应用领域专用的软件。如实时软件、嵌入式软件、科学和工程计算软

件、事务处理软件、人工智能软件等。

? 按软件工作方式划分:

? 实时处理软件 ? 分时软件 ? 交互式软件 ? 批处理软件

? 按软件服务对象的范围划分:

? 项目软件 ? 产品软件

? 按使用的频度进行划分:

? 一次使用 ? 频繁使用

? 按软件失效的影响进行划分:

? 高可靠性软件 ? 一般可靠性软件

软件工程定义

? B.W.Boehm的定义:运用现代科学技术知识来设计并构造计算机程序,以及为开发、

运行和维护这些程序所必须的相关文件资料。

? Fritz Bauer的定义:软件工程是为了经济地获得能够在实际机器上有效运行的可靠软

件,而建立和使用的一系列完善的工程化原则。

? 1983年美国《IEEE软件工程标准术语》的定义为:软件工程是开发、运行、维护和

修复软件的系统方法,其中“软件”的定义为:计算机程序、方法、规则、相关的文档资料,以及在计事机上运行时所必需的数据。

软件工程化思想

? 把软件看作是一个工程产品。 ? 两个方面:

? 软件开发技术 ? 软件工程管理 ? 原因:

? 缺乏软件过程控制能力

? 能力成熟模型(Capability Maturity Model) ? 体现:

? 工程化管理

软件工程基本原理

? 推迟实现原理:软件方法学的一条基本思想。把逻辑设计与物理设计清楚地划分开来,

尽可能推迟软件的物理实现。

? 逐步求精原理,求解一个复杂问题,采用从抽象到具体,有条理地逐步分解与细化方

法和过程进行。

? 分解与抽象原理,是把复杂问题趋于简单化处理的有效策略。

? 信息隐蔽原理,把一些关系密切的软件元素物理地放得彼此靠近,使信息最大限度地

局部化。

? 质量保证原理,是软件与文档中明确描述的功能和性能需求、开发标准以及任何专业

开发的软件产品具有的隐含特征相一致的程度。

软件工程基本原则

? 1983年提出了软件工程的7条基本原则: ? 分阶段的软件生存周期 ? 坚持进行阶段评审 ? 实行严格的产品控制 ? 采用现代程序设计技术 ? 明确职责

? 开发小组的人员应少而精 ? 不断改进开发过程

软件工程两大范型

? 结构化开发范型

? 特征:结构化技术要么面向行为,要么面向数据 ? 构成结构化开发范型的技术包括:

? ? ? ? ?

结构化分析 结构化设计 结构化编程 结构化测试 结构化维护

软件工程两大范型

? 面向对象范型

? 特征:将对象视作一个融合了数据及在其上操作的行为的、统一的软件组件。 ? 技术包括:

? 面向对象分析 ? 面向对象设计 ? 面向对象编程 ? 面向对象测试 ? 面向对象维护 ? 优势:

? 对象的概念符合业务或领域的客观实际 ? 维护容易

第2章 软件过程

软件过程

? 定义:

? 软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有

关软件工程的活动。

? 通常使用生命周期模型简洁地描述软件过程。 ? 层次:

? 软件工程是一门建立在以质量焦点为基础的层次化综合技术。

? 过程:定义阶段和管理。 ? 方法:技术支持。

? 工具:自动化实施支持。

软件过程框架

? 定义:

? 框架是实现整个软件开发活动的基础,并且那些与过程有关的角色、职责的定义

以及实现也都离不开框架的支持。

软件过程模型

? 把软件生命周期中各项开发活动的流程用一个合理的框架—开发模型来规范描述,这

就是软件过程模型,也称为软件生命周期模型。

能力成熟度模型

? CMM是对软件组织在定义、实施、度量、控制和改善其软件过程的各个发展阶段的描

述,是国际公认的对软件公司进行成熟度等级认证的重要标准。

? 能力成熟度模型集成(CMMI--Capability Maturity Model Integration)是CMM模型

的最新版本。

CMM的五个级别

? CMM提供了一个成熟度等级框架:1级-初始级、 2级-可重复级、3级-已定义级、4

级-已管理级和5级-优化级。

? 1.初始(initial)级:过程无序且不可见。 ? 软件过程的特点是无秩序的,甚至是混乱的。几乎没有什么过程是经过妥善定义的,

成功往往依赖于个人或小组的努力和机遇。 ? Level 1:初始级

In

Out

? 2.可重复(repeatable)级:里程碑可见,按计划开发。 ? 建立了基本的项目管理过程来跟踪成本、进度和功能特性。制定了必要的过程纪律,

能重复早先类似应用项目取得的成功。

Level 2:可重复级

? 3.已定义(defined)级:每个阶段的内部活动可见,标准过程和项目定义过程裁

? 己将管理和工程活动两方面的软件过程文档化、标准化,并综合成该机构的标准软

件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件。

Level 3:定义级

4. Level 4已管理(managed)级:过程可度量,预测值与结果之间的偏差可控。

收集对软件过程和产品质量的详细度量值,对软件过程和产品都有定量的理解和控制。

Level 4 管理级

5. Level 5优化(optimizing)级:过程动态调整、新技术的采用。

整个组织关注软件过程改进的持续性、预见及增强自身,防止缺陷及问题的发生。过程的量化反馈和先进的新思想、新技术促使过程不断改进。

Level 5 优化级

极限编程

? 极限编程(eXtreme Programming,XP)是一种软件工程方法学,是敏捷开发中最

富有成效的方法学之一。

? 具有强沟通、简化设计、迅速反馈等特点。

? 适合于规模小、进度紧、需求不稳定、开发小项目的小团队。

极限编程

? 核心有四个要点:

? 交流 ? 简单 ? 反馈 ? 勇气

Pair Programming ( 结对编程 )

结对编程

? 结对编程(Pair-Programming) 是XP中非常重要的实践之一。

? 定义:两个人坐在同一台计算机前面,使用相同的键盘和鼠标来开发同样的一个模块,

一个称为驾驶者(Driver),负责代码的键入,另外一个称为领航员(Navigator),负责监看与决策,包括低级错误和方向性的错误。

? 当出现的一个问题对其中一个人来说,难以解决,而恰好是另外一个人的强项的时候,

那么角色就会发生转换。 ? ? ? ?

如何结对编程?

Driver – 写设计文档(Class diagram等),进行编码(Unit Test and Business Object)等XP开发流程。

Navigator – 审阅Driver的文档、Driver对编码等开发流程的执行;考虑Unit Test的覆盖程度;是否需要和如何Refactoring;帮助Driver解决具体的技术问题。

Driver和Navigator不断轮换角色,不要连续工作超过一小时,每一小时休息15分钟。Navigator要控制开发时间。

主动参与 – 虽然每个Engineering Task都有owner,但不能以旁观者的心态来做。任何一个Task都首先是两个人的责任,也是所有人的责任。没有“我的Code”、”你的Code”或“她的Code”,只有“我们的Code”。 如何结对编程?

只有水平上的差距,没有级别上的差异。一个Pair,尽管可能大家的级别资历不同,但不管在分析,设计或编码,双方都拥有平等的决策权利。

Pairs之间互换Partner。每个Task都应该和不同的Developer配对。 每隔一天,甚至是半天,互换Partners。但Task的owner因该继续留该Task的Pair中。 如果Pair中的一人请假,另一人应尽量不要写 Production Code。 Pair一起加班。

? ? ? ? ? ?

软件工程实践

? 软件工程实践的精髓是理解问题、计划解决方案、实施计划和检查结果的精确度等方

面。

? 通用的框架活动包括:

? 沟通 ? 计划 ? 建模 ? 部署

? 普适性活动

第3章 软件过程模型

? 典型的软件过程模型有:

? 瀑布模型(waterfall model) ? 演化模型(evolutionary model) ? 增量模型(incremental model) ? 原型模型(prototyping model) ? 螺旋模型(spiral model)

? 面向对象过程模型——喷泉模型(water fountain model) ? 基于构件的开发模型(component-based development model) ? 形式方法模型(formal methods model) ? 统一过程模型(unified procdss model)

软件过程模型

? 软件过程模型是软件开发全部过程、活动和任务的结构框架。 ? 也称软件开发模型或软件生存周期模型。

软件生存周期

? 软件也有一个从生到死的过程,这个过程一般称之为软件的生存周期或生命周期

(Software Development Life Cycle)。

? 软件生存周期包括可行性分析、项目计划、需求分析、软件设计、编码与测试、维护等

阶段,每个阶段包含一系列的活动。

一.瀑布模型

? 瀑布模型将软件生命周期划分为软件计划、需求分析和定义、设计、实现、测试、运

行和维护这6个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水逐级下落。

瀑布模型特点

? 顺序性和依赖性——接受上一阶段的结果作为本阶段的输入,上一阶段的输出正

确,下一阶段的工作才能获得正确的结果。

? 推迟实现——清楚地区分逻辑设计与物理设计,尽可能推迟程序的编程实现。 ? 质量保证的观点,重视各个阶段的文档齐备。

缺点

? 缺乏灵活性,难以适应需求不明确或需求经常变化的软件开发。 ? 开发早期存在的问题往往要到交付使用时才发现,维护代价大。

二.演化模型

? 许多软件项目在开发早期对软件需求的认识是模糊的、不确定的,因此软件很难一次

开发成功。

? 演化模型的开发过程就是从构造初始的原型出发,逐步将其演化成最终软件产品的过程。

? 演化模型适用于对软件需求缺乏准确认识的情况。

? 典型的演化模型有:增量模型、原型模型、螺旋模型。

1.增量模型

? 增量模型(Incremental Model)也称为渐增模型,是在项目的开发过程中以一系列的

增量方式开发系统。 ? 增量方式包括:

? 增量开发:以一定的时间间隔开发部分工作软件。

? 增量提交:以一定的时间间隔增量方式向用户提交工作软件及相应文档。

2.原型模型

? 原型(prototype)是预期系统的一个可执行版本,它反映了系统性质(如功能、计算

结果等)的一个选定的子集。一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型。

? 原型方法从软件工程师与客户的交流开始,其目的是定义软件的总体目标,标识需求。

然后快速制订原型开发的计划,确定原型的目标和范围,采用快速设计的方式对其建模,并构建原型。

3.螺旋模型

? 螺旋模型(Spiral Model)是结合了瀑布模型和快速原型模型的迭代开发模型,是瀑

布模型和演化模型的结合,并增加了风险分析。 ? 强调了其他模型均忽略了的风险分析:

? 风险识别 ? 风险分析 ? 风险控制

? 特别适合于大型复杂的系统。

? 每一个周期都包括需求定义、风险分析、工程实现和评审。

螺旋模型活动

? 四个象限分别代表了以下活动:

? 制定计划:确定软件目标,选定实施方案,确定项目开发的限制条件; ? 风险分析:分析评估所选方案,考虑如何识别和消除风险; ? 实施工程:实施软件开发和验证;

? 客户评估:评价开发工作,提出修正建议,制定下一步计划。 ? 螺旋模型是风险驱动的模型。 ?

三.面向对象过程模型

? 面向对象是一种程序设计的方法,或者说它是一种程序设计范型。

? 基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计。 ? 面向对象的要素:

? 抽象:强调实体的本质、内在的属性,忽略一些无关紧要的属性。类实现了对象的

数据(即状态)和行为的抽象,是对象的共性的抽象。

? 封装性:指所有软件部件内部都有明确的范围以及清楚的外部边界。 ? 共享性。

? 面向对象的特征:对象惟一性;分类性;继承性;多态性(多形性)。

1.喷泉模型

? 喷泉模型是一种支持面向对象开发的模型。 ? 体现迭代和无间隙特征:

? 迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系

统。

? 无间隙:开发活动之间不存在明显的边界。

四.基于构件的开发模型

? 支持软件复用(reuse)。

? 利用预先包装好的软件构件(包括组织内部开发的构件和现存商品化构件COTS)来构

造应用系统。 ? ?

构件集成模型

构件集成模型是基于构件的开发模型。 构件集成模型:

? 整个系统模块化。

? 复用构件库中的软件构件。

构件集成模型是演化形的,开发过程是迭代的。 5个阶段:

? 软件的需求分析和定义 ? 体系结构设计 ? 构件库建立 ? 应用软件构建 ? 测试和发布

? ?

五.形式方法模型

? 形式化方法(formal methods)是建立在严格数学基础上的一种软件开发方法。软件

开发的全过程中,从需求分析、规约、设计、编程、系统集成、测试、文档生成、直至维护各个阶段,凡是采用严格的数学语言,具有精确的数学语义的方法,都称为形式化方法。

六.统一过程模型

? 统一过程是用况驱动的。

? 用况模型(use case model)要素:

? 用户(user) ? 用况(use case) ? 动作(action) ? 用况驱动(use-case driven):用况可以驱动开发过程,用况不只是确定系统需求的工具,

还能驱动系统设计、实现和测试的进行。

统一过程模型

? 统一过程(Unified Process,UP) 是风险驱动的、基于用例技术的、以架构为中心的、

迭代的、可配置的软件开发流程。

? 统一过程是一个软件开发过程,是一个通用的过程框架:

? 初始 ? 细化 ? 构造 ? 移交 ? ? ? ? ?

统一过程五个核心工作流

需求(Requirements Capture):致力于开发正确的系统。 分析(Analysis):更精确地理解需求。

设计(Design):深入理解与非功能性需求和约束相联系的问题。 实现(Implementation):实现系统与集成。 测试(Test):验证实现的结构。

第4章 软件需求分析

软件需求

? 在软件的整个生命周期中,首先是软件计划期,接着是软件开发期,软件需求分析是

软件开发的第一个阶段,也是关系到软件开发成功与否的关键一步。

需求分析的任务与步骤

需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型。 主要有两个任务:

1、建立分析模型——数据、功能和行为模型。

2、编写需求说明书。

需求分析的任务与步骤

2.编写软件需求规格说明:主要包括描述目标系统概貌、功能要求、性能要求、运行要求和将来可能提出的要求。

用数据流图、IPO图或其他工具简要描述的系统主要算法,都是该份文档的重要组成部分。 此外,该份文档还应包括用户需求与系统功能之间的关系、设计约束等等文字描述。 软件需求规格说明是需求分析阶段的最终成果。 ? 需求分析的步骤 ? 1.需求获取

? 目的:清楚地理解所要解决的问题;完整地获取用户需求。 ? 2.需求提炼

? 任务:分析建模。 ? 3.需求描述

? 结果:软件需求说明书。 ? 4.需求验证

? 改善需求说明的完整性,确保他可作为软件设计和系统验收的依据。

需求获取的常用方法

? 联合分析小组

? 用户代表、领域专家和系统分析员。 ? 客户访谈

? 充分准备,寻找共同语言; ? 循序渐进、逐步逼近。 ? 问题分析与确认

? 多个来回。

软件需求获取的层次(内容)

? 1.业务需求与用户需求:源于系统的特定领域的需求和用户使用交互需求。

? 2.功能需求:描述系统预期提供的功能或服务。定义了系统做什么(描述系统必须

支持的功能和过程) ? 对系统应提供的服务; ? 如何对输入做出反应; ? 系统在特定条件下的行为。

? 3.非功能需求:指那些不直接与系统具体功能相关的一类需求。定义了系统工作时

的特性(描述操作环境和性能目标) ? 产品需求; ? 机构需求; ? 外部需求。

需求分析过程

? 需求分析主要是理解客户需要什么、分析要求、评价可行性、协商合理的方案、无歧

义地详细说明方案、确认规格说明、管理需求,以至将这些需求转化为可行系统。

? 过程包括:

? 沟通 ? 导出需求 ? 精化需求 ? 可行性研究 ? 与客户协商

? 编写需求规格说明 ? 验证需求 ? 管理需求

多视点的需求分析过程

? 视点识别:包括发现接收系统服务的视点和发现提供给每个视点的特别服务。

? 视点组织:包括组织相关的视点到层次结构中,通用的服务放在较高的层次,并被较低

层次的视点继承。

? 视点文档编写:包括对被识别的视点和服务描述的精炼。

? 视点系统映射:包括在面向对象设计中,通过封装在视点中的服务信息识别对象。

? ? ? ? ?

? ? ? ? ?

场景分析举例-ATM系统“取款”场景分析

? ? ? ? ? ? ? ? ? ? ? ? ? ?

场景名:取款 参与者:银行客户 场景描述:

1.插入有效的银行卡; 2.ATM机验证该银行卡;

3.系统要求输入银行卡密码,用户输入密码; 4.系统通过网络向银行内部系统请求验证密码; 5.若验证通过,系统请求选择业务,选择取款; 6.系统要求输入取款金额,比如1000元;

7.系统验证是有足够的现金,并请求验证银行内部服务器处理取款; 8.若处理成功,系统计算钞票数目,并送出现金; 9.用户取走现金;

10.系统打印凭条,用户取走凭条;

11.系统退出银行卡,用户取走银行卡。

情景内容

在情景开始部分有一个系统状态描述; 关于标准事件流的描述;

关于哪儿会出错,以及如何处理错误的描述; 有关其他可能在同一时间进行的活动的信息; 在情景完成后系统状态的描述。

场景分析

分析员与项目相关人员共同识别出情景,并捕获这些情景的细节。 把细节加入到一个纲要的需求描述中时,情景特别有用。 情景是对交互实例片断的描述,每个情景可能包含一个或多个交互,它们能在不同的细节层次上提供不同类型的情景信息。

情景开始于一个框架,在导出过程中,细节被逐渐增加,直到产生交互的一个完整的描述。

第5章 结构化分析与建模

结构化方法

? 一种面向数据流的传统软件开发方法。

? 以数据流为中心构建软件的分析模型和设计模型。 ? 分为:

? 结构化分析(Structured Analysis 简称SA) ? 结构化设计(Structuresd Design 简称SD)

? 结构化程序设计(Structured Programmin 简称SP)

结构化分析

? 结构化分析方法是一种传统的系统建模技术,其过程是创建描述信息内容和数据流的

模型,依据功能和行为对系统进行划分,并描述必须建立的系统要素。 ? ? ? ? ?

结构化分析过程

理解当前的现实环境,获得当前系统的具体模型(物理模型)。 从当前系统的具体模型抽象出当前系统的逻辑模型。

分析目标系统与当前系统逻辑上的差别,建立目标系统的逻辑模型。 为目标系统的逻辑模型作补充。

结构化分析模型结构

面向数据流的建模方法

? 面向数据流的建模是结构化需求分析方法之一。

? 表示:

? 数据字典:模型中的数据信息集合。

? 数据流图-Data Flow Diagram(简称DFD):描述系统处理过程,即是描述输入数

据流到输出数据流的变换(即加工)过程,用于对系统的功能建模。

数据流图符号

数据源或宿

变换数据的

处理

(加工)

源或宿

? 存在于软件系统之外的人员或组织,表示软件系统输入数据的来源和输出数据的去向,

因此也称为源点和终点。

? 例如,对一个考务处理系统而言:

? 考生向系统提供报名单(输入数据流),所以考生是考试系统(软件)的一个源。 ? 考务处理系统要将考试成绩的统计分析表(输出数据流)传递给考试中心,所以

考试中心是该系统的一个宿。

? 源或宿用相同的图形符号表示。

? 当数据流从该符号流出时表示是源。 ? 当数据流流向该符号时表示是宿。 ? 当两者皆有时表示既是源又是宿。

加工和文件

? 加工:描述输入数据流到输出数据流的变换。

? 每个加工用一个定义明确的名字标识。 ? 至少有一个输入数据流和一个输出流。

? 可以有多个输入数据流和多个输出数据流。 ? 文件:保存数据信息的外部单元。

? 每个文件用一个定义明确的名字标识。 ? 由加工进行读写。

? DFD中称为文件,但在具体实现时可以用文件系统实现,也可以用数据库系统实

现。

数据流

? 每个数据流用由一组固定成分的数据组成,并拥有一个定义明确的名字标识。

? 如:运动会管理系统中,报名单(数据流)由队名、姓名、性别、参赛项目等数据组

成。

? 数据流的流向:

? 从一个加工流向另一个加工。 ? 从加工流向文件(写文件)。 ? 从文件流向加工(读文件)。 ? 从源流向加工。 ? 从加工流向宿。

? 数据流图举例:飞机机票预订系统:旅行社把预订机票的旅客信息输入机票预订系统。

系统为旅客安排航班,打印出取票通知单(附应交的帐款)。旅客在飞机起飞的前一天凭取票通知等交款取票,系统检验无误,输出机票给旅客。

出卷系统DFD举例:总体数据流图

出卷系统:自动出卷数据流图

出卷系统:自动出卷数据流图

数据字典

? 定义:

? 数据字典——是描述数据信息的集合,它对数据流图中的各个元素按规定格式进行

详细的描述和确切的解释,是数据流图的补充工具。 ?

? 数据流图与数据字典是密不可分的,两者结合起来构成软件的逻辑模型(分析模型)。

数据字典

? 数据字典有以下两个作用:

? 它是所有名字信息管理的有效机制。

? 作为连接软件分析、设计、实现和进化阶段的开发机构的信息存储。 ? 数据字典应该由四类元素的定义组成:

? 数据流 ? 数据流分量 ? 数据存储 ? 处理

? 对于处理,可用输入—处理—输出(IPO,Input-Process-Output)视图描述更方便。

数据字典条目

? 数据字典条目中应该包括关于数据的信息:

? 一般信息(名字、别名、描述等)。 ? 定义(数据类型、长度、结构等)。

? 使用特点(值的范围、使用频率、使用条件、使用方式、条件值等)。 ? 控制信息(用户、使用特点、改变数、使用权等)。 ? 分组信息(文档结构、从属结构、物理位置等)。

数据字典——数据流应包含的内容

一般的“数据流”字典条目应包含以下内容:

数据字典——数据文件应包含的内容

一般的“数据文件”字典条目应包含以下内容:

数据字典——数据项应包含的内容

一般的“数据项”字典条目应包含以下内容:

对数据项的数据描述还可以采用以下的方式:

数据字典

数据字典卡片方式示例

判定表

? 判定表的组成元素

? 条件桩(Condition Stub):列出各种条件的对象,如发货单金额,赊欠天数等,每

行写一个条件对象。

? 条件条目(Conditien entry):列出各条件对象的取值,条件条目的每一列表示了

一个可能的条件组合。

? 动作桩(action stub):列出所有可能采取的动作,如发出发货单等,每行写一个

动作。

? 动作条目(action eutry):列出各种条件组合下应采取的动作。

判定表的其它形式

判定(决策)树

判定树描述有多个行为需要选择的过程。判定树由一组表示条件的节点和无标记边组成。

判定(决策)树实例

判定树还有另一种形式:“T”表示“真”,条件成立;“F”表示“假”,条件不成立。

决策树形式简单,易于掌握和使用,并适合于与用户讨论。

判定(决策)树实例

? 本质上与判定表是相同的,只是表示形式不同。 ?

? 例如“审批发货单”加工逻辑的判定树描述入下:

第6章 结构化设计基础 软件设计的两个阶段

? 设计者必须同时满足用户和系统开发人员的要求:

? 概要设计阶段——概要设计书。 ? 详细设计阶段——详细设计书。

软件设计过程

? 结构化设计(Structured Design,简称SD)是一种将结构化分析得到的数据流图映射

成软件体系结构的设计方法。

? 强调模块化、自顶向下逐步求精、信息隐蔽、高内聚低耦合等设计准则。 ? 分为概要设计和详细设计两大步骤:

? 概要设计是对软件系统的总体设计,采用结构化设计方法,其任务是:将系统分

解成模块,确定每个模块的功能、接口(模块间传递的数据)及其调用关系,并用模块及其对模块的调用来构建软件的体系结构。

? 详细设计是对模块实现细节的设计,采用结构化程序设计(Structured

Programming,简称SP)方法。

? SA、SD和SP构成完整的结构化方法体系。

概要设计

? 软件设计的第一类活动——概要设计,也称为总体设计或结构设计、高层设计。

? 软件概要设计主要是仔细分析需求规格说明,研究、开发产品的模块划分,形成具有

预定功能的模块组成结构,表示出模块间的控制关系,并给出模块之间的接口。

软件概要设计的步骤

? 1.设计供选择的方案。 ? 2.选取合理的方案。 ? 3.推荐最佳方案。

? 4.功能分解与设计软件结构。 ? 5.数据库设计。 ? 6.编制设计文档。 ? 7.审查和复审。

详细设计

? 软件设计的第二类活动是软件详细设计,也称模块设计,或者过程设计、低层设计。 ? 详细设计是为结构设计中的各个模块设计过程细节,确定模块所需的算法和数据结构

等。把要解决的问题具体化,但并不是真正的编码,而是设计出程序的详细规格说明。 ? 详细设计是将概要设计的框架内容具体化、明细化,将概要设计的模型转换成可以操

作的软件模型,是设计程序的蓝图。

详细设计的内容

? 模块或构件的处理逻辑、算法、接口等。

? 模块或构件的描述:功能、需要解决的问题,以及该模块或构件在什么时候被调用,

为何需要该模块或构件。

? 算法描述:处理算法和步骤,包括公式、边界和特殊条件,甚至参考资料等。 ? 数据描述:其内部的数据流。

? 其处理逻辑可采用流程图、PDL语言、N-S图、判定表等描述算法的图表来表示。

模块的独立性

? 模块的独立性(Module Independence)是模块化、抽象、信息隐蔽等概念的直接结

果,也是判断模块化结构是否合理的标准。

? 模块独立性是指开发具有独立功能,而和其他模块没有过多关联的模块。

模块独立性度量

? 模块独立性由两个定性标准度量:

? 模块自身的内聚(Cohesion)),也称为块内联系或模块强度。

? 模块之间的耦合(Coupling),也称为块间联系。

? 模块独立性愈高,则块内联系越强,块间联系越弱。

模块内聚性

? 内聚性是从功能的角度对模块内部聚合能力的量度。 ? 高内聚是模块独立性追求的目标。

? 分类:

模块耦合性

? 耦合性是对一个软件结构内不同模块之间互连程度的度量。

? 耦合性的强弱取决于模块间接口的复杂程度,以及通过接口的数据类型和数目。

? 分类:

如何降低模块间耦合度?

? (1) 如模块必须存在耦合,选择适当的耦合类型,原则:

? 尽量使用数据耦合; ? 少用控制耦合;

? 限制公共耦合的范围; ? 坚决避免使用内容耦合。 ? (2) 降低模块间接口的复杂性。 ? ? ? ?

软件结构图

软件结构(Structure Chart, 简称SC)是软件系统的模块层次结构,反映了整个系统的功能实现。

软件结构以层次表示程序的系统结构,即一种控制的层次体系,并不表示软件的具体过程。

软件结构一般用树状或网状结构的图形来表示。 软件结构图的主要元素有:

? 模块:模块用带有名字的方框表示,名称应体现模块的功能。 ? 控制关系:控制关系用单向箭头或直线表示模块间的调用关系。 ? 信息传递:用带注释的短箭头表示模块调用过程中传递的信息。 ? 循环调用和选择调用:在上部模块底部加一个菱形符号表示选择调用,在上部模块

的下方加一个弧形箭头,表示循环调用。

软件结构图

? 软件结构图的形态特征:

? 深度:指结构图控制的层次,也是模块的层数。图6-4中的结构图的深度为5。能

粗略表示一个系统的大小和复杂程度,深度和程序长度之间存在着某种对应关系。 ? 宽度:指一层中最大的模块个数。图6-4中的结构图的宽度为8。一般来说,结构

的宽度越大,则系统就越复杂。

? 扇出:指一个模块直接下属模块的个数。图6-4中的结构图的模块I的扇出为4。

扇出过大,表示模块过分复杂,需要控制和协调的下级模块太多。扇出的上限一般为 5~9,平均一般为3或4。

? 扇入:指一个模块直接上属模块的个数。图6-4中的结构图的模块T的扇入为4。

扇入过大,意味着共享该模块的上级模块数目多,这有一定的益处,但是决不能违背模块的独立性原则而片面追求高扇入。

? 画结构图应注意的事项:

? 模块不能重名。

? 调用关系只能从上到下。

软件结构图

幻灯片103

软件结构图

第7章 结构化概要设计方法

7.1 数据流模型

? 结构化设计是将结构化分析的结果(数据流图)映射成软件的体系结构(结构图)。

? 根据数据流的特点,可将数据流图分为变换型数据流图和事务型数据流图,其对应的

映射分别称为变换分析和事务分析。

7.1 数据流模型

? 有三种数据流类型:

? 变换型数据流;

? 事务型数据流; ? 混合型数据流。

变换型数据流

? 信息沿着输入路径进入系统,并将输入信息的外部形式经过加工变成内部形式,内部

形式的信息通过变换中心的处理,再沿着输出路径经过加工后变成输出信息,送到系统外。

事务型数据流

? 当数据流经过一个具有 “事务中心”特征的数据处理时,它可以根据事务类型从多条

路径的数据流中选择一条活动通路。

? 这种具有根据条件选择处理不同事务的数据流,就是事务型数据流,简称事务流。

混合型数据流

? 在一个大型系统的DFD中,变换流和事务流往往会同时出现。

? 例如,在一个事务型的DFD中,分支动作路径上的信息流也可能会体现出变换流的特

征。

? 这种具有将事务流和变换流组合出现,就是混合型数据流,简称混合流。

第8章 结构化详细设计 结构化详细设计的结构

? 三种基本结构

? 顺序结构 ? 选择结构 ? 循环结构

程序流程图

? 程序流程图又称为程序框图,Goldstine于1946年首先采用。

? 它的主要优点是对控制流程的描绘很直观,便于初学者掌握。 ? 程序流程图的主要缺点:

? 程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流

程,而不去考虑程序的全局结构; ? 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程

序设计的精神,随意转移控制; ? 程序流程图不易表示数据结构。

程序流程图符号

? ? ?

?

盒图

盒图是由Nassi和Shneiderman提出的,所以又称为N-S图。

每个处理步骤都用一个盒子来表示,这些处理步骤可以是语句或语句序列,在需要时,盒子中还可以嵌套另一个盒子,嵌套深度一般没有限制。 盒图具有下述特点:

? 功能域(即,一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。 ? 由于只能从上边进入盒子然后从下面走出盒子,除此之外没有其它的入口和出口,

所以盒图限制了任意的控制转移,保证程序有良好的结构。 ? 很容易确定局部和全程数据的作用域。

? 很容易表现嵌套关系,也可以表示模块的层次结构。 盒图很容易表示程序结构化的层次结构,确定局部和全局数据的作用域。由于没有箭头,因此不允许随意转移控制。

盒图符号

PAD图

? PAD是问题分析图(Problem Analysis Diagram)的英文缩写,自1973年由日本日

立公司发明。

? 它是由程序流程图演化而来,用二维树形结构的图来表示程序的控制流,将这种图翻译

成程序代码比较容易。

? PAD图的基本原理:采用自顶向下、逐步细化和结构化设计的原则,力求将模糊的问题

解的概念逐步转换为确定的和详尽的过程,使之最终可采用计算机直接进行处理。

PAD图符号

PAD图举例

过程描述语言PDL

? 过程描述语言(PDL-Procedural Description Language)介于自然语言和形式语言

之间的一种半形式化语言,是在自然语言基础上加了一些限定,使用有限的词汇和有限的语句来描述加工逻辑。

? 外层用来描述控制结构,采用顺序、选择、重复三种基本结构。 ? 内层一般采用祈使语句的自然语言短语,使用数据字典中的名词和有限的自定义词,

其动词含义要具体,尽量不用形容词和副词来修饰。

PDL三种结构

统计单词数目

? 统计空格 seq

? 打开文件 ? 读入字符串 ? Totalsum = 0

? 程序体 iter until文件结束

? ?? ? 程序体end ? 印总数seq

? 印出空格总数 ? 印总数end ? 关闭文件 ? 停止 ? 统计空格end

第9章 面向对象基础

面向对象基础

? 面向对象是一种的程序设计方法,或者说它是一种程序设计范型,其基本思想是使用

对象、类、继承、封装、消息等基本概念来进行程序设计。 ? 面向对象方法学

? 面向对象分析(OOA,Object-Oriented Analysis)是一种半形式化的规格说明技术。 ? 面向对象设计(OOD) ? 面向对象实现(OOP) ? 面向对象测试(OOT)

面向对象的基本概念

? 1. 对象(object)

? 对象是指一组属性以及这组属性上的专用操作的封装体。

? 属性(attribute)通常是一些数据,有时它也可以是另一个对象。每个对象都有它

自己的属性值,表示该对象的状态。对象中的属性只能通过该对象所提供的操作来存取或修改。

? 操作(operation)(也称方法或服务)规定了对象的行为,表示对象所能提供的服

务。 ?

面向对象的基本概念

? 封装(encapsulation)是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,

对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。

? 一个对象通常可由对象名、属性和操作三部分组成。

面向对象的基本概念

? 2. 类(class)

? 类是一组具有相同属性和相同操作的对象的集合。一个类中的每个对象都是这个类

的一个实例(instance)。

? 类是创建对象的模板,从同一个类实例化的每个对象都具有相同的结构和行为。

面向对象的基本概念

面向对象的基本概念

? 3. 继承(inheritance)

? 继承是类间的基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。

父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承其父类(或祖先类)的属性和操作,还可以对父类(或祖先类)中的操作重新定义其实现方法。

面向对象的基本概念

如果一个子类只有唯一一个父类,这种继承称为单一继承。如果一个子类有一个以上的父类,这种继承称为多重继承。

面向对象的基本概念

? 4. 消息(message)

? 消息传递是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服

务。一个消息通常包括接收对象名、调用的操作名和适当的参数(如果有必要的话)。消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样完成操作。消息完全由接收者解释,接收者独立决定采用什么方法完成所需的操作。

面向对象的基本概念

5. 多态性(polymorphism)

多态性是指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。例如“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形,作用在“圆”对象上,则在屏幕上画一个圆。也就是说,相同操作的消息发送给不同的对象时,每个对象

将根据自己所属类中定义的这个操作去执行,从而产生不同的结果。

面向对象的基本概念

? 6. 动态绑定(dynamic binding)

? 动态绑定是指在程序运行时才将消息所请求的操作与实现该操作的方法连接起来。 ? 传统的程序设计语言的过程调用与目标代码的连接(即调用哪个过程)放在程序

运行前(即编译时)进行(称为静态绑定),而动态绑定则是把这种连接推迟到运行时才进行。

? 动态绑定是一种在运行时确定被执行代码的技术。

面向对象特征

? 抽象性:强调实体的本质、内在的属性,忽略一些无关紧要的属性。类实现了对象的

数据(即状态)和行为的抽象,是对象的共性的抽象。

? 封装性:指所有软件部件内部都有明确的范围以及清楚的外部边界。每个软件部件都

有友好的界面接口,软件部件的内部实现与外部可访问性分离。 ? 共享性:面向对象技术在不同级别上促进了共享。

统一建模语言UML

? 统一建模语言(UML,Unified Modeling Language)是一种基于面向对象的可视化

建模语言。

? UML用丰富的图形符号隐含表示了模型元素的语法,而用这些图形符号组成元模型表

达语义,组成模型描述系统结构(或称为静态特征)以及行为(或称为动态特征)。 ? UML的模型元素:

? 一类模型元素用于表示模型中的某个概念,如类、对象、用例、结点、构件、包、

接口等;

? 另一类模型元素用于表示模型元素之间相互连接的关系,主要有关联、泛化(表

示一般与特殊的关系)、依赖、聚集(表示整体与部分的关系)等。

UML模型元素

UML视图

? 五种视图:

? 用例视图从用户角度表达系统功能;

? 结构视图主要使用类图和对象图描述系统静态结构; ? 行为视图展示系统动态行为及其并发性; ? 实现视图展示系统实现的结构和行为特征;

? 部署视图展示系统的实现环境和构件是如何在物理结构中部署的。

1 类与对象

面向对象的开发方法的基本任务是建立对象模型,是软件系统开发的基础。UML中的类图(Class Diagram)与对象图(Object Diagram)表达了对象模型的静态结构,能够有效地建立专业领域的计算机系统对象模型。 一、类图与对象图

对象类简称类,是面向对象模型的最基本的模型元素,用类图来描述。类图(Class diagram)由系统中使用的类以及它们之间的关系组成,是描述系统的一种图式。类及类型名均用英文大写字母开头,属性及操作名为小写字母开头。 类图是构建其它图的基础。

对象是对象类的实例(instance),用对象图来描述。

UML中类之间的关系

UML中类的关系有关联(association) 、聚集(aggregation) 、泛化(generalization) 、 依赖(depending)和细化 (refinement)。

7、其它关联

递归关联(Recursive association) 即一个类到自身的关联。

聚集(aggregation)

聚集是一种特殊的关联,它指出类间的“整体-部分”关系。又分为: 1、共享聚集(shared aggregation)

其“部分”对象可以是任意“整体”对象的一部分。当“整体”端的重数不是1时,称聚集是共享的。

2、组合聚集(composition aggregation)

其“整体”(重数为0、1)拥有它的“部分”。部分仅属于同一对象,整体与部分同时存在。

三、泛化

泛化指出类之间的“一般与特殊关系”,即继承关系。父类与子类之间构成类的分层结构。

继承性的实例

包图

一个最古老的软件方法问题是:怎样将大系统拆分成小系统。UML中解决该问题的思路之一是将许多类集合成一个更高层次的单位,形成一个高内聚、低耦合的类的集合。UML中这种分组机制叫包(Package)。 包是一种组合机制,把各种各样的模型元素通过内在的语义连在一起成为一个整体就叫包,构成包的模型元素称为包的内容,包通常用于对模型的组织管理,因此有时又将包称为子系统(subsystem)。

第10章 面向对象分析与建模

用例驱动分析过程

? ? ? ?

用例建模分析 开发活动图 开发泳道图

用况模型由用况图组成,用况图展示了执行者、用况以及它们之间的关系。用况通常用正文形式来描述。

? 一个用况模型可由若干幅用况图组成。一幅用况图包含的模型元素有系统、执行者、

用况,以及表示它们间的不同关系,如关联、扩展、包含、泛化等。

? 一. 定义系统

? 用况图中的矩形框代表系统,系统的用况画在矩形框内,代表系统之外的执行者

画在矩形框外。

? 二. 确定执行者

? 执行者是指与系统交互的人或其他系统。

? 执行者代表一种角色,而不是具体的某个人 。 ? 执行者可分成主执行者和副执行者:

? 主执行者使用系统的主要功能。

? 例如,保险系统中主执行者处理保险的注册和管理。 ? 副执行者处理系统的辅助功能。

? 例如,管理数据库、通信、备份以及其他管理等系统维护。

? 我们可以通过回答下列问题来确定执行者: ? 谁使用系统的主要功能(主执行者)?

? 谁需要从系统中得到对他们日常工作的支持?

? 谁需要维护、管理和维持系统的日常运行(副执行者)? ? 系统需要控制哪些硬件设备? ? 系统需要与哪些其他系统交互?

? 哪些人或哪些系统对系统产生的结果(值)感兴趣?

? 三. 确定用况

? 1. 用况的特征

? 用况总是被执行者启动的(initiated),执行者必须直接或间接地指示系统去执

行用况。

? 用况向执行者提供值,这些值必须是可识别的。 ? 用况是完整的,一个用况必须是一个完整的描述。

? 用况是一个类型,而不是实例,用况的实例称为场景(scenario)。

? 四. 用况的描述

? 用况通常用正文(text)来描述,也可用活动图来描述 ? 用况的正文描述应包括以下内容:

? 用况的目的:用况的最终目的是什么?它试图达到什么?

? 用况是如何启动(initiate)的:哪个执行者在什么情况下启动用况的执行?

? 执行者和用况之间的消息流:用况与执行者之间交换什么消息或事件来通知对方改变

或恢复信息?描述系统与执行者之间的主消息流是什么?以及系统中哪些实体被使用或修改?

五. 确定用况之间的关系

? 六. 确认模型

? 对用况模型进行评审,以确认该模型是用户所需的。

开发活动图

? UML活动图通过提供特定的场景内交流的图形化表示来补充用例。 ? 活动图符号:

? 两端为半圆形的矩形表示一个特定的系统功能。 ? 箭头表示通过系统的流。 ? 判定菱形表示判定分支。

? 水平线、分叉点和连接表示并发活动。 ? 对象节点表示活动对象。

? 活动图通常能够既表示控制流又表示数据流。

? UML活动图代替传统的数据流图(Data Flow Diagram)表示法。

处理销售用例UML活动图

? ? ? ?

泳道图

UML泳道图(swimlane)是活动图的一种有用的变形。 可以让建模人员表示用例所描述的活动图,同时看哪个参与者或分析类对活动矩形所描述的活动负责。

泳道用纵向分割图的并列条形部分表示,就像游泳池中的泳道,也称特定分区。 UML泳道图通常对于涉及众多参与者的非常复杂的业务过程建模具有价值。

泳道图举例

1 顺序图

? 顺序图用来描述对象之间动态的交互关系,着重表现对象间消息传递的时间顺序。

? 对象位于水平轴,垂直轴表示时间 ? 标识方式:对象名:类名 ? 垂直虚线表示对象生命线

? 生命线上的矩形表示对象在此时的活动 ? 生命线下方用叉号×表示对象的生命终结 ? 消息

? 自调用和非自调用,“*”表示多次发送消息

? 消息分类:

? 简单消息:以简单、抽象的函数表示。

? 同步消息:等待消息处理完后,才可继续执行。 ? 异步消息:不等消息处理就可继续执行后续操作。 ? 返回消息:是同步消息。 ?

1. 顺序图的概念

顺序图(sequence diagram): 用来描述为了完成确定事务,对象之间按照时间消息交互的顺序关系。

2. 顺序图样式和元素

3. 消息

UML中的三种主要消息:

① 调用消息(Procedure Call)

调用消息(也称为同步消息)的发送者把控制传递给接收者,然后停止活动,等到消息接收者放弃或返回控制。

② 异步消息(Asynchronous)

异步消息的发送者通过消息把信号传递给接收者,然后继续自己活动,不等待接收者返回消息或控制,常用于并发。

③返回消息(Return)

返回消息表示消息的返回。如果是从过程调用返回,则返回消息是隐含的,可以不画出来。

对于非过程调用,如果有返回消息,必须画出来。 ④阻止消息(Balking)

阻止消息指消息发送者发出消息给接收者,如果接收者无法立即接收这个消息,则发送者放弃这个消息。

⑤超时消息(Time-out)

超时消息指消息发送者发出消息给接收者,并按指定时间等待,如果接收者无法在指定时间内接收这个消息,则发送者放弃这个消息。

自调用(Self Call):指某对象自己调用自己的操作。

零售业务顺序图

处理支付用例的顺序图

第十二章 软件测试

软件测试的目的

? 软件测试目的:

? 测试是一个为了发现错误而执行程序的过程

? 设计合适的测试用例,用尽可能少的测试用例,来发现尽可能多的软件错误

? 白盒测试是有选择性地执行(或覆盖)程序中某些最有代表性路径的测试方法,所以

也成为逻辑覆盖测试。逻辑覆盖是对一系列测试过程的总称,这组测试过程逐步达到完整的路径测试。

白盒测试

? ? ? ? ?

常用的白盒测试方法有: 逻辑覆盖测试 基本路径覆盖测试 数据流测试 循环测试

逻辑覆盖测试

逻辑覆盖主要考察使用测试数据运行被测程序时对程序逻辑的覆盖程度。通常希望选择最少的测试用例来满足所需的覆盖标准。主要的覆盖标准有:

语句覆盖

本文来源:https://www.bwwdw.com/article/5k2r.html

Top