哈工大软件过程与工具作业3

news2024/10/7 2:18:03

哈尔滨工业大学

计算学部/软件学院

2022年秋季学期

2020级本科《软件过程与工具》课程(3.0学分)

作业报告

作业3:软件测试报告

姓名

学号

联系方式

石卓凡

120L021011

944613709@qq.com/18974330318

目  录

1 作业目的与要求........................................................................................................ 1

2 软件测试环境搭建.................................................................................................... 1

2.1 自定测试项目环境搭建.................................................................................. 1

2.2 指定软件系统测试环境搭建.......................................................................... 1

2.2.1 环境配置描述............................................................................................... 2

2.2.2 搭建过程描述............................................................................................... 2

3 软件测试过程及结果................................................................................................ 2

3.1 白盒测试(单元测试).................................................................................. 2

3.1.1 顺序结构程序测试....................................................................................... 2

3.1.2 分支结构程序测试....................................................................................... 5

3.1.3 循环结构程序测试....................................................................................... 9

3.2 集成/系统测试............................................................................................... 15

3.2.1 学校本科生统一身份认证系统部分功能模块测试................................. 15

3.2.2 学校本科生门户平台系统UI可用性测试与评价.................................. 21

  1. 作业目的与要求

(1)学习软件测试的基本方法;

(2)实践软件测试的基本过程;

(3)掌握单元测试、集成测试的方法;

(4)掌握白盒测试和黑盒测试的基本方法;

(5)学习UI的基本测评和用户体验;

(6)本次作业要求主要由个人独立完成。

  1. 软件测试环境搭建
    1. 自定测试项目环境搭建
  1. 硬件环境

X64 CPU;2GHz;2G RAM;256GHD Disk 以上

  1. 软件环境

Windows7/10 64位以上;VirtualBox/Vmware 11以上;Ubuntu 16.04 LTS 64位/优麒麟 64位 以上;

  1. 开发工具

IDEA

下载IDEA

  1. IDE为idea,安装idea和配置jdk11。,idea采用professional版本2021.2.3,关于试用30天的限制,我在假期之前遇见的这个问题花了一段时间摸索,最终采用的是补丁破解试用
  2. 在IDEA中下载JDK11,并且配置JDK11
  1. 选取程序

软件构造Lab3---投票系统部分代码

    1. 指定软件系统测试环境搭建

  1. 硬件环境

X64 CPU;2GHz;2G RAM;256GHD Disk 以上

  1. 软件环境

Windows7/10 64位以上;VirtualBox/Vmware 11以上;Ubuntu 16.04 LTS 64位/优麒麟 64位 以上;

  1. 浏览器

Google浏览器

  1. 网络代理

EasyConnect校内网vpn

  1. 选取系统

哈工大统一身份认证,今日哈工大

http://ids-hit-edu-cn-s.ivpn.hit.edu.cn/

      1. 环境配置描述
  1. Windows10系统
  2. 校外网络,使用EasyConnect作为VPN转换为校园网络
  3. Google浏览器
      1. 搭建过程描述
  1. 下载安装EasyConnect
  2. 输入i.hit.edu.cn
  3. 登录学工号和密码
  4. 成功接入校园网VPN
  1. 软件测试过程及结果
    1. 白盒测试(单元测试)
      1. 顺序结构程序测试

3.1.1.1测试对象

