《软件测试》实验2:嵌入式软件测试实验报告

news2025/1/13 14:13:50

文章目录

  • 实验目的
  • 温度控制器需求文档及测试要求
  • 环境搭建
  • 实验内容
    • 温度采集处理功能测试
    • 加热棒输出电压测试
    • 散热风扇
    • 温度传感器输入接口(Senser_JK)
    • 控制加热棒输出接口(Heater_JK)
    • 控制散热风扇输出接口(Fan_JK)
    • 温控稳定时间性能需求(Control_XN)
  • 最终测试结果

实验目的

本次测试对象是温度控制器。

温度控制器需求文档及测试要求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

环境搭建

在这里插入图片描述
解压 vspd.rar 文件,打开 vspdxp_install 进行安装

实验内容

在这里插入图片描述
在这里插入图片描述
点击“打开项目”,打开esi文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打开 vspdconfig
根据需求文档,使用vspd绑定对应的串口
在这里插入图片描述
创建3对串口,5和6一对,7和8一对,9和 10一对
在这里插入图片描述
打开待测件
在这里插入图片描述
然后点确定
在这里插入图片描述
在这里插入图片描述
打开ETest,点环境设置然后点确定(环境设置时直接确定,不需要手动更改)
在这里插入图片描述
成功后如图
在这里插入图片描述

温度采集处理功能测试

温度采集处理的示例代码已经给出了,点击ETest右侧的“项目->测试目录->功能测试->温度采集处理”进入代码
在这里插入图片描述

# coding:utf-8
def Test(arg,exp):
	CH_232_温度传感器.Clear()
	Protocol_温度传感器.温度值.Value = arg[1]
	bool=Protocol_温度传感器.Write()
	print '第%d次期望显示温度值%d'%(arg[0], exp[0])
	API.Common.Timer.Normal.Sleep(1000)

Standard_Test(Test)

先点击运行
在这里插入图片描述
再点击开始
在这里插入图片描述
可以看到数据了
在这里插入图片描述
下面给出具体的测试方法

  1. 首先看功能需求
    在这里插入图片描述
  2. 点击ETest右侧的“项目->测试目录->功能测试->温度采集处理”,再点击“测试数据”,向里面输入自己的测试数据
    在这里插入图片描述
  3. 点击“测试任务”,编写自己的测试脚本
# coding:utf-8
############标准测试模板#######################
## Test:测试数据执行函数体,【测试数据】每一行数据调用一次Test
## arg:输入参数
## exp:预期输出
import Manu
def Test(arg,exp):
	  # 给字段复制
      Protocol_温度传感器.温度值.Value = arg[1]
      # 协议写
      bool=Protocol_温度传感器.Write()
      show = []
      str0 = "序号: " + str(arg[0])
      str1 = "设定温度:" + str(arg[1])
      str2 = "预期温度:" + str(exp[0])
      # str0, str1, str2分别会被显示在菜单的第一、二、三行
      show.append(str0)
      show.append(str1)
      show.append(str2)
      # 弹出对话框
      # 点击确定,返回值为true
      # 点击否定,返回值为false
      Manu.Check(show)

### 入口
Standard_Test(Test)

  1. 打开测试文件中提供的SensorControl.exe
    在这里插入图片描述
    直接点击“确定”,然后点“开始”
    在这里插入图片描述
  2. 回到ETest,点击上方的“运行”(如果运行是灰色的,就需要先点击旁边的“环境设置”,等待一会,然后就能点运行了)
    在这里插入图片描述这时候弹出了对话框,就可以将对话框中的“设定温度”、“预期温度”和温度控制器的“采集温度”进行对比,从而得到测试结果,找到问题
    在这里插入图片描述

加热棒输出电压测试

  1. 首先看功能需求
    在这里插入图片描述
  2. 右键“功能测试”,点击“新建测试用例->TCPython”,输入测试名称“加热棒”,然后写好测试代码,下面的代码是不读取“测试数据”的写法
# coding:utf-8
import math
import Manu

