《軟件測試與質量控制》實驗報告二 單元測試

目? 錄

一、實驗學時

二、實驗目的

三、實驗環境

(一)硬件環境:

(二)軟件環境:

四、實驗內容

1、實驗方案:

2、實驗步驟:

3、設計思路:

1、安裝JUnit和Eclemma

2、編寫函數

3、設計測試用例

4、編寫JUnit測試

5、運行測試并分析結果

6、使用Eclemma進行代碼覆蓋率分析

7、審查和修訂

五、實驗結果

1、安裝JUnit和Eclemma

(1)JUnit單元測試框架安裝

(2)Eclemma代碼覆蓋率工具安裝

2、利用Eclipse編寫函數

3、測試用例編寫

(1)正向測試用例

(2)反向測試用例

4、利用JUnit進行測試

5、利用Eclemma進行覆蓋率分析

六、實驗小結(包括問題和解決辦法、心得體會、意見與建議等)

1、實驗問題及解決方法:

2、實驗心得體會:

3、實驗意見與建議:


一、實驗學時

????????2學時

二、實驗目的

????????1.系統學習和理解單元測試的基本概念、原理。

????????2.掌握單元測試的基本技術和方法。

????????3.掌握在Eclipse里面進行JUnit單元測試的基本流程與使用方法。

????????4.掌握EclEmma代碼覆蓋測試工具的使用。

????????5.理解JUnit4中幾個注解:@Before、@After、@Test、@Ignore、@BeforeClass、@AfterClass的用法及執行次序。

三、實驗環境

(一)硬件環境:

????????1.筆記本電腦一臺

????????2.內存大小:64G

????????3.磁盤空間:1TB

(二)軟件環境:

????????1.操作系統:Windows(64位)11

????????2.文本撰寫:WPS

????????3.軟件工具:Eclipse、JUnit、Eclemma

、實驗內容

1、實驗方案:

????????在Eclipse中,安裝JUnit單元測試框架和Eclemma代碼覆蓋率工具,為代碼的全面測試和分析打下基礎。創建一個Java項目并編寫所需類,實現根據年份和月份返回對應天數的方法。運用黑盒測試和白盒測試的原理,設計全面的測試用例,確保所有可能的輸入情況都被覆蓋。利用JUnit編寫測試類,并使用注解和斷言方法進行測試,詳細記錄并分析測試結果。

????????完成測試后,借助Eclemma插件深入分析代碼覆蓋率,查看哪些代碼行被測試覆蓋,哪些未覆蓋,并根據分析結果調整測試用例或代碼,以進一步提高覆蓋率。通過以上步驟,我們將完成函數的編寫、測試及代碼覆蓋率分析,確保代碼的質量和穩定性得到充分的驗證。

2、實驗步驟:

????????(1)在Eclipse中安裝JUnit單元測試框架和Eclemma代碼覆蓋率工具。

????????(2)利用Eclipse編寫函數,根據提供的年份和月份,返回該月的天數。

????????(3)運用黑盒測試方法或白盒測試方法設計該函數的測試用例。

????????(4)利用JUnit完成整個函數的測試過程,并記錄并分析測試結果。

????????(5)使用Eclemma分析單元測試代碼的覆蓋率情況。

????????(6)完成實驗報告的書寫及提交工作。

3、設計思路:

1、安裝JUnit和Eclemma

????????將JUnit和Eclemma集成到Eclipse中,以便進行單元測試和代碼覆蓋率分析。

2、編寫函數

????????在Eclipse中創建一個新的Java項目,編寫一個方法,接收年份和月份作為參數,并返回對應月份的天數。

3、設計測試用例

????????采用黑盒測試或白盒測試中的等價類劃分、邊界值分析、錯誤推測等方法來設計測試用例。

  1. 通過等價類劃分將輸入字段劃分為有效和無效兩類,然后針對每類設計測試用例。
  2. 通過邊界值分析測試輸入字段的邊界值。
  3. 通過錯誤推測預測可能出現的錯誤情況并設計相應的測試用例。

