掌握软件工程基础:知识点全面解析【chap07、chap10】

news2024/12/31 2:13:57

chap07 软件设计基础

1.信息隐藏、内聚度和耦合度(在七种级别里应该注意什么原则)的概念

1.信息隐藏

模块独立的概念

o 模块应该设计得使其所含信息(过程和数据)对于那些不需要这些信息的模块不可访问;
o 每个模块只完成一个相对独立的特定功能;
o 模块之间仅仅交换那些为完成系统功能必须交换的信息,即模块应该独立。

采用信息隐藏原理指导模块设计优点:

o 支持模块的并行开发
o 减少软件测试和软件维护的工作量。

2.内聚度

  模块内部各成分彼此结合的紧密程度。

内聚度按其高低程度可分为七级,内聚度越高越好。

低级内聚度

(1)偶然性内聚

   模块内各成分为完成一组功能而组合在一起,它们相互之间即使有关系,也很松散。

(2)逻辑性内聚

   模块完成的诸任务逻辑上相关,如,一个模块产生所有与类型无关的输出

(3)时间性内聚

   模块包含的诸任务必须在同一时间段内执行,如一个初始化模块

中级内聚度

(1)过程性内聚

  模块具有过程性内聚度指,模块内成分彼此相关,并且必须按特定的次序执行;

(2)通信性内聚

  模块中各成份都将对数据结构的同一区域进行操作,以达到通信的目的。

高级内聚度

(1)顺序性内聚

   模块内的各处理成份均与同一功能相关,且这些处理必须顺序执行,则称顺序内聚。

(2)功能性内聚

   模块内所有成分形成一个整体,完成单个功能。

    设计软件时,应该能够识别内聚度的高低,并通过修改设计尽可能提高模块内聚度,从而获得较高的模块独立性.

3.耦合度

耦合度

 软件结构中模块间关联程度的一种度量。

o 耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置以及通过界面传送数据的多少等。
o 设计软件应追求尽可能松散耦合的系统。
o 松散耦合系统中,任一模块的设计、测试和维护都相对独立。
o 松散耦合系统模块间联系较少,错误在模块间传播的可能性随之变小。
o 模块间的耦合程度直接影响系统的可理解性、可测试性、可靠性和可维护性。

耦合度也分为七级:

(1)非直接耦合:两模块中任一个都不依赖对方能独立工作, 这类耦合度最低。

(2)数据耦合:两模块通过参数交换信息,信息仅限于数据。

(3)控制耦合:传递的信息含有控制信息控制耦合通常会增加系统的复杂性,适当分解模块可望消除控制耦合。

(4)特征耦合:介于数据耦合与控制耦合之间

(5)外部耦合:当若干模块均与同一个外部环境关联,如,I/O处理使所有I/O模块与特定的设备、格式和通信协议相关联。

  外部耦合尽管需要,但应限制在少数几个模块上。

(6)公共耦合:若干模块通过全局的数据环境相互作用, 全局数据环境中可能含有全局变量、公用区、内存公共复盖区、任何存储介质上的文件、物理设备等。

(7)内容耦合:一个模块使用另 一模块内部的数据或控制信息;一个模块直接转移到另一模块内部等等。

2.程序结构的相关术语(扇入、扇出、良好的程序结构)

o 软件的深度( Depth) 和宽度( Width) 分别说明控制的层数和跨度。
o 模块的“扇出率”( Fan—out) 指,该模块直接控制的其他模块数。
o 模块的“扇入率”( Fan—in) 指,能直接控制该模块的模块数。
o 良好的软件结构:顶层扇出较大,中间较小,底层则有较大扇入。
o 如果一个模块控制另一模块,称前者为“主控”模块,后者为“从属”模块。
o 软件结构的可见域和连通域。

  模块的可见域指,该模块可直接或间接引用的一组模块;

  模块的连通域指,模块可直接引用的模块。

o 软件的总体结构应该在考虑每个模块的细节前就确定下来。
o 软件设计方法鼓励人们首先致力于软件总体结构的设计,而后再进行详细设计。
o 每一种方法导出总体结构的具体方式不尽相同。

3.详细设计的任务是什么?工具有哪些?

o 程序结构仅考虑软件总体结构中模块之间的控制分层关系,而不关心模块内各处理元素和判断元素的顺序。
o 过程设计紧跟在数据结构设计和程序结构设计之后,基本任务是描述这方面的信息。
o 过程包括有关处理的精确说明,如事件的顺序、确切的判断位置、循环操作以及数据的组成等等。
o 程序结构与软件过程相互关联,程序结构中每个模块的所有从属模块必将被引用出现在该模块的过程说明中。