def Volt(j, arr):
      Dp = 0.05
      Di = 0.1
      Dd = 0.1
      Td = 20 # 设定温度
      ek = Td - arr[j]
      if j == 0:
            ek1 = Td - 15
            ek2 = Td - 15
      elif j == 1:
            ek1 = Td - arr[j - 1]
            ek2 = Td - 15
      else:
            ek1 = Td - arr[j - 1]
            ek2 = Td - arr[j - 2]
      print "ek = %d, ek1 = %d , ek2 = %d" % (ek, ek1, ek2)
      # 电压变化量
      result = Dp * (ek - ek1) + Di * ek + Dd * (ek - 2 * ek1 + ek2)
      print "result = %f" % result 
      return result

def init():  
      # 初始化待测件加热棒输出为已知状态
      Protocol_温度传感器.温度值.Value = 15
      bool=Protocol_温度传感器.Write()
      API.Common.Timer.Normal.Sleep(200)
      Protocol_温度传感器.温度值.Value = 15
      bool=Protocol_温度传感器.Write()
      API.Common.Timer.Normal.Sleep(1000)
      
def Test():
      print 'Test start'
      # 初始化电压输出为已知状态
      init()     
      # 清理通道
      seekresult=CH_232_加热棒.Clear()
      # 等待新的数据包
      Protocol_加热棒.BlockRead()
      # 获取当前的电压
      v = Protocol_加热棒.加热棒输出电压.Value
      # 设定温度
      Td = 20
      # 预期采集电压列表
      T = [15, 15, 15 , 15, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23]
      for i in range(len(T)):
            print "------------------------------"
            print "第%d次,当前采集温度值: %f" % (i, T[i])
            # 写入新一次的温感数据
            Protocol_温度传感器.温度值.Value = T[i]
            bool=Protocol_温度传感器.Write()
            # 清理加热棒输出通道
            seekresult=CH_232_加热棒.Clear()
            Protocol_加热棒.BlockRead()
            v = v + Volt(i, T)
            # 负值截断处理
            if v < 0:
                  v = 0
            print "第%d次期望输出电压值为: %f, 实际输出电压值为: %f, 误差为: %.3f" % (i + 1, v, Protocol_加热棒.加热棒输出电压.Value, v - Protocol_加热棒.加热棒输出电压.Value)
            print "------------------------------"
            API.Common.Timer.Normal.Sleep(2000)

Test()

如果是读取测试数据,那么代码如下

import math
import Manu

def VK(t, td, e1, e2):
      # t -> 当前温度
      # td -> 设定温度
      Dp = 0.05
      Di = 0.1
      Dd = 0.1
      e = td - t
      
      result = Dp * (e - e1) + Di * e + Dd * (e - 2e1 + e2)
      return result
      
def Test(arg,exp):
	global e1      # 上一次的温差, 设定温度-当前温度
	global e2      # 上上次的温差,
	global V1      # 当前时刻的输出电压值
	  
	# 通道清理,防止上一次的运行结果在通道中阻塞,影响本次效果
	seekresult=CH_232_加热棒.Clear()
	seekresult=CH_232_温度传感器.Clear()
	  
	# 给温度采集器赋值,当前温度
	Protocol_温度传感器.温度值.Value = arg[2]
	bool=Protocol_温度传感器.Write()
	API.Common.Timer.Normal.Sleep(1000)
	  
	# arg[0] -->序号
	# arg[1] -->设定温度
	# arg[2] -->当前温度
	# 第一次改变温度
	if arg[0] == 1:
	    e1 = arg[1] - arg[2]
	# 第二次改变温度
	if arg[0] == 2:
	    e2 = arg[1] - arg[2]
	    Protocol_加热棒.BlockRead()
	    V1 = Protocol_加热棒.加热棒输出电压.Value
	 # 三次以上    
	if arg[0] > 2:
	    V  = VK(arg[2],  arg[1], e1, e2) + V1
	    print V
	    show = []
	    str = "设定温度为:%d, 室温为:%f" % (arg[1], arg[2])
	    show.append(str)
	    str = "预期电压为: %f"  % (V)
	    show.append(str)
	    show.append("界面电压显示是否正确?")
	    passed = Manu.Check(show)
	    
	    e2 = e1
	    e1 = arg[1] - arg[2]
	    # 协议读,读取输出给加热棒的数据包
	    Protocol_加热棒.BlockRead()
	    # 获取字段,当前电压,作为下一次的V(k-1)
	    V1 = Protocol_加热棒.加热棒输出电压.Value
             