4、編寫JUnit測試

????????在Eclipse中創建一個JUnit測試類,編寫測試方法,針對函數的各種情況編寫測試用例,并使用斷言來驗證函數的行為是否符合預期。

5、運行測試并分析結果

????????在Eclipse中運行JUnit測試,觀察測試結果,檢查測試是否通過,并記錄失敗的測試用例以進行調試和修復。

6、使用Eclemma進行代碼覆蓋率分析

????????使用Eclemma工具分析JUnit測試的代碼覆蓋率,查看代碼覆蓋率報告,確定哪些部分的代碼沒有被測試到,并根據需要更新測試用例以提高代碼覆蓋率。

7、審查和修訂

????????完成測試用例的編寫后,需要進行審查和修訂。包括檢查測試用例的完整性、準確性和可執行性,確保它們能夠全面覆蓋測試目標和范圍。同時,還需要根據實際需求和技術變化對測試用例進行更新和調整。

????????通過以上步驟,可以系統地設計針對所編寫函數的測試用例,以確保測試工作的有效性和高效性。

、實驗結果

1、安裝JUnit和Eclemma

(1)JUnit單元測試框架安裝

  • 打開Eclipse后點擊菜單欄中的File,在下拉菜單中選擇New并點擊,然后點擊出現的Java Project進行Java項目的創建,如圖1-1-1所示:

1-1-1?Java項目創建界面1

  • 輸入項目名稱為“YLW_JUnit”后點擊Next進入下一步后點擊Finish完成項目的創建,如圖1-1-2所示:

1-1-2?Java項目創建界面2

  • 使用鼠標右擊剛才創建的項目,然后點擊菜單最下方的“Properties”,如圖1-1-3所示:

1-1-3?JUnit單元測試框架安裝界面1

  • 在新的窗口中點擊“Java Build Path”后選擇“Libraries”中的“Modulepath”,再點擊“Add Library”進行JUnit單元測試框架的安裝,如圖1-1-4所示:

1-1-4?JUnit單元測試框架安裝界面2

  • 在“Add Library”窗口中選擇“JUnit”后點擊Next進入下一步后再點擊下拉菜單選擇“JUnit5”后點擊Finish完成JUnit5數據包的載入,如圖1-1-5所示:

1-1-5?JUnit單元測試框架添加界面1

  • JUnit數據包添加完畢后點擊界面右下角的“Apply”進行應用,或者直接點擊“Apply and Close”應用并關閉,如圖1-1-6所示:

1-1-6?JUnit單元測試框架添加界面2

  • 當JUnit單元測試框架安裝完畢后,會在對應的庫中存在相關的一系列JAR文件,如圖1-1-7所示:

1-1-7?JUnit單元測試框架添加成功界面

(2)Eclemma代碼覆蓋率工具安裝

  • 打開Eclipse后點擊菜單欄中的Help,在下拉菜單中點擊Eclipse Marketplace,如圖1-2-1所示:

1-2-1?Eclemma代碼覆蓋率工具安裝界面1

  • 在彈出的窗口搜索欄輸入“EclEmma”后點擊回車,如圖1-2-2所示:

1-2-2?Eclemma代碼覆蓋率工具安裝界面2

  • 滑動滾輪找到“EclEmma Java Code Coverage 3.1.8”點擊安裝即可,如圖1-2-3所示:

1-2-3?Eclemma代碼覆蓋率工具安裝界面3

2、利用Eclipse編寫函數

????????(1)右擊項目的“Src文件夾”后點擊“New”會出現子目錄,在子目錄中點擊“Class”創建“ReturnDay.java”Java類文件,如圖2-1所示:

2-1?Java類文件創建界面1

????????(2)在彈出的窗口中填寫對應的類名后點擊界面右下角的Finish按鈕即可完成對應Java類文件的創建,如圖2-2所示:

2-2?Java類文件創建界面2