o 结构化程序设计

 仅用“顺序”、“分枝”和“循环”三种基本的控制构件即能构造任何单入口单出口程序,这个结论奠定了结构程序设计的理论基础。

o 结构化程序设计定义

 采用自顶向下逐步求精的设计方法单入口单出口的控制构件。

o 自顶向下逐步求精的方法是人类解决复杂问题时常用的方法,采用这种先整体后局部,先抽象后具体的步骤开发的软件具有较清晰的层次。
o 仅使用单入口单出口的控制构件,程序有良好的结构特征,能降低程序的复杂性,增强程序的可读性、可维护性和可验证性,提高软件的生产率。
o 结构程序设计的思想,应该在软件设计中体现出来,但这并不排除为效率或其他原因,对结构程序设计作一点修正。
o 随着面向对象、软件重用等新的软件开发方法和技术的发展,更现实、更有效的开发途径可能是自顶向下和自底向上两种方法的有机结合。

4.软件设计中复审的目的是什么?

o 这些信息是对设计的一种特殊注释,最后可开发一个基本操作规格说明书或安装手册作为附录。
o 为了确保文档的质量,还必须对设计文档进行复审。
o 复审的目的在于 及早发现设计中的缺陷和错误
o 在大型软件的开发过程中某些错误从一个阶段传到另一个阶段呈扩大趋势,尽早发现、纠正错误所需的代价较小。
o 复审包括

  软件总体结构、  数据结构、

  结构的界面、   模块过程细节。

o 重点

  软件结构能否满足需求?

  结构的形态是否合理?

  层次是否清晰?

  模块的划分是否遵循模型化和信息隐藏的思想?

  系统的人机界面,各模块的接口,以及出错处理是否恰当?模块的设计能否满足功能与性能要求?

  选择的算法与数据结构是否合理,能否适应编程语言?

  等等。

复审

正式复审

  软件开发人员、用户代表和领域专家参加

  采用答辩形式,与会者提前审阅了文档,设计人员在对设计方案详细说明后,答复与会者的问题并记下各种重要的评审意见。

非正式复审

  同行切磋、不拘时间、不拘形式。采用 走查法,一 名设计人员到会,与同事逐行审阅文档,记录发现的问题。

o 复审应对事不对人。
o 软件设计人员应真诚欢迎他人提意见和建议,尽早揭露错误。
o 参加复审的其他人员应坦诚、友好,防止把复审变为质询或辩论。
o 对复审中提出的问题应详细记录,不要奢望所有问题都能当场解决。
o 复审结束前,还应对本次复审作出结论。

chap10 软件测试

1.白盒测试和黑盒测试的基本概念及两者的区别

o 任何工程化的产品都有两种测试方法:
一种方法是已知产品应该具有的功能,通过测试检验每个功能是否都能正常使用;
另一种方法是已知产品内部工作过程,通过测试检验产品内部动作是否按照产品规格说明的规定正常进行。
o 前者称为黑盒测试,后者称为白盒测试。
o 黑盒测试完全不考虑程序的内部结构和处理过程。测试仅在程序界面上进行。
o 设计测试用例旨在说明:

①软件的功能是否可操作;

②程序能否适当地接收输入数据并产生正确的输出结果或在可能的场景中事件驱动的效果是否尽如人意;

③能否保持外部信息(如数据文件)的完整性。

o 白盒测试法密切关注处理细节,针对程序的每一条逻辑路径都要分别设计测试用例,检查分枝和循环的情况。
o 穷举测试不可取,一般选用少量 最有效 ,即最有可能暴露错误的路径进行测试。
o 测试的目的是为了找出错误,所以无论采用黑盒法还是白盒法,设计测试用例时总是期望用尽可能少的时间和代价发现尽可能多的错误。

2.白盒测试及黑盒测试的方法有哪些?利用相关方法设计测试用例

逻辑驱动测试

语句覆盖

为使程序中每个语句至少执行一次,只需设计一个能通过路径ace的例子就可以了,例如选择输入数据为:  A=2B=0X=3   就可达到“语句覆盖”标准

分支覆盖
o 比“语句覆盖”稍强的覆盖标准是“ 分支 覆盖” ( 或称判定覆盖 ) 标准。含义是:执行足够的测试用例,使得程序中的每一个分支至少都通过一次。
o 1 的程序,如果设计两个例子,使它们能通过路径 ace abd ,或者通过路径 acd abe ,就可达到“判定覆盖”标准,为此,可以选择输入数据为:

A=3B=0X=1 (沿路径acd执行);  

A=2B=1X=3(沿路径abe执行)   