Standard_Test(Test)

  1. 如果是读取“测试数据”的写法,那么就需要添加数据。点击“测试数据”,在“输入参数”下方的空白行处右键,点击“添加输入参数”
    在这里插入图片描述
    比如要新建名称为“序号”的一列,那么就这样填
    在这里插入图片描述
    同样的方法,在输入参数处添加“设定温度”、“采集温度”,然后点击“添加行”,就可以添加数据了
    在这里插入图片描述

散热风扇

  1. 首先看功能需求
    在这里插入图片描述
  2. 新建项目,写测试代码
# coding:utf-8
############标准测试模板#######################
## Test:测试数据执行函数体,【测试数据】每一行数据调用一次Test
## arg:输入参数
## exp:预期输出
import Manu

def Test(arg,exp):
      # 写入数据前,先清理通道
      seekresult=CH_232_温度传感器.Clear()
      seekresult=CH_232_散热风扇.Clear()
      
      # 写入第一次温度
      Protocol_温度传感器.温度值.Value = arg[1]
      bool=Protocol_温度传感器.Write()
      API.Common.Timer.Normal.Sleep(500)
      
      # 写入第二次温度
      Protocol_温度传感器.温度值.Value = arg[2]
      bool=Protocol_温度传感器.Write()
      API.Common.Timer.Normal.Sleep(500)
      
      CH_232_散热风扇.Clear()
            
      # 写入第三次温度
      Protocol_温度传感器.温度值.Value = arg[3]
      bool=Protocol_温度传感器.Write()
      API.Common.Timer.Normal.Sleep(500)
      
      # 确保控制散热风扇的指令能够正常发出去
      Protocol_散热风扇.BlockRead()
      show = []
      str = '第%d次期望散热风扇输出值:%s,实际输出值:%d' % (arg[0], exp[0], Protocol_散热风扇.操作指令.Value)
      show.append(str)
      Manu.Check(show)

## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)

  1. 构建测试数据
    在这里插入图片描述
  2. 先启动SensorControl.exe,再运行测试程序
    对比两个程序的输出即可
    在这里插入图片描述
    在这里插入图片描述

温度传感器输入接口(Senser_JK)

  1. 首先看接口需求
    在这里插入图片描述
    在这里插入图片描述
  2. 构建测试数据
    在这里插入图片描述
  3. 代码
# coding:utf-8
import Manu

def Test(arg,exp):
	# 先清理温感通道
	seekresult=CH_232_温度传感器.Clear()
	# 分割字符串为列表,按照空格
	str = arg[0].split(' ')
	data = []
	for i in str:
		# 将16进制整型的字符串转化为整型表示
		# 将16进制字符串转化为10进制整型表示
		data.append(int(i, 16))
	# 通道写入数据包
	bool=CH_232_温度传感器.Write(data)
	show = []
	show.append(exp[0])
	Manu.Check(show)

## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)

控制加热棒输出接口(Heater_JK)

  1. 首先看接口需求
    在这里插入图片描述
  2. 测试代码