????????(3)在“ReturnDay.java”類文件中編寫函數,使其可以根據所提供的年份和月份返回對應月份的天數,如圖2-3所示:

2-3?Java類文件執行結果界面

????????函數代碼:

import java.util.Scanner;// 返回當月天數的類
public class ReturnDay {// 返回當月天數的方法體(年份,月份)public static int getDaysInMonth(int year, int month) {if (year <= 0 || String.valueOf(year).contains("+")) {System.out.println("年份輸入錯誤,請輸入正確的年份(正整數)!");return 0;}if (month <= 1 || month >= 12) {System.out.println("月份輸入錯誤,請重新輸入正確的月份(1至12月)!");return 0;}// 初始化天數為0int days = 0;// 月份判斷switch (month) {// 1、3、5、7、8、10、12月份為每一年的大月,當月為31天case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;// 4、6、9、11月份為每一年的小月,當月為30天case 4:case 6:case 9:case 11:days = 30;break;// 2月閏年29天,平年是28天(4年一閏)case 2:if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {days = 29;} else {days = 28;}break;default:System.out.println("數據信息錯誤,無法返回對應天數!");}return days;}// 主函數public static void main(String[] args) {// 初始化輸入Scanner scanner = new Scanner(System.in);String StringInput = "Y";while (StringInput.equals("Y")) {System.out.print("請輸入所需年份:");while (!scanner.hasNextInt()) {System.out.println("年份輸入錯誤,請輸入正確的年份(非整數)!");scanner.next();}int year = scanner.nextInt();System.out.print("請輸入所需月份:");while (!scanner.hasNextInt()) {System.out.println("月份輸入錯誤,請輸入正確的月份(非整數)!");scanner.next();}int month = scanner.nextInt();if (month < 1 || month > 12) {System.out.println("月份輸入錯誤,請重新輸入正確的月份(1至12月)!");continue;}int days = getDaysInMonth(year, month);System.out.println(year+"年"+month+"月有:"+days+"天");System.out.println("");System.out.println("是否繼續進行輸入? (Y/N): ");StringInput = scanner.next();}scanner.close();}
}

3測試用例編寫

(1)正向測試用例

????????正向測試用例是用來驗證函數在給定有效輸入時是否產生預期的輸出,測試函數的各種預期用法,并確保函數對于標準輸入提供正確的響應。

表3-1正向測試用例

(2)反向測試用例

????????反向測試用例是用來驗證函數在給定無效輸入或異常情況下的行為是否正確,測試函數對于異常情況的處理方式,包括錯誤檢測和錯誤消息的生成。確保函數在面對非預期輸入時能夠適當地處理,而不會導致系統崩潰或不正確的行為。

表3-2反向測試用例

4利用JUnit進行測試

????????(1)右擊“ReturnDay.java”類文件后點擊“New”在子菜單中選擇“JUnit Test Case”進行測試用例的創建,如圖4-1所示:

4-1?測試用例類文件創建界面1

? ? ? ? (2)在“JUnit Test Case”界面輸入類文件的名稱為“ReturnDayTest”后勾選所需要創建的函數選項并點擊Next進入下一步,如圖4-2所示:

4-2?測試用例類文件創建界面2

????????(3)進入新界面后選擇需要進行測試的函數,勾選后點擊Finish按鈕即可完成對應測試類函數的創建工作,如圖4-3所示:

4-3?測試用例類文件創建界面3

????????(4)測試用例類文件創建完畢后在類中添加對應的測試用例方法進行函數的覆蓋化測試,如圖4-4所示:

4-4?測試用例類文件編寫界面

????????測試用例代碼:

