实验04 白盒测试

news2025/1/12 16:14:33

 

知识点 

白盒测试概述
  • 白盒测试基于程序内部逻辑结构进行测试,关注程序语句、路径、变量状态等。
  • 单元测试主要采用白盒测试方法,辅以黑盒测试方法。
  • 程序内部结构示意图
白盒测试关注的对象
  • 源代码
    • 检验代码规范性,查找逻辑、内存管理、数据定义和使用缺陷。
  • 程序结构
    • 使用图表找到设计缺陷,评价程序执行效率。
白盒测试方法分类
  • 控制流分析技术(基本路径测试法)
  • 逻辑覆盖法
    • 语句覆盖(Statement Coverage, SC)
    • 判定覆盖(Decision Coverage, DC)
    • 条件覆盖(Condition Coverage, CC)
    • 条件判定组合覆盖(Condition/Decision Coverage, CDC)
    • 多条件覆盖(Multiple Condition Coverage, MCC)
    • 修正条件判定覆盖(Modified Condition Decision Coverage, MCDC)
控制流分析技术
  • 解决程序结构复杂性问题,衡量复杂程度,测试执行流程变化因素,确保测试效率。
  • 要分析解决的问题:
    • 什么因素导致程序结构变得复杂?
    • 如何衡量程序结构的复杂程度?
    • 控制程序执行流程发生变化的主要因素是什么?
    • 如何测试这些因素,并确保测试的效率?
  • 常见程序结构:判定结点导致结构复杂,风险大小分类。
控制流分析内容
  • 判定结点:关注固有复杂性,使用逻辑覆盖测试。焦点:判定表达式
  • 判定结构与循环结构:关注对执行路径的影响,使用独立路径测试。焦点:路径
  • 循环结构本身:关注复杂性,使用基于数据的静态分析。焦点:循环体