#设定温度10℃
def Main():
      print 'Hello world'
      seekresult=CH_232_加热棒.Clear()
      seekresult=CH_232_温度传感器.Clear()
      Protocol_温度传感器.温度值.Value = 20      #不加热
      bool=Protocol_温度传感器.Write()
      Protocol_加热棒.BlockRead()
      if Protocol_加热棒.包头.Value != 0xFFFA:
            print '包头错误,错误的包头为%x'%Protocol_加热棒.包头.Value
      if Protocol_加热棒.数据类型1.Value != 0x02:
            print '执行数据错误,错误的数据类型1为%d'%Protocol_加热棒.数据类型1.Value
      if Protocol_加热棒.数据类型2.Value != 0x11:
            print '工作电机组错误,错误的数据类型2数据为%x'%Protocol_加热棒.数据类型2.Value
      if Protocol_加热棒.数据长度.Value != 4:
            print '数据长度错误,错误的长度值为%d'%Protocol_加热棒.数据长度.Value
      if Protocol_加热棒.检验.Checked != True:
            print '检验值错误,错误的校验值为%x'%Protocol_加热棒.检验.Value
      if Protocol_加热棒.包尾.Value !=0x0F:
            print '包尾错误,错误的包尾为%x'%Protocol_加热棒.包尾.Value

      Protocol_温度传感器.温度值.Value = 5      #加热
      bool=Protocol_温度传感器.Write()
      Protocol_加热棒.BlockRead()
      if Protocol_加热棒.包头.Value != 0xFFFA:
            print '包头错误,错误的包头为%x'%Protocol_加热棒.包头.Value
      if Protocol_加热棒.数据类型1.Value != 0x02:
            print '执行数据错误,错误的数据类型1为%d'%Protocol_加热棒.数据类型1.Value
      if Protocol_加热棒.数据类型2.Value != 0x11:
            print '工作电机组错误,错误的数据类型2数据为%x'%Protocol_加热棒.数据类型2.Value
      if Protocol_加热棒.数据长度.Value != 4:
            print '数据长度错误,错误的长度值为%d'%Protocol_加热棒.数据长度.Value
      if Protocol_加热棒.检验.Checked != True:
            print '检验值错误,错误的校验值为%x'%Protocol_加热棒.检验.Value
      if Protocol_加热棒.包尾.Value !=0x0F:
            print '包尾错误,错误的包尾为%x'%Protocol_加热棒.包尾.Value
            
Main()

控制散热风扇输出接口(Fan_JK)

  1. 首先看接口需求
    在这里插入图片描述
  2. 测试代码
# 设定温度为10
def Main():
      seekresult=CH_232_温度传感器.Clear()
      seekresult=CH_232_散热风扇.Clear()
      # 写入初始状态,保证风扇不转动
      for i in [8, 8, 8]:
            Protocol_温度传感器.温度值.Value = i
            bool=Protocol_温度传感器.Write()
            API.Common.Timer.Normal.Sleep(100)
      # 散热风扇阻塞获取数据包
      Protocol_散热风扇.BlockRead()
      if Protocol_散热风扇.包头.Value != 0xFFFA:
            print "包头错误,错误的包头为: %x" % Protocol_温度传感器.包头.Value
      if Protocol_散热风扇.数据类型1.Value != 0x02:
            print "数据类型1错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型1.Value
      if Protocol_散热风扇.数据类型2.Value != 0x22:
            print "数据类型2错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型2.Value
      if Protocol_散热风扇.数据长度.Value != 1:
            print "数据长度错误,错误的数据长度为: %d" % Protocol_散热风扇.数据长度.Value
      if Protocol_散热风扇.检验.Checked != True:
            print "检验和错误,错误的检验值为: %x" % Protocol_散热风扇.检验.Value
      if Protocol_温度传感器.包尾.Value != 0x0F:
             print "包尾错误,错误的包尾为: %x" % Protocol_散热风扇.包尾.Value
         
      print "---------------------------------------------------------------------------------"
      # 写入初始状态,保证散热风扇工作,来判断数据包是否正确
      seekresult=CH_232_散热风扇.Clear()
      for i in [15, 15, 15]:
           Protocol_温度传感器.温度值.Value = i
           bool=Protocol_温度传感器.Write()
           API.Common.Timer.Normal.Sleep(100)
      Protocol_散热风扇.BlockRead()
      if Protocol_散热风扇.包头.Value != 0xFFFA:
            print "包头错误,错误的包头为: %x" % Protocol_温度传感器.包头.Value
      if Protocol_散热风扇.数据类型1.Value != 0x02:
            print "数据类型1错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型1.Value
      if Protocol_散热风扇.数据类型2.Value != 0x22:
            print "数据类型2错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型2.Value
      if Protocol_散热风扇.数据长度.Value != 1:
            print "数据长度错误,错误的数据长度为: %d" % Protocol_散热风扇.数据长度.Value
      if Protocol_散热风扇.检验.Checked != True:
            print "检验和错误,错误的检验值为: %x" % Protocol_散热风扇.检验.Value
      if Protocol_温度传感器.包尾.Value != 0x0F:
             print "包尾错误,错误的包尾为: %x" % Protocol_散热风扇.包尾.Value
             