import org.junit.Test;
import static org.junit.Assert.*;public class ReturnDayTest {@Testpublic void test_R1_T() {// 測試閏年的2月份天數int year = 2020;int month = 2;int expectedDays = 29;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_P1_T() {// 測試平年的2月份天數int year = 2021;int month = 2;int expectedDays = 28;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_R2_Min() {// 測試閏年小月的天數int year = 2020;int month = 4;int expectedDays = 30;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_P2_Min() {// 測試平年小月的天數int year = 2021;int month = 4;int expectedDays = 30;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_R3_Max() {// 測試閏年大月的天數int year = 2020;int month = 8;int expectedDays = 31;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_P3_Max() {// 測試平年大月的天數int year = 2021;int month = 8;int expectedDays = 31;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_4_FY() {// 測試非法年份(0)int year = -2021;int month = 4;int expectedDays = 0;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_4_FM() {// 測試非法月份(0)int year = 2020;int month = -4;int expectedDays = 0;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_5_FM() {// 測試非法月份(0)int year = 2021;int month = 0;int expectedDays = 0;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_6_FM() {// 測試非法月份(0)int year = 2020;int month = 13;int expectedDays = 0;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_7_FY() {// 測試非法年份(0)int year = +2021;int month = 4;int expectedDays = 0;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_8_TY() {// 測試特殊年份2月的天數(2000)int year = 2000;int month = 2;int expectedDays = 29;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}@Testpublic void test_9_TY() {// 測試特殊年份2月的天數int year = 1000;int month = 2;int expectedDays = 28;int actualDays = ReturnDay.getDaysInMonth(year, month);assertEquals(expectedDays, actualDays);}
}

? ? ? ? (5)測試用例方法全部添加完畢后可以進行測試用例的運行操作,右擊主界面后點擊“Run As”再選擇“JUnit Test”進行測試用例的運行,如圖4-5所示:

4-5?測試用例類文件運行界面

????????(6)測試用例運行完畢后即可查看對應的相關測試用例覆蓋率等數據信息,如圖4-6所示:

4-6?測試用例類文件運行結果界面

5利用Eclemma進行覆蓋率分析

????????(1)點擊界面左上角運行按鈕旁邊的覆蓋運行按鈕即可對覆蓋率進行對應的分析,如圖5-1所示:

5-1?測試用例類文件覆蓋率分析運行界面

????????(2)運行后點擊菜單欄中的“Windows”并選擇“Show View”后點擊“Other”進入到對應界面,如圖5-2所示:

5-2?測試用例類文件覆蓋率查看過程界面1

????????(3)在新界面的輸入框中輸入“coverage”后回車,選擇出現的“Coverage”文件并點擊窗口右下角的“Open”按鈕進行打開,如圖5-3所示:

5-3?測試用例類文件覆蓋率查看過程界面2

????????(4)打開后即可查看到相關的所有覆蓋率詳情信息,如圖5-4所示:

5-4?測試用例類文件覆蓋率查看界面

????????(5)覆蓋率分析查看完畢后進行相關的覆蓋率報告的導出工作,點擊菜單欄中的“File”后選擇“Export”進入到對應的界面,如圖5-5所示:

5-5?測試用例覆蓋率報告導出界面1

????????(6)進入新界面后點擊“Run/Debug”并選擇“Coverage Session”后點擊Next進入下一步,如圖5-6所示:

5-6?測試用例覆蓋率報告導出界面2

????????(7)在新界面中選擇導出方式為“HTML”和導出的位置,點擊Finish后即可完成對應覆蓋率報告的導出工作,如圖5-7所示:

5-7?測試用例覆蓋率報告導出界面3

????????(8)在指定的導出位置即可看見導出后的HTML文件,點擊對應的HTML文件就可以看到對應的所有覆蓋率數據信息,如圖5-8所示:

5-8-1?測試用例覆蓋率報告界面1

5-8-2?測試用例覆蓋率報告界面2

5-8-3?測試用例覆蓋率報告界面3

六、實驗小結(包括問題和解決辦法、心得體會、意見與建議等)

1、實驗問題及解決方法:

????????1)實驗問題:對返回當月天數函數的單元測試的需求理解不清楚。

解決方法:仔細分析函數,可以參考其他類似的實現方式,以幫助理解具體的細節。

????????2)實驗問題:單元測試用例書寫不熟練,導致用例撰寫效率低下。