源代码

  1. //immutable
  2. public class VoteType {
  3.  // key为选项名、value为选项名对应的分数
  4.  private Map<String, Integer> options = new HashMap<>();
  5.  // Rep Invariants
  6.  // 选项名key不能为"",其中不允许出现空格
  7.  // options.size()选项个数需要>=2
  8.  // Abstract Function
  9.  // AF(String,Integer)->选项其中key为选项名、value为选项名对应的分数
  10.  // Safety from Rep Exposure
  11.  // 所有的数据域都是私有的
  12.  // 用Collections.unmodifiableMap()转化为不可变类型返回给外部
  13.  /**
  14.   *
  15.   * @param options voteType对应的选项名和分数
  16.   */
  17.  public VoteType(Map<String,Integer> options) {
  18.   this.options=new HashMap<>(options);
  19.   checkRep();
  20.  }

流程图

 根据传入的Map,创建一个投票类型对象

图3.1.1.1流程图

3.1.1.2测试用例设计

分类

细则

样例

不存在投票选项

空白

Null

存在投票选项

Key符合条件

options2.put("喜欢",2);

options2.put("不喜欢",0);

options2.put("无所谓",1);

Key不符合条件

options3.put("特别特别的喜欢",2);

options3.put(" ",0);

options3.put(" ",1);

3.1.1.3测试过程与结果

测试步骤:

  1. Stub程序创建options
  2. Stub程序给定options的变量
  3. 利用junit进行判定

   针对VoteType(Map<String,Integer> options)

   1.不存在投票选项

   2.存在投票选项

   2.1Key符合条件

   2.2Key不符合条件

结果:

 

 

3.1.1.4 Driver或Stub程序的编制

  1.  /**
  2.   * 针对VoteType(Map<String,Integer> options)
  3.   * 1.不存在投票选项
  4.   * 2.存在投票选项
  5.   * 2.1Key符合条件
  6.   * 2.2Key不符合条件
  7.   */
  8.  @Test
  9.  public void VoteTypeTest_NotRegex()
  10.  {
  11.   Map<String, Integer> options = new HashMap<>();
  12.   VoteType voteType = new VoteType(options);
  13.   assertEquals(options,voteType.getOptions());
  14.   Map<String, Integer> options2 = new HashMap<>();
  15.   options2.put("喜欢",2);
  16.   options2.put("不喜欢",0);
  17.   options2.put("无所谓",1);
  18.   VoteType voteType2 = new VoteType(options2);
  19.   assertEquals(options2,voteType2.getOptions());
  20. //  Map<String, Integer> options3 = new HashMap<>();
  21. //  options3.put("特别特别的喜欢",2);
  22. //  options3.put(" ",0);
  23. //  options3.put("无 所 谓",1);
  24. //  VoteType voteType3 = new VoteType(options3);
  25. //  assertFalse(false,voteType3.getOptions());
  26.  }
      1. 分支结构程序测试

3.1.2.1测试对象

源代码

  1. public VoteType(String regex) throws IllegalArgumentException{
  2.   // split的参数是一个正则表达式,‘|’需要转义
  3.   String[] inputOptions = regex.split("\\|");
  4.   //得到 “喜欢”(2)
  5.   //或者得到 “支持”
  6.   if(inputOptions.length < 2) {
  7.    throw new IllegalArgumentException("非法输入:选项少于两个");
  8.   }
  9.   Pattern regexWithNum = Pattern.compile("\"(\\S+)\"\\(([-]?\\d+)\\)");
  10.   Pattern regexWithoutNum = Pattern.compile("\"(\\S+)\"");
  11.   int unMatchFlag=0;//不匹配次数
  12.   //先尝试匹配有数字模式
  13.   for (String option : inputOptions) {
  14.    Matcher m = regexWithNum.matcher(option);
  15.    if(!m.matches())
  16.    {
  17.     unMatchFlag++;//若这个当前不匹配,不匹配次数+1
  18.     break;
  19.    }
  20.    if (m.group(1).length() > 5)
  21.     throw new IllegalArgumentException("选项名长度超过5");
  22.    options.put(m.group(1), Integer.valueOf(m.group(2)));
  23.   }
  24.   if(unMatchFlag==0)
  25.   {
  26.    checkRep();
  27.    return;
  28.   }
  29.   //匹配无数字的等权重格式
  30.   for (String option : inputOptions) {
  31.    Matcher m = regexWithoutNum.matcher(option);
  32.    if(!m.matches())
  33.    {
  34.     unMatchFlag++;//若这个当前不匹配,不匹配次数+1
  35.     break;
  36.    }
  37.    if (m.group(1).length() > 5)
  38.     throw new IllegalArgumentException("选项名长度超过5");
  39.    options.put(m.group(1), 1);
  40.   }
  41.   if(unMatchFlag==2)//代表都不匹配
  42.    throw new IllegalArgumentException("两种情况都不匹配");
  43.   checkRep();
  44.  }

流程图

 根据满足特定语法规则的字符串,创建一个投票类型对象

@param regex 遵循特定语法的、包含投票类型信息的字符串(待任务12再考虑)

该字符串的语法规则如下:

//       “喜欢”(2)|“不喜欢”(0)|“无所谓”(1)

// 其中,用双引号括起来的文字部分是一个投票选项,长度不超过 5,其中不

// 允许出现空格;用括号括起来的数字是投票选项对应的分数,可以是正整数、0

// 或负整数,不能带小数,正整数不需要使用“+”,但负整数需要使用“-”;不同

// 的投票选项之间用“|”隔开。

// 也可以用如下形式:

//       “支持”|“反对”|“弃权”

// 与上面的例子相比,区别是没有分数。这种情况表明各个投票选项的权重是一样的

图3.1.1.1流程图

 

3.1.2.2测试用例设计

分类

细则

样例

匹配有数字模式

不含负数

"喜欢"(2)|"不喜欢"(0)|"无所谓"(1)

含负数

"喜欢"(-2)|"不喜欢"(0)|"无所谓"(1)

匹配无数字模式

不超过5个长度

"支持"|"反对"|"弃权"

超过5个长度

"支持"|"反对"|"弃权"|"超级支持"|"超级弃权"|"超级超级支持"

无法匹配正常模式

"支持(1)"|"反对"|"弃权"

3.1.2.3测试过程与结果

测试步骤:

  1. Stub程序创建options
  2. Stub程序给定options的变量
  3. 利用junit进行判定

   测试成功:

    1.测试带数字的

    1.1不含负数

    1.2含负数

   2.测试不带数字的

   测试抛出异常:

    1,超过5个长度

2.格式不对

结果:

3.1.2.4 Driver或Stub程序的编制

  1.  /**
  2.   * 针对VoteType(String regex)
  3.   * 测试成功:
  4.   * 1.测试带数字的
  5.   *  1.1不含负数
  6.   *  1.2含负数
  7.   * 2.测试不带数字的
  8.   * 测试抛出异常:
  9.   * 1,超过5个长度
  10.   * 2.格式不对
  11.   */
  12.  @Test
  13.  public void VoteTypeTest_regex()
  14.  {
  15.   //"喜欢"(2)|"不喜欢"(0)|"无所谓"(1)
  16.   Map<String, Integer> options = new HashMap<>();
  17.   options.put("喜欢",2);
  18.   options.put("不喜欢",0);
  19.   options.put("无所谓",1);
  20.   VoteType voteType = new VoteType("\"喜欢\"(2)|\"不喜欢\"(0)|\"无所谓\"(1)");
  21.   assertEquals(options,voteType.getOptions());
  22.   //"喜欢"(-2)|"不喜欢"(0)|"无所谓"(1)
  23.   Map<String, Integer> options3 = new HashMap<>();
  24.   options3.put("喜欢",-2);
  25.   options3.put("不喜欢",0);
  26.   options3.put("无所谓",1);
  27.   VoteType voteType3 = new VoteType("\"喜欢\"(-2)|\"不喜欢\"(0)|\"无所谓\"(1)");
  28.   assertEquals(options3,voteType3.getOptions());
  29.   //"支持"|"反对"|"弃权"
  30.   //没有分数都默认为1
  31.   Map<String, Integer> options2 = new HashMap<>();
  32.   options2.put("支持",1);
  33.   options2.put("反对",1);
  34.   options2.put("弃权",1);
  35.   VoteType voteType2 = new VoteType("\"支持\"|\"反对\"|\"弃权\"");
  36.   assertEquals(options2,voteType2.getOptions());
  37.   assertThrows(IllegalArgumentException.class,()->new VoteType("\"超级超级支持\"|\"反对\"|\"弃权\""),"选项名长度超过5");
  38.   assertThrows(IllegalArgumentException.class,()->new VoteType("\"支持\"(1)|\"反对\"|\"弃权\""),"两种情况都不匹配");
  39.  }

      1. 循环结构程序测试

3.1.3.1测试对象

源代码

  1.  /**
  2.   * 在addVote中负责检查该选票合法性并标记
  3.   * @param vote 投票
  4.   * @param voter 投票人
  5.   */
  6.  public void checkVote(Vote<C> vote,Voter voter)
  7.  {
  8.   Set<VoteItem<C>> voteItems = vote.getVoteItems();
  9.   for (VoteItem<C> voteItem : voteItems) {
  10.    if(!candidates.contains(voteItem.getCandidate()))
  11.    {
  12.     voteIsLegal.put(vote,false);//包含了不在本次投票活动的候选人
  13.     return;
  14.    }
  15.    if(!voteType.checkLegality(voteItem.getVoteValue()))
  16.    {
  17.     voteIsLegal.put(vote,false);//一张选票中出现了本次投票不允许的选项值
  18.     return;
  19.    }
  20.    for(VoteItem<C> voteItem2 : voteItems)
  21.    {
  22.     if(voteItem2!=voteItem && voteItem2.getCandidate().equals(voteItem.getCandidate()))
  23.     {
  24.      voteIsLegal.put(vote,false);//一张选票中有对同一个候选对象的多次投票
  25.      return;
  26.     }
  27.    }
  28.   }
  29.   for (C candidate : candidates) {
  30.    if(!vote.candidateIncluded(candidate))
  31.    {
  32.     voteIsLegal.put(vote,false);//一张选票中没有包含本次投票活动中的所有候选人
  33.     return;
  34.    }
  35.   }
  36.   //若都无异常
  37.   voteIsLegal.put(vote,true);//鉴定为合法
  38.  }

流程图:

图3.1.3.2.1流程图

3.1.3.2测试用例设计

 checkVote测试

   四种共用不合法选票的测试

   选票不合法情况:

   一张选票中没有包含本次投票活动中的所有候选人

   一张选票中包含了不在本次投票活动中的候选人

   一张选票中出现了本次投票不允许的选项值

   一张选票中有对同一个候选对象的多次投票

候选人candidate1.candidate2,candidate3,candidate4

投票人vr1,选票为空

投票人vr2,选票里candidate5,candidate1,candidate2,candidate3

投票人vr3,选票里有candidate1.candidate2,candidate3,candidate4但是出现了本次投票不允许的选项值”like"

投票人vr3,选票里有candidate1.candidate2,candidate5,candidate4

投票人vr4,选票里有candidate1.candidate2,candidate3,candidate5

分类

细则

样例

0次循环

从循环入口直接跳到循环出口

投票人vr1,选票为空

1次循环

查找循环初始值方面的错误

投票人vr2,选票里candidate5,candidate1,candidate2,candidate3

2次循环

检查在多次循环时才能暴露的错误

投票人vr3,选票里有candidate1.candidate2,candidate3,candidate4但是出现了本次投票不允许的选项值”like"

m次循环

此时的m<n,也是检查在多次循环时才能暴露的错误

投票人vr3,选票里有candidate1.candidate2,candidate5,candidate4

最大次数循环

投票人vr4,选票里有candidate1.candidate2,candidate3,candidate5

3.1.3.3测试过程与结果

测试步骤:

候选人candidate1.candidate2,candidate3,candidate4

投票人vr1,选票为空

投票人vr2,选票里candidate5,candidate1,candidate2,candidate3

投票人vr3,选票里有candidate1.candidate2,candidate3,candidate4但是出现了本次投票不允许的选项值”like"

投票人vr3,选票里有candidate1.candidate2,candidate5,candidate4

投票人vr4,选票里有candidate1.candidate2,candidate3,candidate5

  1. 创建投票人
  2. 设定投票人权重
  3. 设定投票类型
  4. 创建候选人
  5. 创建投票项
  6. 创建投票
  7. 创建投票活动
  8. 更新投票人投票

结果:

 

3.1.3.4 Driver或Stub程序的编制

 

  1.  /**
  2.   * 是statisticTest的检测第二种异常情况:
  3.   * (也是checkVote的测试)
  4.   * 四种共用不合法选票的测试
  5.   * * 选票不合法情况
  6.   * * ? 一张选票中没有包含本次投票活动中的所有候选人
  7.   * * ? 一张选票中包含了不在本次投票活动中的候选人
  8.   * * ? 一张选票中出现了本次投票不允许的选项值
  9.   * * ? 一张选票中有对同一个候选对象的多次投票
  10.   * 具体测试样例:
  11.  *候选人candidate1.candidate2,candidate3,candidate4
  12.  *投票人vr1,选票为空
  13.  *投票人vr2,选票里candidate5,candidate1,candidate2,candidate3
  14.  *投票人vr3,选票里有candidate1.candidate2,candidate3,candidate4但是出现了本次投票不允许的选项值”like"
  15.  *投票人vr3,选票里有candidate1.candidate2,candidate5,candidate4
  16.  *投票人vr4,选票里有candidate1.candidate2,candidate3,candidate5
  17.   */
  18.  @Test
  19.  void checkVote_statistics_BuHeFaTest() {
  20.   // 创建2个投票人
  21.   Voter vr1 = new Voter("v1");
  22.   Voter vr2 = new Voter("v2");
  23.   Voter vr3 = new Voter("v3");
  24.   Voter vr4 = new Voter("v4");
  25.   // 设定2个投票人的权重
  26.   Map<Voter, Double> weightedVoters = new HashMap<>();
  27.   weightedVoters.put(vr1, 1.0);
  28.   weightedVoters.put(vr2, 1.0);
  29.   weightedVoters.put(vr3, 1.0);
  30.   weightedVoters.put(vr4, 1.0);
  31.   // 设定投票类型
  32.   Map<String, Integer> types = new HashMap<>();
  33.   types.put("Support"1);
  34.   types.put("Oppose"-1);
  35.   types.put("Waive"0);
  36.   VoteType voteType = new VoteType(types);
  37.   // 创建候选对象:候选人
  38.   Person p1 = new Person("candidate1"19);
  39.   Person p2 = new Person("candidate2"20);
  40.   Person p3 = new Person("candidate3"20);
  41.   ArrayList<Person> candidates = new ArrayList<>();
  42.   candidates.add(p1);
  43.   candidates.add(p2);
  44.   // 创建投票项,前三个是投票人vr1对三个候选对象的投票项,后三个是vr2的投票项
  45.   VoteItem<Person> vi11 = new VoteItem<>(p1, "Support");
  46.   Set<VoteItem<Person>> voteItems1 = new HashSet<>();
  47.   voteItems1.add(vi11);
  48.   VoteItem<Person> vi21 = new VoteItem<>(p1, "Oppose");
  49.   VoteItem<Person> vi22 = new VoteItem<>(p3, "Waive");
  50.   Set<VoteItem<Person>> voteItems2 = new HashSet<>();
  51.   voteItems2.add(vi21);
  52.   voteItems2.add(vi22);
  53.   VoteItem<Person> vi31 = new VoteItem<>(p1, "Oppose");
  54.   VoteItem<Person> vi32 = new VoteItem<>(p2, "like");
  55.   Set<VoteItem<Person>> voteItems3 = new HashSet<>();
  56.   voteItems3.add(vi31);
  57.   voteItems3.add(vi32);
  58.   VoteItem<Person> vi41 = new VoteItem<>(p1, "Support");
  59.   VoteItem<Person> vi42 = new VoteItem<>(p1, "Oppose");
  60.   Set<VoteItem<Person>> voteItems4 = new HashSet<>();
  61.   voteItems4.add(vi41);
  62.   voteItems4.add(vi42);
  63.   // 创建2个投票人vr1、vr2的选票
  64.   Vote<Person> rv1 = new Vote<Person>(voteItems1, new GregorianCalendar(2019614161530));
  65.   Vote<Person> rv2 = new Vote<Person>(voteItems2, new GregorianCalendar(2019614161530));
  66.   Vote<Person> rv3 = new Vote<Person>(voteItems3, new GregorianCalendar(2019614161530));
  67.   Vote<Person> rv4 = new Vote<Person>(voteItems4, new GregorianCalendar(2019614161530));
  68. //  System.out.println("rv1 = " + rv1);
  69. //  System.out.println("rv2 = " + rv2);
  70.   // 创建投票活动
  71.   GeneralPollImpl<Person> poll= new GeneralPollImpl<Person>();
  72.   // 设定投票基本信息:名称、日期、投票类型、选出的数量
  73.   String name = "代表选举";
  74.   GregorianCalendar date = new GregorianCalendar(2019614161530);
  75.   int quantity = 1;
  76.   poll.setInfo(name, date, voteType, quantity);
  77.   // 增加投票人及其权重
  78.   poll.addVoters(weightedVoters);
  79.   poll.addCandidates(candidates);
  80.   // 增加三个投票人的选票
  81.   poll.addVote(rv1, vr1);
  82.   poll.addVote(rv2, vr2);
  83.   poll.addVote(rv3, vr3);
  84.   poll.addVote(rv4, vr4);
  85.   GeneralPollImpl election =  poll;
  86.   Map<Vote<Person>, Boolean> voteIsLegal = election.getVoteIsLegal();
  87.   for (Map.Entry<Vote<Person>, Boolean> voteBooleanEntry : voteIsLegal.entrySet()) {
  88.    Boolean isLegal = voteBooleanEntry.getValue();
  89.    assertEquals(false, isLegal);
  90.   }
  91.  }
    1. 集成/系统测试

http://i-hit-edu-cn.ivpn.hit.edu.cn:1080/index#/app/home/index

      1. 学校本科生统一身份认证系统部分功能模块测试

3.2.1.1测试用例设计

本科生统一身份认证系统

测试样例

预期结果

最终结果

测试空白用户名和密码输入

提示空白输入

测试空白密码输入

提示空白密码输入

测试正确用户名和密码输入登录

成功登录,跳转主页

测试哈工大APP扫码登录

成功登录,跳转主页

测试QQ登录

成功登录,跳转主页

×无法使用qq登录

测试微信登录

成功登录,跳转主页

测试一周内免密登录

一周内都能免密成功登录,跳转主页

×无法一周内免密

测试忘记密码找回密码

成功找回密码

测试账号激活功能

跳转到账号激活页面,能完成功能

测试登录页面帮助文档

文档能够说明登录时候的大部分问题

3.2.1.2测试过程与结果

  1. 测试空白用户名和密码输入

 

结果:提示请输入用户名

符合预期√

  1. 测试空白密码输入

 

结果:提示请输入密码

符合预期√

  1. 测试正确用户名和密码输入登录

 

结果:成功登录并跳转主页

符合预期√

  1. 测试哈工大APP扫码登录

 

结果:弹出扫码框并且最后可以成功登录

符合预期√

  1. 测试QQ登录

 

结果:失败,调用QQ登录或许存在一些bug没以后解决

不符合预期×

  1. 测试微信登录

 

结果:弹出扫码框并且最后可以成功登录

符合预期√

  1. 测试一周内免密登录

 

结果:一周内没有一直免密登录,未到一周就会提示需要重新登录

不符合预期×

  1. 测试忘记密码找回密码

 

结果:成功跳转到忘记密码页面,能够实验修改密码

符合预期√

  1. 测试账号激活功能

 

结果:成功跳转到账号激活页面,能够激活账户

符合预期√

  1. 测试登录页面帮助文档

 

结果:成功跳转到帮助文档

符合预期√

      1. 学校本科生门户平台系统UI可用性测试与评价

3.2.2.1测试用例设计

测试样例

预期结果

最终结果

缺省值,登录成功跳转到缺省值

默认展示主页

输入验证,验证输入的学工号是否符合规范

提示学工号不符合规范

×无法提示学工号规范格式

系统响应,点击某个功能之后之后快速响应

快速跳转到新页面

×相对于其他网站,速度较慢

信息反馈,对于已经删除的校内新闻是否会给出提示

提示该内容已被删除

3.2.2.2测试过程与结果

  1. 缺省值,登录成功跳转到缺省值

结果:登陆成功会跳转到首页

符合预期√

  1. 输入验证,验证输入的学工号是否符合规范

结果:没有提示用户名固定格式出错,而是简单提示用户名或密码有错

不符合预期×

  1. 系统响应,点击某个功能之后之后快速响应

结果:快速点击多个校内新闻,跳转打开速度较慢

不符合预期×

  1. 信息反馈,对于已经删除的校内新闻是否会给出提示

结果:校内过时新闻会提示访问页面不存在

符合预期√

3.2.2.3 UI可用性即用户体验评价结果

当前效果

可以改进为

在主页面的动态效果太少,多数是静态效果

可以多一点动态新闻图片展示

每一条新闻没有评论功能

添加评论功能

没有快速点开个人常用应用

添加某个用户自己最常用的应用列表

没有网站指引说明

添加网站指引说明

主页一大篇幅我的待办功能略显鸡肋

可以调整我的待办的位置

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

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

相关文章

《计算机网络—自顶向下方法》 Wireshark实验(七):以太网与ARP协议分析

1 以太网 1.1 介绍 以太网是现实世界中最普遍的一种计算机网络。以太网有两类&#xff1a;第一类是经典以太网&#xff0c;第二类是交换式以太网&#xff0c;使用了一种称为交换机的设备连接不同的计算机。 经典以太网&#xff1a;是以太网的原始形式&#xff0c;运行速度从 …

股价与期待值“背道而驰”,友车科技能否站稳科创板?

上周&#xff0c;共计7只新股登陆A股&#xff0c;其中&#xff0c;用友汽车信息科技&#xff08;上海&#xff09;股份有限公司&#xff08;以下简称友车科技&#xff09;于5月11日在科创板上市。发行价为33.99元&#xff0c;发行3607.94万股&#xff0c;募资总额为12.24亿元。…

jmeter接口测试项目实战详解,零基础也能学,源码框架都给你

目录 1.什么是jmeter&#xff1f; 2.jmeter能做什么&#xff1f; 3.jmeter环境搭建 3.1前提&#xff1a; 3.2jmeter下载&#xff1a; 3.3jmeter环境搭建&#xff1a; 3.3.1mac当中jmeter环境搭建&#xff1a; 3.4jmeter基本配置 3.4.1.切换语言 3.4.2.安装插件 4.jmet…

MySQL数据库基础2

文章目录 数据类型表的约束 数据类型 1、数值类型&#xff1a;BIT、TINYINT、BOOL、SMALLINT、INT、BIGINT、FLOAT[(M,D)]、DOUBLE[(M,D)]、DECIMAL[(M,D)] FLOAT[(M,D)]&#xff1a;占用四个字节&#xff0c;M表示显示位数&#xff0c;D表示小数位数&#xff0c;精度保证&am…

5年测试,已失业3个月.....

我做测试5年&#xff0c;一线城市薪水拿到15K&#xff0c;中间还修了一个专升本&#xff0c;这个年限不说资深肯定也是配得上经验丰富的。今年行情不好人尽皆知&#xff0c;但我还是对我的薪水不是很满意&#xff0c;于是打算出去面试&#xff0c;希望可以搏一个高薪。 但真到面…

测试自动化工具_Katalon

测试自动化_Katalon 1.概述 ​ Katalon界面的自动化测试工具&#xff0c;简称KS&#xff0c;于2015年推出。是开源的&#xff0c;提供的版本有免费的版本&#xff0c;还有企业版是收费的。如下图。其中的服务台功能应该是持续继承的支持。可试用一个月。 ​ 最初是支持Web UI…

Chatgpt论文笔记——MiNiGPT4解读

前言 代码地址&#xff1a;https://github.com/Vision-CAIR/MiniGPT-4 摘要 摘要写的就很简单了&#xff0c;标黄的是重点&#xff0c;可以看到这个方法很简单&#xff0c;就是拿了一个视觉的encoder&#xff08;Blip-2&#xff09;以及拿了一个文本的encoder&#xff08;Vic…

OpenPCDet系列 | 5.2 PointPillars算法——PointPillarScatter伪图像BEV特征构建模块

文章目录 PointPillarScatter模块1. PointPillarScatter初始化2. PointPillarScatter前向传播 OpenPCDet的整个结构图&#xff1a; PointPillarScatter模块 在进行了PillarVFE编码后&#xff0c;此时的batch_dict更新如下所示&#xff0c;追加了pillar_features字段&#xf…

好程序员:转行学Java怎么样?什么工作可以月入过万?

去年的时候有个学妹跟小源说&#xff0c;想转行&#xff0c;但是目前又比较迷茫&#xff0c;不知道该从事啥行业&#xff1f;她跟小源说了下具体情况&#xff0c;本科学历&#xff0c;Java零基础。小源让好程序员的就业老师跟她分享了下相关的it行业规划&#xff0c;最后她学了…

Python实现ACO蚁群优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

关于摄影艺术欣赏分享(私密空间+玛丽娜·阿布拉莫维奇+世界十大最昂贵的摄影作品欣赏+《死亡路上的对话》+马良作品)

文章的内容灵感是旁听课而来的呀&#xff0c;搜了很多相关文章很喜欢 1. 出去遛狗&#xff0c;晚点回来 国外文化中国文化&#xff08;国外不可以随意拍摄照片&#xff09; 公共空间私密空间 艺术的价值在于可以给人们思考&#xff0c;颠覆常识 2. 行为艺术之母玛丽娜阿布拉…

YOLOv5【目录结构源码】超详细注释解读!!!建议收藏✨✨!

上一篇文章介绍了YOLOv5的网络的详细解读&#xff1a;直通车&#x1f680; 由于以后的学习及在进行的项目打算YOLOv5再仔细研究进行使用及改进&#xff0c;接下来会出相关于YOLOv5的代码逐行解读以及注释&#xff0c;废话不多说&#xff0c;让我们一起学习YOLOv5源码吧&#xf…

CTFshow pwn03

题目&#xff1a; 在做本道题前&#xff0c;我们先了解所必要的知识 Libc是什么&#xff1f; 英文名字&#xff1a;Standard C library&#xff0c;其翻译过来&#xff0c;C语言标准库 它是符合ANSI C标准的一个函数库 学过C语言会明白 ANSI C标准又是什么&#xff1f; 198…

Redo log

目录标题 前言为什么需要redo log redo log中的WAL&#xff08;先写日志&#xff0c;再写磁盘&#xff09;重要参数innodb_flush_log_at_trx_commit如何选择 redo log记录形式日志块(log block)redo log的格式 redo log何时刷入磁盘正常关闭服务器时事务提交时&#xff08;inno…

【STL】string的使用

放在专栏【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339; STL简介 STL的诞生 STL为英文Standard Template Library的缩写&#xff0c;译为标准模板库。是C标准库的重要组成部分。 长久以来&#xff0c;软件届一直希望建立一种可重复运用的东西。所谓…

首个支持RWA交易的订单簿DEX-PoseiSwap,即将开启IEO

随着 DeFi 世界的发展&#xff0c;越来越多的链上协议支持以合成资产的方式&#xff0c;将传统金融资产以加密资产的形式映射至链上&#xff0c;包括美股、黄金期货等等&#xff0c;虽然这种方式进一步帮助投资者&#xff0c;以非许可的形式丰富了投资标的&#xff0c;但这种方…

GraphPad Prism 9.5.1 for Mac 操作简便功能强大且实用的医学绘图分析工具

GraphPad Prism简介 GraphPad Prism是一款非常实用的统计软件&#xff0c;其功能非常强大&#xff0c;能够帮助用户进行各类科研数据的处理和分析&#xff0c;快速绘制出各种专业的图像和数据报告。 GraphPad Prism软件的用户界面非常友好&#xff0c;易于学习和操作&#xf…

azkaban 安装 使用

目录 拷贝安装包 解压 改名 修改MySQL配置文件 创建数据库 导入数据表 修改配置文件 修改azkaban-exec下面文件 修改azkaban.properties文件 修改 commonprivate.properties 文件 修改MySQL的jar包 启动 azkaban-exec 修改azkaban-web下面文件 修改azkaban.prop…

Amazon EKS 上有状态服务启用存储加密

1.背景 用户通过 Deployment, Replication Controller 可以方便地在 Kubernetes 中部署一套高可用、可扩展的分布式无状态服务。这类应用不在本地存储数据&#xff0c;通过简单的负载均衡策略可实现请求分发。 Deployment 以及 Replication Controller 是为无状态服务而设计的…

关于Alibaba开发手册中提到的Manager层解析(对于传统MVC三层架构的改进)

Manager层的理解 MVC三层架构 MVC&#xff08;Model View Controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码&#xff0c;将业务逻辑聚集到一个部件里面…