Main()

温控稳定时间性能需求(Control_XN)

  1. 首先看性能需求
    在这里插入图片描述
    在这里插入图片描述
  2. 测试代码
# coding:utf-8
#设定温度为10℃,初始恒温箱外部温度值为3℃
def Main():
      print 'Hello world'
      import time
      Tc = 10    #设定温度
      T0 = 0      #初始恒温箱外部温度值
      
      T = T0
      n = 0
      Fs = 0
      Va = 0   #上一次的输出电压
      time0 = time.time()
      while 1:
            seekresult=CH_232_温度传感器.Clear()
            seekresult=CH_232_加热棒.Clear()
            seekresult=CH_232_散热风扇.Clear()           
            Protocol_温度传感器.温度值.Value = T
            bool=Protocol_温度传感器.Write()
            Protocol_加热棒.BlockRead()
            Protocol_散热风扇.BlockRead()
            V = Protocol_加热棒.加热棒输出电压.Value
            if V<0:
                V=0
            # 计算加热棒的加热量
            Qi = V*V *0.2
            if Protocol_散热风扇.操作指令.Value == 1:       #风扇打开
                  Fs =2
            elif Protocol_散热风扇.操作指令.Value == 0:       #风扇关闭
                  Fs = 0
            # 计算散热风扇的散热量
            Qo = 0.1*(T - T0) + Fs
            #Qo = Fs
            # 温度的变化量
            T = T+(Qi-Qo)      #下次输出温度值
            if abs(T - Tc) < 0.5:
                  n=n+1
            else:
                 n=0
            # 当超过10次时
            if n >=10:
                  time1 = time.time()
                  print '稳定时间为%d'%(time1-time0)
                  if time1-time0 <=60:
                        print '温控稳定时间性能测试合格'
                  break
            # 当始终不能达到十次
            time2 = time.time()
            # 超时
            if time2-time0>60:
                  print '温控稳定时间性能测试不合格'
                  break
            API.Common.Timer.Normal.Sleep(1000)
      
Main()

最终测试结果

在这里插入图片描述

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

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

相关文章

目标检测 YOLOv5 - 模型推理预处理 letterbox

目标检测 YOLOv5 - 模型推理预处理 letterbox flyfish 版本&#xff1a;YOLOv5 6.2 假如图片大小是1080 * 1920 &#xff08;height * width &#xff09; width 1920 height 1080 当模型输入是 640 * 640时 shapes (1080, 1920), (0.33, 0.33), (0.0, 140.0) 640/ 1920…

c++11 右值引用和移动语义

文章目录1. 左值引用和右值引用2. 左值引用与右值引用比较3. 右值引用使用场景和意义3.1左值引用的使用场景3.2左值引用的短板&#xff1a;3.3 移动构造3.4 移动赋值3.5 STL中的容器3.6 右值引用引用左值及其一些更深入的使用场景分析3.7 STL容器插入接口函数也增加了右值引用版…

Springboot 使用装饰器模式,快看,它装起来了

前言 小飞棍来咯&#xff01; 本篇文章跟小飞棍一毛钱关系没有。 本篇内容&#xff1a; 就是配合实战案例介绍我们平时 在springboot项目里面 怎么去用 装饰器模式、多层装饰怎么玩。 正文 首先先说下装饰器模式是什么 官方&#xff1a; 装饰器模式&#xff08;Decorator Pa…

Python3,5行代码,制作Gif动图,太简单了。

gif动图制作1、引言2、代码实战2.1 安装2.2 代码3、总结1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 你能不能帮我找一个动图&#xff0c; 小鱼&#xff1a;啥动图&#xff0c;你自己百度不就行了。 小屌丝&#xff1a;我这不是没找到吗&#xff0c; 不然我就自己来找了。 小…

Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库

Oracle数据库&#xff1a;net configureation assistant工具配置监听listener&#xff0c;配置本地网络访问服务器上的数据库 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开…

图像类找工作面试题(二)——常见问题大总结