解決方法:了解單元測試的基本步驟和示例,通過實際操作和練習,逐漸提高對單元測試用例撰寫的熟練度。

????????3)實驗問題:在設計單元測試用例時遇到了邊界條件的處理困難。

解決方法:采用邊界值分析和等價類劃分等測試方法,對系統的邊界條件進行明確化,即確定輸入、輸出和操作的邊界值。然后,根據這些邊界值設計相應的單元測試用例,覆蓋各種邊界情況。

????????4)實驗問題:單元測試用例設計過程中遇到了重復勞動和低效率的情況。

解決方法:嘗試利用單元測試用例模板,提前定義好單元測試用例的結構和格式。模板可以包括測試目標、測試步驟、輸入數據、預期結果等內容,以減少重復工作。可以將常見的測試場景和用例模板存儲在團隊的知識庫中,以便團隊成員共享和復用,提高設計效率。也可以嘗試自動化測試工具來輔助單元測試用例設計和生成,以進一步提高效率和準確性。通過團隊內部的交流和協作,可以共同發現和解決單元測試用例設計中的問題,不斷改進和優化測試流程,提高工作效率和質量。

????????5)實驗問題:單元測試用例過于冗長或復雜,不利于理解和執行。

解決方法:對于復雜的測試場景,可以將單元測試用例進行拆分,以簡化測試步驟和降低測試難度。同時,可以使用圖形化工具或流程圖來清晰地展示測試步驟和流程,提高單元測試用例的可讀性和可執行性。

????????6)實驗問題:在設計單元測試用例時遇到了測試數據的獲取困難,無法構造有效的測試場景。

解決方法:通過模擬或虛擬數據生成工具生成測試數據,以滿足單元測試用例的需求,確保測試數據的真實性和有效性。

????????7)實驗問題:在執行單元測試用例時遇到了性能穩定性問題,導致測試結果不準確或不穩定。

解決方法:通過性能測試工具對函數進行性能測試,發現函數的瓶頸和性能問題,并及時采取優化措施。可以對函數進行壓力測試和負載測試,以評估函數在高負載情況下的穩定性和可靠性。

????????8)實驗問題:單元測試用例設計過程中遇到了缺乏實際經驗或領域知識的挑戰,無法充分覆蓋所有可能的測試場景。

解決方法:通過學習和培訓提升自己的測試技能和領域知識,以更好地理解函數的功能和業務流程,并設計出更全面的單元測試用例。同時,可以與團隊成員進行知識共享和經驗交流,共同解決測試設計中的難題。

2、實驗心得體會:

????????(1)在實驗中,我深刻認識到對需求的準確理解是測試工作的基礎。在設計單元測試用例之前,必須對軟件函數的功能需求有清晰的認識,包括各個功能點的具體要求和期望的輸出。為了確保對需求的理解準確,我多次閱讀了需求文檔,并進行了討論和溝通,以澄清任何不清楚的地方。只有確保對需求的準確理解,才能夠設計出充分覆蓋各種情況的單元測試用例,從而提高測試的有效性和全面性。

????????(2)通過此次實驗我學會了不同的單元測試用例設計技巧,如等價類劃分、邊界值分析和錯誤推測等。這些技巧在設計單元測試用例時非常實用,可以幫助我發現潛在的軟件缺陷并提高測試的覆蓋率。例如,在設計邊界值單元測試用例時,我注意到了函數在邊界處的行為是否符合預期,并設計了相應的單元測試用例進行驗證。在設計等價類劃分單元測試用例時,我將輸入數據分成有效類和無效類,并針對每個類別設計了相應的單元測試用例。通過靈活運用不同的單元測試用例設計技巧,我能夠設計出更加全面和有效的單元測試用例,提高測試的質量和效率。

????????(3)實驗不僅是一個學習的過程,也是一個不斷改進的過程。在實驗中,我不僅學到了很多關于軟件測試和質量控制的知識和技能,還不斷地探索新的方法和技巧,以提高測試工作的效率和質量。例如,在設計單元測試用例時,我嘗試了不同的方法和技巧,并根據實際情況進行了調整和改進。通過持續學習和改進,我能夠不斷提高自己的測試技能和水平,不斷優化測試過程,以應對日益復雜的軟件函數和測試需求。

