什么是单元测试?
什么是单元测试
单元测试是软件开发中的一种测试方法,旨在验证各个软件组件或模块的功能正确性。在敏捷开发环境中,单元测试尤为重要,因为它有助于确保代码的质量和稳定性。下面是一些关于单元测试的关键点:
-
定义:单元测试是对软件中最小可测试部分(通常是函数、方法或类)的测试。目的是验证这些单元在各种条件下都按预期工作。
-
自动化:单元测试通常是自动化的,意味着测试脚本会自动执行并报告结果,而不需要手动干预。
-
隔离:在单元测试中,每个单元都应该被隔离测试,以确保测试结果只反映该单元的行为。这通常涉及到模拟依赖项和使用存根。
-
频繁运行:在敏捷开发中,单元测试通常在代码变更后立即运行,这有助于快速发现和修复错误。
-
测试覆盖率:衡量单元测试的一个重要指标是测试覆盖率,即代码中被测试的比例。高覆盖率有助于减少漏洞和错误。
-
维护性:单元测试不仅需要编写,还需要维护。随着软件的发展,测试用例可能需要更新或重构。
-
集成:单元测试是持续集成和持续部署流程的重要组成部分,确保代码更改不会破坏现有功能。
单元测试是敏捷开发过程中质量保证的关键环节,有助于加快开发速度,提高代码质量,同时减少长期维护成本。
单元测试用例怎么写?
编写单元测试用例通常遵循一定的结构和原则,以确保它们有效地测试代码。以下是编写单元测试用例的基本步骤和建议:
1.选择测试框架:首先,选择一个适合你的编程语言和项目需求的单元测试框架。例如,对于Java,常用的是JUnit;对于Python,是Pytest或unittest。
-
确定测试单元:识别要测试的代码单元,通常是一个函数或方法。
-
编写测试用例:为每个需要测试的功能编写测试用例。一个好的测试用例通常遵循以下结构:
- 准备(Arrange):设置测试环境,初始化对象,准备输入数据。
- 执行(Act):调用测试单元,传入必要的参数。
- 断言(Assert):验证测试单元的输出或行为是否符合预期。
-
覆盖各种情况:确保测试用例覆盖了正常情况、边界情况和异常情况。例如,对于一个计算函数,测试应包括正常输入值、边界输入值(如最大、最小值)和非法输入值(如null或错误类型)。
-
独立性:每个测试用例应独立于其他测试,不依赖于其他测试的执行顺序或结果。
-
命名清晰:给测试用例一个描述性的名称,使其易于理解测试的目的。
-
重复使用测试代码:如果有多个测试用例需要重复设置相同的环境,可以使用测试框架提供的设置(setup)和清理(teardown)机制。
-
运行和审查:运行测试用例,并审查结果。如果测试未通过,检查代码中的错误。
-
维护测试用例:随着软件的发展,定期更新和维护测试用例以保持其相关性。
下面是一个简单的示例,展示了如何为一个简单的加法函数编写单元测试用例(假设使用Python的unittest框架):
import unittestdef add(a, b):return a + bclass TestAddFunction(unittest.TestCase):def test_add_positive_numbers(self):self.assertEqual(add(1, 2), 3)def test_add_negative_numbers(self):self.assertEqual(add(-1, -2), -3)def test_add_zero(self):self.assertEqual(add(0, 0), 0)if __name__ == '__main__':unittest.main()
在这个例子中,我们为add函数创建了三个测试用例,分别测试正数相加、负数相加和零相加的情况。每个测试用例都是独立的,并且明确地验证了预期的输出。
plc的单元测试怎么写
编写针对PLC(可编程逻辑控制器)的单元测试相对于传统软件开发具有一些特别的考虑因素。由于PLC通常控制着实时的、与物理世界相连的系统,因此单元测试不仅要考虑软件逻辑的正确性,还要考虑与硬件的交互。以下是编写PLC单元测试的一些步骤和建议:
-
理解PLC程序结构:PLC程序通常包括输入/输出(I/O)处理、数据处理和控制逻辑等部分。要有效地测试这些组件,首先需要深入了解它们的工作原理和相互作用。
-
选择适当的测试工具:根据所使用的PLC编程语言(如梯形图、功能块图、指令列表等),选择合适的测试工具。有些PLC开发环境提供内置的测试工具和仿真功能。
-
分离和模拟I/O:在测试环境中,通常需要模拟外部I/O,这样才能在不接触实际物理设备的情况下测试PLC程序。可以使用软件工具来模拟传感器输入和执行器输出。
-
编写测试用例:针对每个独立的功能或逻辑块编写测试用例。测试用例应验证程序在不同输入条件下的响应,包括边界条件和异常情况。
-
考虑时间和顺序依赖性:PLC程序通常涉及时间和顺序逻辑。确保测试用例能够验证这些依赖性,例如通过模拟时间延迟或顺序事件。
-
持续集成和回归测试:在开发过程中定期运行单元测试,以确保新的代码更改没有破坏现有功能。
-
记录和审查测试结果:记录测试执行的结果,并在测试失败时进行审查,以便快速识别并解决问题。
-
安全和合规性:特别注意测试中的安全和符合行业标准的要求,因为PLC通常用于关键的工业应用中。
例如,如果你正在测试一个简单的PLC程序,该程序根据温度传感器的读数来控制一个加热器的开关,你的测试用例可能需要检查以下几点:
- 当传感器读数低于设定阈值时,加热器是否开启。
- 当传感器读数高于设定阈值时,加热器是否关闭。
- 在传感器故障(如读数异常)时,系统是否采取了预期的安全措施。
编写PLC的单元测试需要综合考虑软件逻辑和硬件交互,这通常意味着需要更多的计划和准备工作,以及与真实世界交互的考虑。
上位机软件单元测试怎么写
编写上位机软件的单元测试遵循软件开发中的一般原则,但也需要特别考虑与硬件、PLC或其他系统的交互。上位机软件通常负责监控和控制下位机(如PLC)和其他工业设备,处理数据、用户交互和网络通信等。以下是针对上位机软件单元测试的一些关键步骤和建议:
-
理解软件架构:深入了解上位机软件的架构,包括它如何与下位机、数据库、用户界面和其他系统组件交互。
-
选择测试框架:根据所用的编程语言和平台,选择适当的单元测试框架,如JUnit(Java)、NUnit(.NET)、PyTest(Python)等。
-
隔离测试单元:单元测试应集中在独立的函数或模块上。使用模拟(Mock)和存根(Stub)来隔离测试单元,确保不依赖于外部系统或复杂的交互。
-
模拟硬件和PLC交互:如果上位机软件需要与硬件或PLC通信,使用模拟对象来代替实际的硬件或PLC。这样可以在不依赖真实设备的情况下测试软件的逻辑。
-
编写测试用例:为每个功能或方法编写测试用例,确保涵盖正常操作、边界条件和异常情况。
-
测试数据处理和逻辑:验证软件正确处理来自下位机的数据,以及逻辑决策是否按预期工作。
-
用户界面(UI)逻辑测试:对于涉及UI交互的功能,确保逻辑正确处理用户输入和输出。
-
网络和通信测试:如果软件涉及网络通信,测试相关功能以确保正确处理消息、错误和网络延迟。
-
持续集成:将单元测试集成到持续集成(CI)流程中,确保代码更改不会破坏现有功能。
-
维护和更新测试:随着软件的发展,持续更新和维护测试用例,确保它们与软件的当前状态保持一致。
举个例子,如果你正在测试一个上位机软件中的功能,该功能负责从PLC读取温度数据并根据某些规则调整设备设置,你的测试可能会涉及:
- 模拟PLC提供的数据,并验证软件是否正确读取和解析这些数据。
- 测试软件是否根据接收到的数据正确计算出设备设置。
- 检查在接收到异常数据或在通信故障时软件的行为。
上位机软件的单元测试需要考虑到软件与系统其他部分的交互,同时也要保证测试的独立性和准确性。通过综合这些方法,可以有效地提高上位机软件的质量和可靠性。
编写测试用例:为每个功能或方法编写测试用例,确保涵盖正常操作、边界条件和异常情况。 这个能给我详细展开吗?最好有详细的例子
当然,让我们更详细地探讨如何为软件功能或方法编写测试用例,并通过一个具体的例子来说明。测试用例的编写通常涉及以下几个方面:
1. 确定测试目标
- 确定要测试的特定功能或方法。
- 理解该功能的预期行为,包括输入、处理和输出。
2. 考虑测试场景
- 正常操作:测试功能在正常使用条件下的行为。
- 边界条件:测试功能在极限或边缘情况下的行为。
- 异常情况:测试功能在出现错误或异常输入时的行为。
3. 编写测试用例
- 对于每个场景,编写一个或多个测试用例。
- 每个测试用例应包括:
- 测试用例名称:描述性名称,表明测试用例的目的。
- 前提条件:执行测试之前必须满足的条件。
- 测试步骤:执行的具体步骤。
- 预期结果:期望的测试结果。
- 实际结果:实际运行测试后的结果。
- 通过/失败:根据预期结果和实际结果判断测试是否通过。
4. 验证和迭代
- 执行测试用例。
- 根据测试结果调整代码或测试用例。
- 重复测试直到测试通过。
示例:测试一个简单的登录功能
假设我们有一个简单的登录功能,用户输入用户名和密码,系统验证并返回结果。
测试用例 1:正常操作
- 名称:测试有效的用户名和密码
- 前提条件:用户已注册
- 测试步骤:
- 输入有效的用户名
- 输入对应的密码
- 点击登录按钮
- 预期结果:用户成功登录,显示欢迎信息
- 实际结果:待填写
- 通过/失败:待评估
测试用例 2:边界条件
名称:测试密码长度边界
前提条件:用户已注册
测试步骤:
输入有效的用户名
输入密码长度恰好为最小有效长度
点击登录按钮
预期结果:用户成功登录
实际结果:待填写
通过/失败:待评估
测试用例 3:异常情况
名称:测试无效密码
前提条件:用户已注册
测试步骤:
输入有效的用户名
输入错误的密码
点击登录按钮
预期结果:显示错误消息,不允许登录
实际结果:待填写
通过/失败:待评估
通过这种方式,你可以为不同的功能和场景编写测试用例,确保软件在各种条件下都能按预期工作。记住,良好的测试用例应清晰、具体,且易于理解和执行。
PLC上位机的单元测试用例例子有吗?
当然,让我们通过一个上位机软件的例子来说明如何编写单元测试用例。上位机软件通常负责与PLC或其他下位机设备进行通信,处理数据,以及用户界面(UI)交互。假设我们有一个上位机软件,其功能是读取PLC的温度数据并根据这些数据来更新UI显示。
功能描述
功能:从PLC读取温度数据并更新UI
输入:来自PLC的温度数据(整数,单位:摄氏度)
输出:UI上的温度显示
逻辑:软件定期从PLC读取温度数据,并更新UI上的显示。
测试用例编写
测试用例 1:正常数据读取
名称:测试正常读取PLC温度数据
前提条件:软件已连接到PLC
测试步骤:
模拟PLC发送正常温度数据(比如22摄氏度)。
验证软件是否正确读取并显示数据。
预期结果:UI上显示温度为22摄氏度。
实际结果:待填写
通过/失败:待评估
测试用例 2:数据更新
名称:测试PLC数据更新后UI的响应
前提条件:软件已连接到PLC且已显示初始温度
测试步骤:
模拟PLC发送更新的温度数据(比如25摄氏度)。
验证UI是否更新显示新的温度数据。
预期结果:UI上显示温度更新为25摄氏度。
实际结果:待填写
通过/失败:待评估
测试用例 3:异常数据处理
名称:测试接收到异常数据时的处理
前提条件:软件已连接到PLC
测试步骤:
模拟PLC发送异常温度数据(如非法值或无数据)。
验证软件如何响应这种异常情况。
预期结果:UI显示错误信息或保持上次有效数据显示。
实际结果:待填写
通过/失败:待评估
测试用例 4:断开连接处理
名称:测试与PLC断开连接时的软件响应
前提条件:软件已连接到PLC
测试步骤:
模拟与PLC的连接中断。
验证软件如何响应连接中断。
预期结果:UI显示连接中断的警告或信息。
实际结果:待填写
通过/失败:待评估
在编写上位机软件的单元测试用例时,重点是验证软件能够正确处理来自下位机(如PLC)的数据,并确保UI正确反映这些数据。此外,还要确保软件能够妥善处理异常情况和连接问题。这些测试用例有助于确保上位机软件的稳定性和可靠性。
单元测试是对软件中最小可测试部分(通常是函数、方法或类)的测试。 这个有单元测试例子吗?
当然,让我们通过一个具体的编程例子来展示单元测试的实现。假设我们有一个简单的计算器类,它包含几个基本的数学运算方法。我们将使用Python语言和其标准单元测试库unittest来编写测试用例。
计算器类定义
假设我们的计算器类定义如下:
class Calculator:def add(self, a, b):return a + bdef subtract(self, a, b):return a - bdef multiply(self, a, b):return a * bdef divide(self, a, b):if b == 0:raise ValueError("Cannot divide by zero.")return a / b
这个类包含四个方法:加法、减法、乘法和除法。
编写单元测试
接下来,我们为这个类的每个方法编写单元测试用例:
import unittest
from calculator import Calculatorclass TestCalculator(unittest.TestCase):def setUp(self):self.calc = Calculator()def test_add(self):self.assertEqual(self.calc.add(1, 2), 3)self.assertEqual(self.calc.add(-1, -1), -2)self.assertEqual(self.calc.add(-1, 1), 0)def test_subtract(self):self.assertEqual(self.calc.subtract(10, 5), 5)self.assertEqual(self.calc.subtract(-1, -1), 0)self.assertEqual(self.calc.subtract(-1, 1), -2)def test_multiply(self):self.assertEqual(self.calc.multiply(3, 7), 21)self.assertEqual(self.calc.multiply(-1, -1), 1)self.assertEqual(self.calc.multiply(-1, 1), -1)def test_divide(self):self.assertEqual(self.calc.divide(8, 4), 2)self.assertEqual(self.calc.divide(9, -3), -3)with self.assertRaises(ValueError):self.calc.divide(1, 0)if __name__ == '__main__':unittest.main()
在这个测试类中,我们定义了四个测试方法,分别对应计算器类的四个操作。每个方法中包含几个测试断言:
test_add 测试加法功能。
test_subtract 测试减法功能。
test_multiply 测试乘法功能。
test_divide 测试除法功能,并确保除以零时抛出ValueError异常。
通过运行这些测试,我们可以验证计算器类的每个方法是否按预期工作。这就是典型的单元测试案例,它帮助开发者确保代码单元的正确性,从而提高整体软件质量。
上位机有单元测试最小可测试部分(通常是函数、方法或类)的测试用例吗?
编写上位机软件的单元测试用例同样遵循对软件中最小可测试部分(如函数、方法或类)的测试原则。让我们通过一个具体的例子来说明,假设上位机软件有一个功能是从PLC读取数据并处理这些数据。这个功能可以被封装在一个类或方法中。
示例:数据处理方法的单元测试
假设我们有一个类DataProcessor,它有一个方法process_data用来处理从PLC接收到的数据。
class DataProcessor:def process_data(self, data):# 处理逻辑,例如:转换数据格式,计算,过滤等processed_data = ... # 数据处理逻辑return processed_data
这个方法的目的是接收原始数据(例如从PLC读取的温度和压力值),并进行某些处理(比如转换、计算或过滤),然后返回处理后的数据。
编写单元测试
我们将使用Python的unittest框架来编写针对process_data方法的单元测试。
import unittest
from data_processor import DataProcessorclass TestDataProcessor(unittest.TestCase):def setUp(self):self.processor = DataProcessor()def test_process_data(self):# 假设数据处理是将输入数据乘以2raw_data = 10expected_result = 20self.assertEqual(self.processor.process_data(raw_data), expected_result)def test_process_data_with_invalid_input(self):# 测试无效输入的情况raw_data = None # 无效数据with self.assertRaises(TypeError):self.processor.process_data(raw_data)# 其他可能的测试...if __name__ == '__main__':unittest.main()
在这个测试类中,我们定义了几个测试方法来验证process_data的不同方面:
- test_process_data 测试了方法对有效数据的处理。
- test_process_data_with_invalid_input 测试了方法对无效输入的处理情况。
这样的单元测试用例有助于确保上位机软件的数据处理逻辑按预期工作,同时还能处理异常情况。这是提高软件质量和稳定性的重要步骤。
上位机的ui有单元测试例子吗?
上位机软件中的用户界面(UI)单元测试可以是挑战性的,因为它通常涉及到与图形界面的交互。不过,通过使用特定的工具和框架,我们可以对UI组件进行单元测试。这通常涉及模拟用户交互,如点击按钮、输入文本和验证UI上显示的内容。
示例:测试一个简单的登录界面
假设我们有一个上位机软件的登录界面,包含用户名和密码输入框以及一个登录按钮。我们想测试当用户点击登录按钮时,软件是否正确地处理输入的用户名和密码。
对于这个示例,我们可以使用像Selenium或PyQt的Qt Test(如果是基于Qt的界面)这样的工具来编写单元测试。
用PyQt5和Qt Test编写UI测试(假设是基于Qt的界面)
首先,假设我们的登录界面是用PyQt5实现的:
python
Copy code
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QVBoxLayout
class LoginWindow(QWidget):
def init(self):
super().init()
self.username = QLineEdit(self)
self.password = QLineEdit(self)
self.loginButton = QPushButton(‘Login’, self)
self.initUI()
def initUI(self):layout = QVBoxLayout()layout.addWidget(self.username)layout.addWidget(self.password)layout.addWidget(self.loginButton)self.setLayout(layout)def get_credentials(self):return self.username.text(), self.password.text()
… 其他登录逻辑
接下来,使用Qt Test框架编写单元测试:
python
Copy code
import sys
import unittest
from PyQt5.QtWidgets import QApplication
from PyQt5.QtTest import QTest
from PyQt5.QtCore import Qt
from login_window import LoginWindow
class TestLoginWindow(unittest.TestCase):
def setUp(self):
self.app = QApplication(sys.argv)
self.form = LoginWindow()
def test_default_credentials(self):self.assertEqual(self.form.get_credentials(), ('', ''))def test_input_credentials(self):QTest.keyClicks(self.form.username, 'user')QTest.keyClicks(self.form.password, 'password')QTest.mouseClick(self.form.loginButton, Qt.LeftButton)self.assertEqual(self.form.get_credentials(), ('user', 'password'))def tearDown(self):self.app.quit()
if name == “main”:
unittest.main()
在这个测试中,我们使用QTest模块来模拟键盘输入和鼠标点击。这个例子主要测试了用户界面元素是否能正确接收用户的输入。
注意,这种类型的测试通常比纯逻辑或后端的单元测试更复杂和耗时,因为它们涉及到图形界面的操作。在实际的项目中,UI测试往往与其他类型的测试(如集成测试和系统测试)结合使用,以确保软件的整体质量和用户体验。
winform的ui单元测试用例有吗?
对于基于Windows Forms(WinForms)的应用程序,编写UI单元测试通常涉及到使用专门的工具和框架来模拟用户与UI的交互。然而,WinForms并没有内置的用于单元测试UI的工具。因此,进行UI测试通常需要依赖于第三方库,如 NUnit + TestStack.White 或 Microsoft’s Coded UI Test(如果你使用的是Visual Studio Enterprise版)。
示例:使用 NUnit 和 TestStack.White 进行WinForms UI测试
假设我们有一个WinForms应用程序,其中包含一个带有两个文本框(用于用户名和密码)和一个登录按钮的登录窗体。
步骤 1:设置WinForms应用程序
这是一个简单的WinForms应用程序的例子:
csharp
Copy code
// Login form with two text boxes and a button
public class LoginForm : Form
{
public TextBox UsernameTextBox { get; private set; }
public TextBox PasswordTextBox { get; private set; }
public Button LoginButton { get; private set; }
public LoginForm()
{UsernameTextBox = new TextBox();PasswordTextBox = new TextBox();LoginButton = new Button{Text = "Login"};// Layout code here...LoginButton.Click += LoginButton_Click;
}private void LoginButton_Click(object sender, EventArgs e)
{// Login logic here...
}// Main entry point of the application
[STAThread]
static void Main()
{Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new LoginForm());
}
}
步骤 2:使用 NUnit 和 TestStack.White 编写测试
安装NUnit和TestStack.White库后,可以编写类似以下的测试代码:
csharp
Copy code
using NUnit.Framework;
using TestStack.White;
using TestStack.White.UIItems;
using TestStack.White.UIItems.WindowItems;
using TestStack.White.Factory;
using System;
[TestFixture]
public class LoginFormTests
{
private Application application;
private Window window;
[SetUp]
public void SetUp()
{application = Application.Launch("path/to/your/winforms/application.exe");window = application.GetWindow("LoginForm", InitializeOption.NoCache);
}[Test]
public void TestLoginButtonClick()
{var usernameTextBox = window.Get<TextBox>("UsernameTextBox");var passwordTextBox = window.Get<TextBox>("PasswordTextBox");var loginButton = window.Get<Button>("LoginButton");usernameTextBox.Text = "testuser";passwordTextBox.Text = "testpassword";loginButton.Click();// Assert statements to verify the expected outcome// For example, checking if a new window is opened, a message is displayed, etc.
}[TearDown]
public void TearDown()
{application.Close();
}
}
在这个测试中,我们使用TestStack.White来启动应用程序,找到窗口和UI元素,然后模拟用户的输入和点击操作。你可以根据你的具体需求来编写断言,以验证登录逻辑是否按预期工作。
注意事项
UI测试通常比非UI的单元测试更复杂,它们可能需要额外的配置和较长的执行时间。
对于复杂的UI逻辑,考虑将逻辑从UI分离出来,使之能够独立于UI进行测试。
考虑使用集成测试或端到端测试来补充UI测试,确保应用程序的整体质量和可用性。
相关文章:
什么是单元测试?
什么是单元测试 单元测试是软件开发中的一种测试方法,旨在验证各个软件组件或模块的功能正确性。在敏捷开发环境中,单元测试尤为重要,因为它有助于确保代码的质量和稳定性。下面是一些关于单元测试的关键点: 定义:单元…...
PTA-6-51(处理数组、字符串) 人口统计
题目: 本题运行时要求键盘输入10个人员的信息(每一个人信息包括:姓名,性别,年龄,民族),要求同学实现一个函数,统计民族是“汉族”的人数。 函数接口定义: pu…...
php中使用cdn
在 PHP 中使用 CDN 的一般流程如下: 1. 选择合适的 CDN 服务提供商:根据需求和预算选择合适的 CDN 服务提供商,例如阿里云CDN、腾讯云 CDN、Cloudflare 等。 2. 注册并配置 CDN 服务:在 CDN 服务提供商的网站上注册账号…...
docker部署MySQL5.7设置密码和远程访问的方法
运行MySQL docker run -p 3306:3306 --name mysql57 -v /root/mysql/log:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORDD7txumqc2b! -d mysql:5.7 --character-set-serverutf8mb4 --collation-serverutf8…...
Vue组件基础
Vue组件基础是DOMDOMjs前端组成下的页面布局区域划分,每个组件展示时都要在页面上有一定的大小。每个设定好的页面区域都可以定义Vue的组件,组件中包含了HTML模板、样式、Vue组件对象的定义。Vue的组件是包含页面设计在内的,是一种为页面某个…...
Javascript每天一道算法题(十八)——矩阵置零-中等
文章目录 1、问题2、示例3、解决方法(1)方法1——标记数组 1、问题 给定一个 y x x 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 2、示例 示例 1: 输入:matrix [[…...
基于ROS开发的开源项目
基于ROS (Robot Operating System) 开发的开源项目很多,其中一些已经在机器人领域内非常知名。以下是一些比较著名的例子: Autoware: Autoware 是一个开源的自动驾驶车辆的软件栈,提供了从3D地图表示、环境感知(如障碍物、行人检测…...
kafka精准一次、事务、幂等性
Kafka事务 消息中间件的消息保障的3个级别 At most once 至多一次。数据丢失。At last once 至少一次。数据冗余Exactly one 精准一次。好!!! 如何区分只要盯准提交位移、消费消息这两个动作的时机就可以了。 当:先消费消息、…...
centos 7.9 下利用miniconda里的pyinstaller打包python程序为二进制文件操作方法
centos 7.9 下利用miniconda里的pyinstaller打包python程序为二进制文件操作方法 一.centos 7.9 操作系统安装 参考:https://blog.csdn.net/qq_46015509/article/details/134572030?utm_sourceminiapp_weixin 安装完成后用后台连接工具连上虚拟机 二.安装python3 …...
Motion Plan之基于采样的路径规划算法笔记
Motion Plan之搜索算法笔记 背景: 基于采样算法是一种在路径规划中广泛应用的有效方法。它通过在图中随机选择点来生成一个简化的搜索图,从而加速搜索过程。这种方法的主要优点包括减少内存使用,避免计算错误,具有动态障碍物对抗…...
idea里面常用插件
这里列出了一系列常用的 IntelliJ IDEA 插件,它们可以提高开发效率、简化操作,以及帮助进行代码分析和优化。以下是每个插件的简要介绍: GenerateAllSetter:生成对象的所有 set 方法和 get 方法,方便对象之间的转换。该…...
回归算法优化过程推导
假设存在一个数据集,包含工资、年龄及贷款额度三个维度的数据。我们需要根据这个数据集进行建模,从而在给定工资和年龄的情况下,实现对贷款额度的预测。其中,工资和年龄是模型构建时的两个特征,额度是模型输出的目标值…...
某高品质房产企业:借助NineData平台,统一数据库访问权限,保障业务安全
该企业是中国领先的优质房产品开发及生活综合服务供应商。在 2022 年取得了亮眼的业绩表现,销售额市场占有率跻身全国前五。业务涵盖房产开发、房产代建、城市更新、科技装修等多个领域。 2023 年,该企业和玖章算术(浙江)科技有限…...
Arduio开发STM32所面临的风险
据说micro_ros用到了arduino,然后用arduino搞stm32需要用到这个Arduino STM32的东西,然后这里申明了:这些代码没有经过严格测试,如果是向心脏起搏器,自动驾驶这样要求严格的的情况下,这个东西不能保证100%不发生问题&a…...
精准人脉引流软件的开发流程与涉及到的技术
一、精准人脉引流软件的开发流程 1. 确定需求:首先,我们需要明确软件的需求,包括目标用户、功能需求、性能需求等。这些需求将直接影响到软件的开发方向和最终效果。 2. 系统设计:根据需求,进行系统设计,…...
Mysql数据库 20.DCL数据控制语言
因这类SQL语言开发人员操作较少,主要是数据库管理员(DBA)使用,所以前文没有提及,这篇文章进行补充说明 DCL数据控制语言 用来管理数据库用户,控制数据库的访问权限 1.管理用户 1.1 查询用户 select * f…...
使用CMake交叉编译Arm Linux程序
下载安装aarch64-linux-gnu-gcc arm交叉编译工具链 apt-get install aarch64-linux-gnu-gccapt-get install aarch64-linux-gnu-gcc创建编译目录构建makefle 注意,工具链文件的指定一定要紧跟cmake命令之后,不能放到 … 后面构建arm架构cmake mkdir arm…...
训练日志——logging
目录 基础使用日志的6个级别打印日志修改打印级别 高级应用logging的组成记录器Loggers处理器Handlers过滤器Filterformatter格式创建关联打印日志 配置文件参考 基础使用 日志的6个级别 打印日志 import logginglogging.debug(调试日志) logging.info(消息日志) logging.war…...
尺度为什么是sigma?
我们先看中值滤波和均值滤波。 以前,我认为是一样的,没有区分过。 他们说,均值滤波有使图像模糊的效果。 中值滤波有使图像去椒盐的效果。为什么不同呢?试了一下,果然不同,然后追踪了一下定义。 12345&…...
迭代器模式
自定义 Counter 结构体类型,并实现迭代器。其他语言的场景,读取数据库行数据时,使用的就是迭代器。我们使用for语言遍历数组,也是一种迭代。 结构体对象实现 Iterator trait,创建自定义的迭代器,只需要实现…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