条件覆盖
o 一个判定中往往包含了若干个条件,如例 1 的程序中,判定 (A 1) AND (B=0) 包含了两个条件: A 1 以及 B=0 ,所以可引进一个更强的覆盖标准 ——“ 条件覆盖 ”。“条件覆盖”的含义是:执行足够的测试用例,使得判定中的每个条件获得各种可能的结果。

1的程序有四个条件:

         A1B=0A=2X1

为了达到“条件覆盖”标准,需要执行足够的测试用例使得在a点有:

         A1A≤1B=0B≠0

等各种结果出现,以及在b点有:

       A=2A≠2X1X≤1

等各种结果出现。

现在只需设计以下两个测试用例就可满足这一标准:

A=2B=0X=4  (沿路径ace执行)

A=1B=1X=1   (沿路径abd执行)。   

分支/条件覆盖
o 针对上面的问题引出了另一种覆盖标准 ——“ 分支 /条件覆盖”,它的含义是:执行足够的测试用例,使得 分支 中每个条件取到各种可能的值,并使每个 分支 取到各种可能的结果。
n 对例 1 的程序,前面的两个例子

A=2B=0X=4 (沿ace)                  

② A=1B=1X=1 (沿abd)  

是满足这一标准的。

条件组合覆盖
o 针对上述问题又提出了另一种标准 ——“ 条件组合覆盖”。它的含义是:执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。显然,满足“条件组合覆盖”的测试用例是一定满足“分支覆盖”、“条件覆盖”和“分支 / 条件覆盖”的。

再看例1的程序,我们需要选择适当的例子,使得下面 8种条件组合都能够出现:

1) A>1, B=0     2) A>1, B≠0

3) A≤1, B=0  4) A≤1, B≠0

5) A=2, X>1     6) A=2, X≤1

7) A≠2, X>1   8) A≠2, X≤1

  5)6)7)8)四种情况是第二个 IF语句的条件组合,而X的值在该语句之前是要经过计算的,所以还必须根据程序的逻辑推算出在程序的入口点X的输入值应是什么

下面设计的四个例子可以使上述 8种条件组合至少出现一次:

A=2B=0X=4 

  使 1)5)两种情况出现;

A=2B=1X=1 

  使 2)6)两种情况出现;

A=1B=0X=2 

  使 3)7)两种情况出现;

A=1B=1X=1 

  使 4)8)两种情况出现。

路径测试

o 路径测试就是设计足够多的测试用例,覆盖被测试对象中的所有可能路径。
o 对于例 1 ,下面的测试用例则可对程序进行全部的路径覆盖

测试用例

通过路径

A=2B=0X=3

ace

A=1B=0X=1

abd

A=2B=1X=1

abe

A=3B=0X=1

acd

习题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2267466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统实验三 存储管理

实验三 存储管理 一、实验目的 通过实验使学生了解可变式分区管理使用的主要数据结构,分配、回收的主要技术,了解最优适应分配、最坏适应分配、最先适应分配和循环适应分配等分配算法。基本能达到下列具体的目标: 掌握初步进程在内存中的映…

40.2 预聚合和prometheus-record使用

本节重点介绍 : downsample降采样可以降低查询数据量 prometheus原生不支持downsample 实时查询/聚合 VS 预查询/聚合的优缺点 实时查询/聚合条件随意组合,性能差预查询/聚合 性能好,聚合条件需要提前定义 prometheus的预查询/聚合配置举例 downsample…

win11中win加方向键失效的原因

1、可能是你把win键锁了: 解决办法:先按Fn键,再按win键 2、可能是可能是 贴靠窗口设置 中将贴靠窗口关闭了,只需要将其打开就好了

【Rust自学】7.4. use关键字 Pt.2 :重导入与换国内镜像源教程

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.4.1. 使用pub use重新导入名称 使用use将路径导入作用域内后。该名称在词作用域内是私有的。 以上一篇文章的代码为例: m…

算法练习——模拟题

前言:模拟题的特点在于没有什么固定的技巧,完全考验自己的代码能力,因此有助于提升自己的代码水平。如果说一定有什么技巧的话,那就是有的模拟题能够通过找规律来简化算法。 一:替换所有问号 题目要求: 解…

三层交换机配置

✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网路安全入门系列 目录 一,三层交换二,实验案…

TCP-UDP调试工具推荐:Socket通信测试教程(附详细图解)

前言 在网络编程与应用开发中,调试始终是一项不可忽视的重要环节。尤其是在涉及TCP/IP、UDP等底层网络通信协议时,如何确保数据能够准确无误地在不同节点间传输,是许多开发者关注的核心问题。 调试的难点不仅在于定位连接建立、数据流控制及…