????????(4)在實驗結束后,我對整個實驗過程進行了反思和總結。我回顧了實驗中遇到的問題和解決方案,分析了實驗過程中的不足和改進空間,并提出了相應的改進建議。通過反思和總結,我深刻認識到了自己的不足之處,并下定決心在以后的學習和工作中不斷改進和提高自己。我將繼續保持對新知識和新技能的學習和探索,不斷完善自己的測試技能,為今后的學習和工作打下更加堅實的基礎。

3、實驗意見與建議:

????????(1)增加更多的實際案例和練習機會,可以幫助我們將理論知識與實際應用相結合。通過實際案例的分析和解決,可以加深我們對軟件測試和質量控制的理解,提高實踐能力。這些案例和練習可以包括真實的軟件函數或項目案例,讓我們在實踐中掌握測試方法和技巧,培養解決問題的能力。同時,可以提供實際項目中的測試場景和需求文檔,讓我們從實際項目中學習,提高實驗的實用性和應用性

????????(2)增加對測試工具的培訓和應用,可以幫助我們掌握常用測試工具的基本操作和功能,提高測試工作的效率和質量。同時,也可以增加對開源測試工具的介紹和應用,以提供更多選擇和學習機會。安排專門的課程或實驗環節,介紹常用的測試工具,如禪道、Selenium、JMeter等,并結合實際案例進行演示和操作。同時,可以鼓勵我們在實驗中使用測試工具進行測試任務的完成,提供實際操作的機會,加深對測試工具的理解和應用能力。

????????(3)提供個性化的指導和反饋,可以幫助我們更好地理解和掌握知識,解決遇到的問題。通過及時的指導和反饋,可以幫助我們更快地進步,提高實驗成績和學習效果。安排實驗指導老師或助教進行一對一或小組指導,解答學生的問題,提供學習建議和反饋意見。同時,可以組織學生進行實驗報告的互評和同行評議,促進學生之間的交流和學習,提高實驗報告的質量和水平。

????????(4)鼓勵我們獨立思考和創新實踐,可以激發我們的學習興趣和創造力,培養我們的問題解決能力和創新意識。設置開放性的實驗項目或任務,讓我們自由選擇研究方向和方法,進行探索和實踐。同時,可以提供創新性實驗項目或課程設計,鼓勵學生進行創新性的實驗和項目研究,培養學生的問題解決能力和創新意識。

????????(5)關注實驗設備和環境的改進,提供良好的實驗條件和環境,可以幫助我們更好地進行實驗和學習,提高實驗效果和體驗。通過更新實驗設備,配備最新的軟硬件設備和工具,提高實驗設備的性能和穩定性。同時,可以改善實驗環境,提供舒適的學習環境和便利的實驗條件,為我們的學習和實驗提供良好的支持和保障。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91767.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91767.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

k8s模式部署PolarDB-X

當前文檔適配PolarDB-X V2.4.0 版本 環境描述&#xff1a; 部署機&#xff08;ops&#xff09;1x2.2x.2x8.116&#xff0c;部署機需要可以訪問互聯網。使用ansible進行部署&#xff0c;自行安裝ansible。需要部署兩個k8s集群&#xff0c;分別在其上安裝一個polardb-x集群。 部…

Flask + YARA-Python*實現文件掃描功能

以下是一個 完整的 Web API 示例&#xff0c;使用 Flask YARA-Python 實現文件掃描功能&#xff0c;支持上傳文件并返回 YARA 規則匹配結果。 ? 功能說明 提供一個 /scan 接口&#xff0c;支持文件上傳使用預加載的 YARA 規則進行掃描返回 JSON 格式的匹配結果支持多規則、可…

WinForm之NumericUpDown控件