文章目录一、深度学习问题1、目标检测系列&#xff08;1&#xff09;介绍目标检测网络YOLO以及SSD系列原理。&#xff08;2&#xff09;YOLO对小目标检测效果不好的原因&#xff0c;怎么改善&#xff1f;&#xff08;3&#xff09;怎么防止过拟合&#xff08;4&#xff09;Drop…

Ubuntu18.04LTS环境下创建OpenCV4.x-Android库

1 背景 1.1 java.lang.UnsatisfiedLinkError: dlopen failed: library “libc_shared.so” not found libc_shared.so 之前默认集成在 opencv_java3.so&#xff0c;但是在OpenCV4.x以后&#xff0c;该动态库默认不集成在opencv_java4.so。 1.2 E/OpenCV/StaticHelper: OpenC…

NLP学习之:Bert 模型复现(1)任务分析 + 训练数据集构造

​ 文章目录代码资源原理学习任务代码讲解代码重写说明代码资源 Bert-pytorch 原理 学习任务 Bert 本质上是 Transformer 的 Encoder 端&#xff0c;Bert 在预训练时最基本的任务就是&#xff1a; 判断输入的两个句子是否真的相邻预测被 [MASK] 掉的单词 通过这两种任务的约…

面了个腾讯拿28k跳槽出来的,真正见识到了跳槽天花板

最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备金九银十的面试计划。 作为一个入职5年的老人家&#xff0c;目前工资比较乐观&#xff0c;但是我还是会选择跳槽&#xff0c;因为感觉在一个舒适圈待久了&#xff0c;人过得太过安逸&#xff0c;晋升涨…

ToDesk使用

现在的终端产品种类非常的多&#xff0c;常见的包括tablet, 手机&#xff0c;笔记本 ,ipod...等等&#xff0c;这些终端带屏产品连同台式机&#xff0c;智能电视等固定设备占据了我们的工作和生活中的大部分时间&#xff0c;不知道你发现没有&#xff0c;使这些不同种类的产品之…

[机器学习、Spark]Spark MLlib实现数据基本统计

&#x1f468;‍&#x1f393;&#x1f468;‍&#x1f393;博主&#xff1a;发量不足 &#x1f4d1;&#x1f4d1;本期更新内容&#xff1a;Spark MLlib基本统计 &#x1f4d1;&#x1f4d1;下篇文章预告&#xff1a;Spark MLlib的分类&#x1f525;&#x1f525; 简介&…

Java多线程【锁优化与死锁】

Java多线程【锁优化与死锁】&#x1f352;一.synchronized的优化&#x1f34e;1.1基本特点&#x1f34e;1.2加锁工作过程&#x1f34e;1.3优化操作&#x1f352;二.死锁&#x1f34e;2.1什么是死锁&#x1f34e;2.2 一对一死锁&#x1f34e;2.3 二对二死锁&#x1f34e;2.4 N对…

Web 1.0、Web 2.0 和 Web 3.0 之间的比较

&#x1f482; 个人网站:【海拥】【摸鱼小游戏】【神级源码资源网站】&#x1f91f; 风趣幽默的前端学习课程&#xff1a;&#x1f449;28个案例趣学前端&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f4ac; 免费且实用的 P…

目前最先进的神经网络算法,神经网络算法发展

1、神经网络的发展趋势如何&#xff1f; 神经网络的云集成模式还不是很成熟&#xff0c;应该有发展潜力&#xff0c;但神经网络有自己的硬伤&#xff0c;不知道能够达到怎样的效果&#xff0c;所以决策支持系统中并不是很热门&#xff0c;但是神经网络无视过程的优点也是无可替…

HTML5新特性

H5新增 1) 新增选择器 document.querySelector、document.querySelectorAll doucment.querySelector(#sampel) // 选择id doucment.querySelector(.sampel) // 选择出现的第一个类 doucment.querySelectorAll(.sampel)[0] // 选择出现的第一个类2)拖拽释放(Drag and drop) AP…

2022年江西省赣育杯网络安全大赛学生组WebMisc Writeup

文章目录WEB签到easyzphpezpyMISCbyteMuisc有趣的PDFWEB 签到 ?id-1union select 1,(select group_concat(schema_name) from information_schema.schemata),3,4,5--?id-1union select 1,(select group_concat(table_name) from information_schema.tables where table_sch…