登录时的校验Token接口开发(Interceptor)

// 拦截器校验所有非登录请求时的token,校验成功之后解析出用户信息存入ThreadLocal中便于本次请求中共享该用户的信息,这个信息只能在本线程中拿到 一、需求分析 在用户登录后的请求交互中,Token 的校验是保障用户身份合法性和数据安全的重…

Hyper-V如何将文件复制到虚拟机

创建Hyper-V共享文件夹 通过创建共享文件夹的方式,能够帮助我们在主机与虚拟机之间轻松地进行数据交换共享,那么具体该如何通过网络共享来将文件复制到虚拟机呢?请您接着往下看。 步骤1. 在Hyper-V主机中创建一个文件夹,并将您想…

Linux(Centos 7.6)yum源配置

yum是rpm包的管理工具,可以自动安装、升级、删除软件包的功能,可以自动解决软件包之间的依赖关系,使得用户更方便软件包的管理。要使用yum必须要进行配置,个人将其分为三类,本地yum源、局域网yum源、第三方yum源&#…

go语言中zero框架项目日志收集与配置

在 GoZero 项目中,日志收集和配置是非常重要的,尤其是在分布式系统中,日志可以帮助开发人员追踪和排查问题。GoZero 提供了灵活的日志系统,能够方便地进行日志的配置和管理。 以下是如何在 GoZero 项目中进行日志收集与配置的基本…

第4章 共享内存范式:基于R(Rdsm)的简单介绍

第4章 4.1 是什么被共享了? 4.1.1 全局变量 4.1.2 局部变量:栈结构 4.3 共享内存编程的高级介绍:Rdsm包 4.3.1 使用共享内存 4.4 示例:矩阵乘法 4.4.1 代码 4.4.2 分析 4.4.3 代码 4.4.4 详解我们数据的共享本质 4.4.5 计时…

optuna和 lightgbm

文章目录 optuna使用1.导入相关包2.定义模型可选参数3.定义训练代码和评估代码4.定义目标函数5.运行程序6.可视化7.超参数的重要性8.查看相关信息9.可视化的一个完整示例10.lightgbm实验 optuna使用 1.导入相关包 import torch import torch.nn as nn import torch.nn.functi…

SD ComfyUI工作流 对人物图像进行抠图并替换背景

文章目录 人物抠图与换背景SD模型Node节点工作流程工作流下载效果展示人物抠图与换背景 此工作流旨在通过深度学习模型完成精确的人物抠图及背景替换操作。整个流程包括图像加载、遮罩生成、抠图处理、背景替换以及最终的图像优化。其核心基于 SAM(Segment Anything Model)与…

【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 一、求平方根的迭代公式 1. 原理 2. 代码实现示例 二、绝对值函数fabs() 1. 函数介绍 2. 代码示例 三、循环语句 1. for循环 2. while循环 3. do - while循环 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务&…

程序猿成长之路之设计模式篇——结构型设计模式

本篇开始介绍结构型设计模式 前言 与创建型设计模式用于创建对象不同,结构型设计模式通过结构化的方式实现功能的扩展和解耦,通过对象的组合、聚合、继承和接口等机制来定义对象之间的关系,从而实现松耦合和灵活性。 常见的结构性设计模式&…

低代码开源项目Joget的研究——Joget8社区版安装部署

大纲 环境准备安装必要软件配置Java配置JAVA_HOME配置Java软链安装三方库 获取源码配置MySql数据库创建用户创建数据库导入初始数据 配置数据库连接配置sessionFactory(非必须,如果后续保存再配置)编译下载tomcat启动下载aspectjweaver移动jw…

数据库的概念和操作

目录 1、数据库的概念和操作 1.1 物理数据库 1. SQL SERVER 2014的三种文件类型 2. 数据库文件组 1.2 逻辑数据库 2、数据库的操作 2.1 T-SQL的语法格式 2.2 创建数据库 2.3 修改数据库 2.4 删除数据库 3、数据库的附加和分离 1、数据库的概念和操作 1.1 物理数据库…

React中最优雅的异步请求

给大家分享在React19中使用useSuspense处理异步请求为什么是被认为最优雅的解决方案 一. 传统方案 解决异步请求的方案中,我们要处理至少两个最基本的逻辑 正常的数据显示数据加载的UI状态 例如: export default function Index(){const [content, …

基于Bregman的交替方向乘子法

目录标题 ADMM方法简介Bregman散度Bregman ADMM的原理主要优势代码示例:各个符号的解释:**梯度的几何含义**:具体数学公式:**应用示例**:**ADMM的标准形式:****ADMM中的变量角色:****ADMM中的更…