NumericUpDown&#xff08;數字上下控件&#xff09;是 WinForm 中專門用于輸入和調整數值的控件&#xff0c;它結合了文本框和上下按鈕&#xff0c;用戶可通過點擊按鈕或直接輸入來設置數值&#xff0c;且能嚴格限制數值范圍&#xff08;最小值、最大值&#xff09;和步長&…

一文讀懂K8S kubectl 命令,運維小白必看!

一、Kubectl 是什么? Kubectl 是 Kubernetes(簡稱 K8S)集群的命令行工具,它就像是一把萬能鑰匙,讓我們可以與 K8S 集群進行交互,輕松管理集群中的各種資源,像是 Pod、Service、Deployment 等等。通過向 K8S API 發送 REST 請求,kubectl 實現了對集群資源的增刪改查等操…

髖臼方向的定義與測量-I

近期看到關于髖臼方向不同應用場景下的不同定義&#xff0c;覺得特別有意思&#xff0c;但是&#xff0c;原文是影印本&#xff0c;不太方便實用屏幕取詞翻譯&#xff0c;且一些專業術語也不太好理解。 因此&#xff0c;我將原文和翻譯整理了一些&#xff0c;不對的地方&#x…

Python爬蟲實戰:研究mahotas庫,構建圖像獲取及處理系統

一、引言 (一)研究背景 在信息爆炸的時代,圖像作為一種直觀、豐富的信息載體,其數量在互聯網上呈現指數級增長。這些圖像數據涵蓋了自然景觀、動植物、工業產品等多個領域,為模式識別、機器學習等研究提供了寶貴的數據源。特別是在植物學研究領域,葉片圖像包含了豐富的…

【04】海康相機C#開發——VS 在編譯時,提示“Files的值“+亂碼情況解決辦法’ ,C#項目打開編譯時報錯:Files 的值“IGEF‘,

文章目錄C#項目打開&#xff0c;用VS 在編譯時編譯時報錯&#xff1a;Files 的值“亂碼&#xff1b; 有的編譯器會顯示&#xff1a;Files的值“IGEF 以上報錯都為同一種錯誤&#xff0c;.net中的配置文件亂碼導致的&#xff1a; 找到項目目錄下的“..\obj\Debug\”的文件夾中…

MySQL隱式轉換陷阱:從錯誤查詢案例解析索引失效與數據類型匹配

開始之前&#xff0c;先問個問題問題&#xff1a;mysql 數據類型是date &#xff0c;怎么寫查詢條件索引有效&#xff1f; ——下面帶著疑問看下去。 一、mysql-8.隱式轉換導致索引失效或查出不符合where條件結果 今天在執行一條sql語句時候&#xff0c;where條件寫錯了&#x…

【sklearn(01)】數據集加載、劃分,csv文件創建,特征工程,無量綱化

目錄sklearn數據集玩具數據集現實世界數據集加載玩具數據集獲取現實世界數據集本地csv數據創建csv文件pandas加載csv數據集劃分特征工程步驟特征工程APIDictVectorizer 字典列表特征提取APICountVectorizer 文本特征提取API英文文本提取中文文本提取TfidfVectorizer TF-IDF文本…

docker desktop入門(docker桌面版)(提示wsl版本太低解決辦法)

參考文章&#xff1a;Docker Desktop Engine Stopped原因分析&#xff08;docker桌面停止&#xff09;WSL沒裝或沒更新 文章目錄Docker Desktop入門指南1. Docker Desktop簡介2. 安裝Docker Desktop2.1 系統要求2.2 下載和安裝3. 配置Docker Desktop修改默認存儲路徑4. 運行你的…

《n8n基礎教學》第三節:模擬一個自動化場景

1、模擬場景Nathan &#x1f64b;是 ABCorp 的分析經理&#xff0c;他的工作是支持 ABCorp 團隊的報告和分析。作為一個真正的多面手&#xff0c;他還負責處理一些雜項任務。Nathan 做的一些事情是重復且枯燥的。他希望自動化其中一些任務&#xff0c;以避免精疲力竭。作為一名…