白盒测试用例设计及应用
  • 语句覆盖:其基本思想是设计若干个测试用例,运行被测程序,确保程序中每条可执行语句至少执行一次。
  • 语句覆盖法案例:设计测试用例,满足不同覆盖标准。
    • 单元设计要求:设计一个方法,输入两个整型参数x,y,当x小于5或者y=5时将x和y的和作为结果返回;否则,将x和y的商作为结果返回。
    • public class MyClass {
      	public int computing(int x, int y)
          {
      		int result;
      		if (x < 5 && y == 5) {
      			result = x + y;
      		} else {
      			result= x / y;
      		}
      		return result;
      	}
      

    • 序号

      X

      y

      预期结果

      X<5

      Y==5

      x < 5 && y == 5

      路径

      1

      2

      5

      7

      T

      T

      T

      2

      6

      6

      1

      F

      F

      F

判定覆盖
  • 定义:确保程序中每个判定表达式都至少获得一次“真”值和一次“假”值,使每个分支至少执行一次。
  • 案例:给出了一个MyClass类中computing方法的判定覆盖测试用例设计。
    public class MyClass {
    	public int computing(int x, int y) {
    		int result;
    		if (x < 5 || y == 5) {
    			result = x + y;
    		} else {
    			result= x /y;
    		}
    		return result;
    	}
    

    序号

    x

    y

    预期结果

    x<5

    y==5

    x < 5 || y == 5

    路径

    1

    2

    6

    8

    T

    F

    T

    2

    6

    6

    1

    F

    F

    F

条件覆盖
  • 定义:确保程序中每个判定表达式中的每个条件的所有可能取值(真或假)至少出现一次。
  • 案例:提供了MyClass类中computing方法的条件覆盖测试用例设计,并指出该测试用例集满足条件覆盖但不满足判定覆盖。这个测试用例集满足条件覆盖的要求,但是不满足判定覆盖的要求
    	public int computing(int x, int y) {
    		int result;
    		if (x < 5 || y == 5) {
    			result = x + y;
    		} else {
    			result= x /y;
    		}
    		return result;
    	}
    

    序号

    x

    y

    预期结果

    x<5

    y==5

    x < 5 || y == 5

    路径

    1

    2

    1

    3

    T

    F

    T

    2

    6

    5

    1

    F

    T

    T

判定/条件覆盖
  • 定义:同时满足判定覆盖和条件覆盖的要求,即每个判定表达式及其条件的所有可能组合都要至少执行一次。并且每个判定本身的判定结果(真/假)也至少出现一次。
    public int computing(int x, int y) {
    		int result;
    		if (x < 5 || y == 5) {
    			result = x + y;
    		} else {
    			result= x /y;
    		}
    		return result;
    	}
    

    序号

    x

    y

    预期结果

    x<5

    y==5

    x < 5 || y == 5

    路径

    1

    2

    1

    3

    T

    F

    T

    2

    6

    5

    1

    F

    T

    T

    3

    6

    1

    1

    F

    F

    F

组合覆盖
  • 定义:确保程序中每个判定表达式的所有条件取值组合至少出现一次,这是最强的逻辑覆盖标准,确保所有可能的执行路径都被测试。
    public int computing(int x, int y) {
    		int result;
    		if (x < 5 || y == 5) {
    			result = x + y;
    		} else {
    			result= x /y;
    		}
    		return result;
    	}
    

    序号

    x

    y

    预期结果

    x<5

    y==5

    x < 5 || y == 5

    路径

    1

    2

    1

    3

    T

    F

    T

    2

    6

    5

    1

    F

    T

    T

    3

    6

    1

    1

    F

    F

    F

    4

    1

    5

    0

    T

    T

    T

基本路径测试法
  • 定义:设计测试用例以覆盖程序控制流图中的所有基本路径。
  • 控制流图:展示程序执行的流向,包括决策点和路径。

  • 环路复杂性:使用McCabe复杂性度量来确定程序基本路径集合中的独立路径条数,这是确保每个可执行语句至少执行一次所需的测试用例数目的上界。
    • 程序的环路复杂性即McCabe复杂性度量,在进行程序的基本路径测试时,从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
    • 独立路径是指包括一组以前没有处理过的语句或条件的一条路径。从控制流图来看,一条独立路径是至少包含有一条在其他独立路径中从未有过的边的路径。
    • (b)所示的控制流图中,一组独立的路径如下:
    • path1:1-11
    • path2:1-2-3-4-5-10-1-11
    • path3:1-2-3-6-8-9-10-1-11
    • path4:1-2-3-6-7-9-10-1-11
  • (1)以详细的设计或源代码为基础,导出程序的控制流程图
  • (2)计算控制流图G的环路复杂性V(G)       
    •  V(G)=区域数         
    • V(G)=判断节点数+1         
    • V(G)=边的个数-节点个数+2
  • (3)导出独立路径
  • (4)设计测试用例,确保每条路径都被执行
基本路径覆盖测试用例设计步骤
  1. 基于详细设计或源代码,导出程序的控制流程图。
  2. 计算控制流图G的环路复杂性V(G),公式为V(G) = e - n + 2,其中e是边数,n是节点数。
  3. 导出独立路径集合。
  4. 设计测试用例,确保每条路径都被执行。
基本路径覆盖案例
  • 案例分析:展示了一个将正整数分解为质因数的Java程序,并画出程序控制流图。
    • int k=2;
      1	String rs=n+"=";
      2	while(k<=n){
      3		if(k==n){
      4			rs=rs+n;
      			break;
      		}else{
      5			if(n%k==0){
      				rs=rs+k+"*";
      6				n=n/k;
      			}else{
      7				k++;
      8			}}}
      	return rs;
      

  • 环形复杂度计算:示例计算了程序的环形复杂度V(G)。
    • (2)计算环形复杂度:     V(G)=9-8+2=1+2=3
    • 将V(G)定义为: V(G)=e-n+2 这里,e是控制流图的边数,n是控制流图的节点数。我们还可以用如下两个方法计算环形复杂度:
      • V(G)=区域数
      • V(G)=判定节点数+1 这里,区域是指由边包围起来的形状,图中没有被边包围的部分也算一个区域。判定节点是有多个边以它作为起点的节点。
  • 独立路径找出:示例找出了程序的一组独立路径。
    • (3)找出一组独立路径(基本路径集合):   
    •  路径1:1-2-3-4     
    • 路径2:1-2-3-5-6-8-2-3-4     
    • 路径3:1-2-3-5-7-8-2-3-4 
  • 测试用例设计:基于基本路径设计测试用例,覆盖所有路径。

实验

一 实验目的:

1、理解白盒测试的定义;

2、掌握控制流分析方法;

3、掌握白盒测试用例设计方法及应用。

二 实验环境

1、JDK8.0或以上;

2、Itellij IDEA集成开发环境;

3、Maven构建工具。

三 实验准备

1、掌握JUnit测试框架的基本使用;

2、具备Java编程基础;

3、安装及配置好测试环境。

四 实验内容

(一)阅读以下需求描述,并完成以下内容。

现有一网上蛋糕商城购物平台。用户可在商城首页或商品列表添加商品到购物车中。当商品添加入购物车后,订单提交的流程如下:

(1)点击进入购物车页面;

(2)在购物车页面添加或减少或删除商品;

(3)点击提交订单按钮。

(4)在订单页面,确认收货地址,选择支付方式,点击确认订单按钮。

以下为网上蛋糕商城订单提交功能的部分伪代码实现。

if(登陆成功){

     if(微信支付 OR 支付宝支付){

         if(交易金额<=余额) then

            提示“支付成功”

         else

            提示“余额不足”

     }

}

else 

     提示“请登录”

endif

实验内容:

(1)请根据以上蛋糕商城订单提交流程及伪码画出其程序流程图。

  1. 开始:流程开始。
  2. 登录检查:检查用户是否登录成功。
  3. 支付方式检查:如果登录成功,检查用户选择的支付方式是否为微信支付或支付宝支付。
  4. 余额检查:如果支付方式正确,检查交易金额是否小于或等于用户余额。
  5. 支付成功:如果交易金额小于或等于余额,提示“支付成功”。
  6. 余额不足:如果交易金额大于余额,提示“余额不足”。
  7. 登录提示:如果用户未登录,提示“请登录”。
  8. 结束:流程结束。

(2)请根据你所画的程序流程图设计满足语句覆盖的测试用例。

编号

测试用例名称

输入数据

预期结果

测试路径

登录状态

微信支付

支付宝支付

交易金额

余额

语句覆盖意味着我们需要确保伪代码中的每一条语句至少执行一次。 

(3)请根据你所画的程序流程图设计满足判定覆盖的测试用例。

编号

测试用例名称

输入数据

预期结果

测试路径

登录状态

微信支付

支付宝支付

交易金额

余额

确保程序中每个判定表达式的每个分支至少执行一次。根据伪代码,存在两个判定表达式:登录状态检查和支付方式及余额检查。 

编号测试用例名称登录状态微信支付支付宝支付交易金额余额预期结果测试路径
1登录成功_支付成功成功<= 余额充足支付成功检查登录 -> 选择支付宝 -> 检查余额 -> 支付成功
2登录成功_余额不足成功> 余额不足余额不足检查登录 -> 选择支付宝 -> 检查余额 -> 余额不足
3未登录失败----请登录直接检查登录状态 -> 未登录
4登录成功_微信支付_支付成功成功<= 余额充足支付成功检查登录 -> 选择微信 -> 检查余额 -> 支付成功
5登录成功_微信支付_余额不足成功> 余额不足余额不足检查登录 -> 选择微信 -> 检查余额 -> 余额不足

(4)请根据你所画的程序流程图设计满足条件覆盖的测试用例。

编号

测试用例名称

输入数据

预期结果

测试路径

登录状态

微信支付

支付宝支付

交易金额

余额

条件覆盖(Condition Coverage)要求确保程序中每个判定表达式的每个条件都独立地至少为真和为假一次。根据提供的伪代码,主要有两个条件需要考虑:

  1. 登录成功:这个条件决定了用户是否能够进行支付操作。
  2. 微信支付 OR 支付宝支付:这个条件检查用户选择的支付方式是否被支持。
  3. 交易金额 <= 余额:这个条件检查用户的账户余额是否足够支付订单。
  4. 编号测试用例名称登录状态微信支付支付宝支付交易金额余额预期结果测试路径
    1条件1真_条件2真_条件3真成功<= 余额充足支付成功条件1真 -> 条件2真(微信) -> 条件3真
    2条件1真_条件2假_条件3真成功<= 余额充足支付成功条件1真 -> 条件2假(支付宝) -> 条件3真
    3条件1真_条件2真_条件3假成功> 余额不足余额不足条件1真 -> 条件2真(微信) -> 条件3假
    4条件1真_条件2假_条件3假成功> 余额不足余额不足条件1真 -> 条件2假(支付宝) -> 条件3假
    5条件1假失败----请登录条件1假

(5)请根据你所画的程序流程图设计满足组合覆盖的测试用例。

编号

测试用例名称

输入数据

预期结果

测试路径

登录状态

微信支付

支付宝支付

交易金额

余额

组合覆盖(Multiple Condition Coverage)要求设计测试用例,使得判定点中所有条件的所有可能组合至少执行一次。对于给出的伪代码,我们有两个主要的判定点:

  1. 登录状态(成功或失败)
  2. 支付方式和余额检查(微信支付或支付宝支付,交易金额小于等于余额或交易金额大于余额)
  3. 编号测试用例名称登录状态微信支付支付宝支付交易金额余额预期结果测试路径
    1成功登录_微信支付_支付成功成功<= 余额充足支付成功登录成功 -> 选择微信支付 -> 交易金额 <= 余额 -> 支付成功
    2成功登录_微信支付_余额不足成功> 余额不足余额不足登录成功 -> 选择微信支付 -> 交易金额 > 余额 -> 余额不足
    3成功登录_支付宝支付_支付成功成功<= 余额充足支付成功登录成功 -> 选择支付宝支付 -> 交易金额 <= 余额 -> 支付成功
    4成功登录_支付宝支付_余额不足成功> 余额不足余额不足登录成功 -> 选择支付宝支付 -> 交易金额 > 余额 -> 余额不足
    5未登录_任何支付方式失败----请登录未登录 -> 显示请登录提示

(6)请将程序流程图转化为控制流图,并计算其环形复杂度,写出基本路径集合。

环路复杂度为:

基本路径为:

1.

3

4

  1. 节点1:开始
  2. 节点2:登录检查
  3. 节点3:支付方式检查(微信支付或支付宝支付)
  4. 节点4:余额检查(交易金额 <= 余额)
  5. 节点5:提示“支付成功”
  6. 节点6:提示“余额不足”
  7. 节点7:提示“请登录”
  8. 节点8:结束

边的情况如下:

  • 从节点2到节点3或节点7,取决于登录是否成功。
  • 从节点3到节点4或节点6,取决于支付方式检查结果。
  • 从节点4到节点5,如果余额足够。
  • 从节点4到节点7,如果余额不足。
  • 节点6和5分别跳转到节点8。

根据上述信息,我们可以计算环路复杂度:

  • 𝐸E = 6(边的数量)
  • 𝑁N = 5(节点的数量,不包括开始和结束)

𝑉(𝐺)=6−5+2𝑃=3V(G)=6−5+2P=3

因为 𝑃P 通常为1,所以环路复杂度 𝑉(𝐺)V(G) 为3。

基本路径集合包括:

  1. 路径1:开始 -> 登录检查 -> 请登录 -> 结束(用户未登录)
  2. 路径2:开始 -> 登录检查 -> 支付方式检查 -> 余额检查 -> 提示“支付成功” -> 结束(用户登录且支付成功)
  3. 路径3:开始 -> 登录检查 -> 支付方式检查 -> 提示“余额不足” -> 结束(用户登录但余额不足)

五 实验总结

(1)是什么导致了程序的复杂性?对代码进行覆盖率测试时,主要关注点在哪几个方面?

  1. 程序规模:程序越大,包含的代码行数越多,逻辑分支和条件判断也越多,导致复杂性增加。
  2. 条件逻辑:程序中包含的if-else语句、switch-case语句、循环和循环嵌套等条件逻辑增加了程序的复杂性。
  3. 模块间交互:程序中不同模块或组件之间的交互和依赖关系增加了理解和维护的难度。
  4. 数据结构的使用:复杂的数据结构和算法实现增加了程序逻辑的复杂度。
  5. 多线程和并发:涉及多线程和并发的程序需要处理同步、竞态条件等问题,增加了程序的复杂性。
  6. 配置和外部因素:程序需要根据不同环境或配置进行调整,外部系统接口的复杂性也会影响程序。

对代码进行覆盖率测试时,主要关注以下几个方面:

  1. 语句覆盖(Statement Coverage):确保程序中每一行代码都被执行至少一次。
  2. 判定覆盖(Decision Coverage):确保程序中的每个判定点(如if语句、循环条件)的所有分支都被执行至少一次。
  3. 条件覆盖(Condition Coverage):确保程序中每个判定点内的所有条件表达式的所有可能结果(真/假)都被测试到。
  4. 路径覆盖(Path Coverage):确保程序中所有可能的执行路径都被执行至少一次。
  5. 条件判定组合覆盖(Condition/Decision Coverage, CDC):确保每个判定的所有条件组合都被测试到。
  6. 多条件覆盖(Multiple Condition Coverage, MCC):确保所有涉及多个条件的判定表达式的所有条件值组合都被测试到。
  7. 修正条件判定覆盖(Modified Condition/Decision Coverage, MCDC):确保每个条件能够独立影响判定的结果,即改变一个条件的值可以独立地改变判定的结果。
  8. 异常覆盖(Exception Coverage):确保程序中的异常处理路径被测试到,以验证异常流程的正确性。
  9. 边界值覆盖:测试输入或运行时的边界条件,确保程序在边界情况下的行为符合预期。

个人思考

 实验中并没有展现出这几种方法之间有什么区别,感觉并不是一个有用的例子去帮助我们理解这几种方法的内涵以及具体使用有什么区别,写出来的测试例子也是一样的,需要思考在什么例子下,这几种方法写出来的测试例子会不一样。

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

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

相关文章

Jupyter + Pyspark + Yarn 交互式大数据分析

背景: ​ 小批量数据可以使用pandas 进行分析&#xff0c;方便灵活。但大批量&#xff08;千万级别&#xff09;数据&#xff0c;使用pandas分析处理&#xff0c;速度很慢&#xff0c;且需一次性读取全部数据&#xff0c;内存可能溢出。 ​ 此时使用spark分布式分析处理速度很…

记VMware网络适配器里的自定义特定虚拟网络一直加载问题解决办法

1、问题描述 VMware网络适配器里的自定义特定虚拟网络一直加载问题&#xff1a; 在自定义&#xff1a;特定虚拟网络选择的时候 没有上图所示的三个选择&#xff0c;而是正在加载虚拟网络.... 如下图所示&#xff1a; 2、解决办法 2.1、原因分析&#xff1a; 是安装时候出现…

【Java】Idea运行JDK1.8,Build时中文内容GBK UTF-8编码报错一堆方块码

问题描述 在Windows系统本地运行一个JDK1.8的项目时&#xff0c;包管理用的Gradle&#xff0c;一就编码报错&#xff08;所有的中文内容&#xff0c;包括中文注释、中文的String字面量&#xff09;&#xff0c;但程序还是正常运行。具体如下&#xff1a; 解决 1. Idea更改编…

springboot+vue系统开发

链接: https://pan.baidu.com/s/1P1YpHAx9QOBPxjFZ9SAbig 提取码: u6f1

精选力扣,牛客链表面试题

&#x1f48e; 欢迎各位大佬互三&#xff1a;我的主页 1. 反转链表 206.反转链表 思考&#xff1a;如果不开辟额外的空间&#xff0c;只在原来的链表上进行修改的话&#xff0c;该用什么方法呢 只需要从第二个元素开始&#xff0c;依次进行头插就可以了 接着修改一下引用就可…

ROS2 + 科大讯飞 初步实现机器人语音控制

环境配置&#xff1a; 电脑端&#xff1a; ubuntu22.04实体机作为上位机 ROS版本&#xff1a;ros2-humble 实体机器人&#xff1a; STM32 思岚A1激光雷达 科大讯飞语音SDK 讯飞开放平台-以语音交互为核心的人工智能开放平台 实现步骤&#xff1a; 1. 下载和处理科大讯飞语音模…

Linux /etc/profile 详解

概述 Linux是一个多用户的操作系统。每个用户登录系统后&#xff0c;都会有一个专用的运行环境。通常每个用户默认的环境都是相同的&#xff0c;这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制&#xff0c;其方法就是修改相应的系统环境变量&…

python如何查看类的函数

Python非常方便&#xff0c;它不需要用户查询文档&#xff0c;只需掌握如下两个帮助函数&#xff0c;即可查看Python中的所有函数&#xff08;方法&#xff09;以及它们的用法和功能&#xff1a; dir()&#xff1a;列出指定类或模块包含的全部内容&#xff08;包括函数、方法、…

浅谈串口UART通信原理

文章目录 引言并行和串行波特率UART帧格式 引言 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发器&#xff09;是一种用于串行通信的硬件设备。它允许两个设备之间进行异步数据传输。是一种通用的串行、异步通信总线。该总线有两条数据…

SpringBoot整合XXL_JOB示例

XXL-JOB 是一个分布式任务调度平台&#xff0c;主要用于管理和执行定时任务。它适用于各种场景&#xff0c;例如定时任务、批处理任务、分布式任务等。XXL-JOB 提供了丰富的功能&#xff0c;使得任务调度变得简单、高效和可靠。以下是 XXL-JOB 的一些主要功能和特点&#xff1a…

Centos系统内磁盘分区

Centos系统内磁盘分区 建议如果有重要数据提前做好备份 以根目录扩容50G为例&#xff1a; 1、卸载/home目录 umount /home 2、删除逻辑卷 y确认即可 lvremove /dev/mapper/centos-home 3、df -h查询一下&#xff0c;/home目录已经不见了 4、向根目录分区追加50G容量 lv…

数据销毁境外间谍情报机关逼迫、威胁贷款学生为其窃取我国家秘密

近年来&#xff0c;随着国际形势的复杂多变&#xff0c;境外间谍情报机关的活动也日益猖獗。他们利用各种手段&#xff0c;包括通过校园贷逼迫、威胁贷款学生为其窃取我国国家秘密&#xff0c;这种行为不仅危害了国家安全&#xff0c;也严重损害了社会的公平正义。那么&#xf…

微信小程序毕业设计-汽车维修项目管理系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

(一)高并发压力测试调优篇——MYSQL数据库的调优

前言 在实际项目开发中&#xff0c;很多业务场景下都需要考虑接口的性能要求&#xff0c;追求高并发、高吞吐量。那么对于此类问题如何入手呢&#xff1f;关注作者&#xff0c;不迷路。本节内容主要介绍在数据库db方面的优化&#xff0c;以mysql数据库为例。 关于db的优化&am…

python库(11):Box库简化字典和对象之间的转换

1Box库简介 Box是一个Python库&#xff0c;它提供了一种将数据封装在字典和列表中的方式&#xff0c;同时提供了一些额外的功能&#xff0c;比如数据验证、默认值设置等。这使得Box库非常适合用于配置管理、数据传输对象&#xff08;DTO&#xff09;的创建&#xff0c;以及任何…

PDF 中图表的解析探究

PDF 中图表的解析探究 0. 引言1. 开源方案探究 0. 引言 一直以来&#xff0c;对文档中的图片和表格处理都非常有挑战性。这篇文章记录一下最近工作上在这块的探究。图表分为图片和表格&#xff0c;这篇文章主要记录了对表格的探究。还有&#xff0c;我个人主要做日本项目&…

[C++]——同步异步日志系统(4)

同步异步日志系统 一、日志等级模块设计二、日志消息类设计 一、日志等级模块设计 定义出日志系统所包含的所有日志等级分别为&#xff1a;&#xff08;7个等级&#xff09; UNKNOW0&#xff0c;未知等级的日志DRBUG &#xff0c;调试等级的日志INFO &#xff0c;提示等级的日…

前端调试技巧(npm Link,vscode调试,浏览器调试等)

Npm Link 功能&#xff1a; 在本地开发npm模块的时候&#xff0c;我们可以使用npm link命令&#xff0c;将npm 模块链接到对应的运行项目中去&#xff0c;方便地对模块进行调试和测试 断点调试 vscode调试 Debug Vue2 Project 目标&#xff1a;在VSCode中调试项目代码…

docker拉取镜像-配置阿里云镜像加速

1、配置阿里云镜像&#xff08;用于拉取镜像加速&#xff09; sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo syst…

论文阅读【时间序列】TimeMixer (ICLR2024)

【时间序列】TimeMixer (ICLR2024) 原文链接&#xff1a;TIMEMIXER: DECOMPOSABLE MULTISCALE MIXING FOR TIME SERIES FORECASTING 代码仓库&#xff1a;https://github.com/kwuking/TimeMixer 符号定义 符号含义P用于预测的历史序列长度&#xff08;seq_len&#xff09;F预测…