CodeRush AI 助手進駐 Visual Studio:AiGen/AiFind 亮相(三)

CodeRush 是專為 Visual Studio 打造的高效開發插件&#xff0c;通過集成 AI 驅動功能&#xff08;如自然語言生成代碼的 AiGen 和智能搜索邏輯的 AiFind&#xff09;、語音交互及深度重構工具&#xff0c;直接在 IDE 內無縫完成代碼生成、修改與導航&#xff0c;消除窗口切換與…

如何從頭開始搭建屬于自己的家用nas實現內網穿透訪問

最近我在家部署了群暉NAS923&#xff0c;從而實現內網穿透&#xff0c;下面寫一個新手向教程&#xff1a; 一、硬件安裝與初始化設置 1. 硬盤安裝&#xff08;已完成可跳過&#xff09; 群暉 923 支持 4 塊 3.5 英寸硬盤&#xff0c;開箱后取出硬盤架&#xff0c;將硬盤&am…

mysql 之多表

mysql之多表已知2張基本表&#xff1a;部門表&#xff1a;dept &#xff08;部門號&#xff0c;部門名稱&#xff09;;員工表 emp&#xff08;員工號&#xff0c;員工姓名&#xff0c;年齡&#xff0c;入職時間&#xff0c;收入&#xff0c;部門號&#xff09;CREATE table dep…

【Django】-6- 登錄用戶身份鑒權

一、&#x1f6e1;? Django 鑒權 & 登錄控制 Django 自帶的鑒權系統&#xff08;用戶身份管理小管家&#xff09;鑒權系統能干啥&#xff1f;Django 自帶的鑒權系統&#xff0c;就像一個 “用戶身份管家” &#xff0c;幫你管好這些事兒&#xff1a;功能類比加密存儲用戶密…

winscp 連openwrt 返回127錯誤碼

winscp 連openwrt 24.10返回127錯誤碼。找了許多原因也沒搞清為啥&#xff08;客戶端加密方式、winscp版本過低等都試過&#xff09;&#xff0c;用SecureFx試了一下&#xff0c;發現是openwrt 24.10固件沒有安裝Sftp服器&#xff0c;用下列命令安裝即可。opkg install openssh…

Python編程基礎與實踐:Python文件處理入門

Python文件處理實戰 學習目標 通過本課程的學習&#xff0c;學員將掌握如何在Python中打開、讀取、寫入和關閉文件&#xff0c;了解文本文件和二進制文件的區別&#xff0c;以及在文件處理中的一些最佳實踐。 相關知識點 Python文件處理 學習內容 1 Python文件處理 1.1 文件的基…

Corrosion2靶機

打開靶機信息收集&#xff1a;kali里使用arp-scan -l或者netdiscover發現主機使用nmap掃描端口nmap -sS -sV -T4 -n -p- 192.168.31.20開啟了22、80、8080端口 8080發現開啟了tomcat服務掃出了他的ip以及他開放的端口&#xff0c;我們接下來拿瀏覽器訪問一下兩個頁面都沒有什么…

編程與數學 03-002 計算機網絡 18_物聯網與網絡

編程與數學 03-002 計算機網絡 18_物聯網與網絡一、物聯網的基本概念&#xff08;一&#xff09;物聯網的架構與層次&#xff08;二&#xff09;物聯網的關鍵技術二、物聯網網絡的構建&#xff08;一&#xff09;物聯網網絡的通信協議&#xff08;二&#xff09;物聯網網絡的拓…

【Kubernetes】ConfigMap配置管理:存儲配置參數,創建到容器掛載

在Kubernetes中&#xff0c;配置管理是應用部署的重要環節。ConfigMap作為存儲非敏感配置數據的資源對象&#xff0c;能幫助我們實現"配置與代碼分離"&#xff0c;讓應用部署更靈活。一、什么是ConfigMap&#xff1f; ConfigMap是Kubernetes中用于存儲非加密配置數據…