系統架構設計師論文分享-論單元測試方法及其應用

我的軟考歷程

摘要

2023年2月,我所在的公司做了開發紗線MES系統的決定,該系統為國內紗線工廠提供SAAS服務,旨在提高紗線工廠的智能化和數字化水平。我在該項目中被任命為系統架構設計師,全面掌管該項目的架構設計工作。本文將結合我在該項目中的架構設計工作經驗,詳細介紹如何把單元測試方法應用在項目中。在該項目中,我們采用了多種單元測試方法,包括靜態測試和動態測試。靜態測試在不運行程序的情況下,通過代碼分析、人工走查等方式檢查問題和缺陷。動態測試在運行項目后,通過訪問項目去發現問題點。單元測試提高了項目的穩定性,最終在2023年10月,該系統正式上線并運行至今,系統運行穩定,表現優異,得到了客戶工廠和公司領導的一致贊揚。

項目背景

隨著我國從制造業大國升級為制造業強國以及工廠數字化和智能化的持續推進,我所在的某地某科技公司基于自研的物聯網平臺相繼開發了染整一體化和織布一體化等系統,這些系統上線后,得到了工廠的追捧,也為公司帶來了豐厚的經濟回報。基于此,我司于2023年2月開始研發紗線MES系統,該系統預算730萬,建設工期10個月,涵蓋紗線工廠從清花、梳棉、并條、精梳、粗紗、細紗到絡筒的全流程工序,將為紗線工廠提供全面的生產管理解決方案以及基于數據的智能決策分析能力。該項目為物聯網層次架構,整體分為感知層、網絡層和應用層。其中網絡層為公司已有的物聯網平臺,這次重點建設內容為感知層和應用層,感知層使用Golang語言開發,作為聯網網關部署在工廠側,負責工廠數據的采集和云端指令的下發。應用層為紗線MES系統主體,采用Java語言開發,使用Spring Cloud微服務架構,數據庫使用Mysql,緩存使用Redis,前端框架使用vue.js,日志、監控和鏈路追蹤采用skywalking、prometheus、grafana和ELK,最終通過devops的方式部署在kubernetes集群中。系統上線后,將提供以下:基礎管理、數據接入、工單排產、數字孿生、工資計算、智控中心和數據分析等等功能,通過以上功能,可以全面提升紗線工廠的數字化和智能化水平,使其運營水平和生產效率得到質的提升。

論述內容

由于該項目涉及流程多,處理過程復雜,同時項目參與者眾多,需求變動快。為了提升項目的穩定性,我們采用單元測試方法來保證項目的質量。單元測試分為靜態測試和動態測試,靜態測試是指在不運行程序的情況下,通過人工走查、代碼工具分析等方式去發現程序中的錯誤和問題,從而修正錯誤。動態測試是指在啟動系統的情況下,通過人工驗證功能或者別的驅動方式去讓系統運行起來,讓系統的業務運轉起來,從而發現系統運行中的錯誤和問題,動態測試通常會采用邊界值分析、等價類劃分、因果圖、決策樹、代碼覆蓋等方式實現,為了提高系統的穩定性,我們會對不同級別的功能采用不同的測試方式。除此之外,我們在每次迭代后,都會采用自動化測試的方式去進行回歸測試,通過回歸測試保證業務的連貫性。下面我會詳細論述各種測試方法在本項目中的應用。

一、靜態測試

靜態測試是保證代碼質量的一種重要方式,我們在項目中會采取兩種方式進行靜態測試:一、成員代碼互審會議;二、通過CICD中的自動化代碼分析工具以及Idea中的代碼審核插件。每次迭代中,當代碼要提交測試前,小組就會舉行代碼評審會議,把本次迭代修改的代碼邏輯給大家講述一遍,大家一起去發現代碼中的缺陷和問題,旨在提高代碼的質量和可修改性以及可擴展性。當代碼開發者修改之后,再次提交代碼時,需要經過其他開發者的審核,在這個過程中,審核者要嚴格審查代碼,否則具有同等的責任。除此之外,我們公司統一安裝了Idea中的代碼掃描工具,只要通過掃描才能進行代碼提交,否則該代碼會勒令修改,直到達到掃描標準。當代碼提交后,CICD會自動化再次掃描代碼,并生成報告,防止有問題的代碼進入后續流程。我們公司就是通過這種方式,顯著提高了代碼的質量,在系統運行前就對系統的質量進行了把關。

二、動態測試

動態測試是測試團隊的工作重心,動態測試的主要目標是提升系統的質量,發現系統存在的問題。所以,在項目的需求階段,測試團隊就要參與進來,識別測試需求,進行測試案例設計,經過測試評審之后,當完成系統開發之后,就可以進行動態測試。動態測試的種類很多如等價類劃分、邊界值分析、覆蓋測試、基于因果圖、基于決策樹、基于正交等等方式,我們在設計測試案例時,主要采用了邊界值分析和覆蓋測試,邊界值分析比較容易理解,比如我們在錄入工廠的工序時,1-10的范圍是合法的,測試人員在測試時就要測試邊界值如0、1、2、9、10、11等等,看系統是否正常運行并進行響應。我們在進行覆蓋測試時,首先要決定使用哪種級別的覆蓋級別,覆蓋測試分為:語句覆蓋、條件覆蓋、分支覆蓋、條件分支覆蓋、組合覆蓋、路徑覆蓋等等。其中語句覆蓋最弱,路徑覆蓋最強。我們在選擇覆蓋測試時首先要對系統模塊的重要性做一個分析,因為都選擇路徑覆蓋,成本太高,耗費時間太長,不具備可操作性。所以我們根據重要性的不同采用不同級別的覆蓋測試方式,比如,數據接入模塊是系統的核心,我們在進行動態測試時就要采用路徑覆蓋,確保流程沒有任何問題,避免造成嚴重的故障。又比如,消息通知模塊不在主流程中,它的執行過程對主流程影響不大,并且消息保存再數據庫中,也可以重新發送,所以在測試時就采用條件覆蓋,降低測試級別,保障測試進度。當動態測試進行完成后,測試人員需要生成測試報告,該報告詳細描述測試的全部信息,以便其他人員查看,通過發現的問題,要給對應的負責人提bug,讓其在規定時間內完成。

三、回歸測試

回歸測試是每次迭代的一種重點,當進行一個迭代時,測試人員首先要分析這次迭代對現在系統業務的影響,并把影響模塊和范圍標注出來,形成回歸測試范圍,然后根據回歸范圍進行回歸測試用例的挑選,形成回歸測試用例。當本次迭代完成后,測試人員通過自動化腳本的方式執行回歸測試用例,并生成回歸測試報告。通過回歸測試,可以保證現有改動不會影響老的業務,可以讓業務的持久性和穩定性得到保證。

總結

通過采用了多種單元測試方法,我們保證了系統的開發進度和質量。最終在2023年12月,該項目正式投產并對外提供服務,至今穩定運行,各項功能和性能指標均遠遠超過了客戶的預期,得到了客戶工廠和公司領導的一致贊揚。雖然項目取得了成功,但是也遇到過一些問題,在項目初期,由于產品經理對紗線業務的不熟悉,導致很多功能的調整和返工,這打擊了開發人員的士氣,基于此,我提出兩個解決方式:1、派產品進入工廠一線,與工人交流,熟悉操作流程,徹底摸清紗線業務,保證需求質量;2、開發人員也要學習紗線業務,遇到問題反饋給產品,同時在做設計時,采用靈活的設計模式,為需求的變動留下可操作的空間。我們通過這兩個方法解決了這個問題,保證了項目的進展。通過這次實踐,我不僅學習到了測試相關技術,也鍛煉了自己的架構和管理能力,我意識到只有不斷地學習和實踐才能讓知識融匯于自己的技術體系之中,才能在未來的工作中游刃有余、勇擔大任,為祖國的信息化建設貢獻自己的力量。

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

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

相關文章

RabbitMQ簡單消息監聽

如何監聽RabbitMQ隊列 簡單代碼實現RabbitMQ消息監聽 需要的依賴 <!--rabbitmq--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>x.x.x</version>&l…

自定義注解的使用

自定義注解 /*** 自定義注解*/ Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface FieldLabel {// 字段中文String label();// 字段順序int order() default 0;// 分組標識String group() default "default";}解析自定義注解&#xf…

Linux:network:socket 綁定到一個interface,如果刪除這個interface會怎么樣?

最近碰到一個問題,應用綁定到了一個GRE的interface,如下socket綁定到了bond10這個interface。 ss -anp | grep bond udp UNCONN 0 0 100.0.5.113%bond10:5061 0.0.0.0:* users

OpenGL 3D編程大師基礎之路:從幾何體到物理引擎

引言&#xff1a;開啟3D編程之旅 歡迎來到令人興奮的3D編程世界&#xff01;本教程將帶您從OpenGL基礎開始&#xff0c;逐步掌握3D渲染的核心技術&#xff0c;最終實現一個包含物理模擬的完整3D場景。我們將探索幾何體創建、光照系統、紋理映射、變換操作和碰撞檢測等關鍵主題…

解決往GitHub提交大文件報錯問題

前言 GitHub倉庫單個文件的推薦大小不能超過50MB&#xff08;僅限于警告&#xff09;&#xff0c;但絕對不能超過100MB&#xff08;拒絕提交&#xff09; 問題 人總有手賤的時候&#xff0c;一不小心往Git倉庫拷貝大文件并嘗試push到GitHub&#xff0c;發現報錯后才意識到問…

PostgreSQL基于歸檔日志的持續恢復測試

測試環境&#xff1a; os: linux PG: 17.4 src ip: 192.168.100.51 dst ip: 192.168.100.138 src: PGDATA/home/postgres174/pgdata dst: PGDATA/data/174/pgdata_standby 歸檔路徑&#xff1a; 192.168.100.138 /data/174/archivedir 測試流程&#xff1a; 1. 主庫(…

Linux——內核——網絡協議

Linux網絡協議棧是Linux內核中實現網絡通信的核心組件&#xff0c;其設計遵循分層架構&#xff0c;支持多種網絡協議和功能。以下從協議棧的分層結構、關鍵組件、工作流程、數據包處理機制、優化與調試等方面進行詳盡闡述&#xff1a; 一、協議棧的分層結構 Linux網絡協議棧基…

vue | 插件 | 移動文件的插件 —— move-file-cli 插件 的安裝與使用

問題&#xff1a;想將打包生成的 dist 文件下的樣式相關文件&#xff0c;進行移動。 解決&#xff1a;在 npm 上找寫好的兼容操作系統的包 move-file-cli 插件 &#xff0c;用于移動文件 move-file-cli 插件的安裝與使用 安裝&#xff1a;npm install move-file-cli --save-d…

多個單片機簡單通訊框架

文章目錄 一、場景描述二、框架搭建設計思路通信協議設計2號單片機通訊框架框架優化建議 三、2號單片機的通訊框架如何處理消息丟失和重傳&#xff1f;消息丟失與重傳機制設計改進的通信協議重傳機制實現關鍵機制說明優化建議 一、場景描述 有3個單片機進行通訊&#xff0c;分…

如何在服務區已有預裝鏡像的情況下管理自己的包

你的需求非常明確&#xff1a;希望利用 NGC 鏡像預裝的主環境包&#xff08;如 PyTorch、CUDA&#xff09;&#xff0c;同時能獨立管理自己額外安裝的包&#xff0c;避免直接污染主環境。以下是幾種解決方案&#xff0c;按推薦度排序&#xff1a; 方案 1&#xff1a;虛擬環境復…

JavaWeb之Servlet(2)RequestResponse..

文章目錄 1 Request和Response的概述2 Request對象2.1 Request繼承體系2.2 Request獲取請求數據2.2.1 獲取請求行數據2.2.2 獲取請求頭數據2.2.3 獲取請求體數據1-3小結2.2.4 獲取請求參數的通用方式請求參數和請求數據的區別問題案例分析問題解決 2.3 IDEA快速創建Servlet2.4 …

將 h264+g711a存為 mp4文件,記錄

將 h264g711a存為 mp4文件&#xff0c;記錄 &#x1f4cc; 關鍵問題&#xff1a;MP4 不原生支持 G.711A MP4 容器格式 不原生支持 G.711&#xff08;包括 A-law&#xff0c;也就是 G.711A&#xff09;音頻&#xff0c;所以不能直接將 G.711A 音頻封裝進 MP4 文件中。常見的做法…

【Elasticsearch】全文檢索 組合檢索

全文檢索 1.全文檢索1.1 準備測試數據1.2 案例分析1.2.1 match&#xff08;分詞檢索&#xff09;1.2.2 match_phrase&#xff08;短語檢索&#xff09;1.2.3 match_phrase_prefix&#xff08;短語前綴匹配&#xff09;1.2.4 multi_match&#xff08;多字段匹配&#xff09;1.2.…

信號處理學習——文獻精讀與code復現之TFN——嵌入時頻變換的可解釋神經網絡(上)

??????????????TFN: An interpretable neural network with time-frequency transform embedded for intelligent fault diagnosis - ScienceDirecthttps://www.sciencedirect.com/science/article/abs/pii/S0888327023008609?via%3Dihub &#xff08;看看玲娜貝…

Panda3D實戰:從入門到精通

Panda3D基礎實例 創建一個簡單的Panda3D場景,加載一個模型并顯示: from direct.showbase.ShowBase import ShowBaseclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.scene = self.loader.loadModel("models/environment")self.scene.repa…

Galera集群:高可用MySQL同步復制方案

目錄 Galera Cluster 概述 核心架構與組件 WSREP API Group Communication System (GCP) 同步復制機制 復制流程詳解 沖突檢測算法 關鍵特性 多主架構實現 強一致性保障 自動成員管理 性能優化策略 并行復制實現 流控機制詳解 批處理與壓縮 部署與監控 詳細配…

MybatisPlus-03.快速入門-常用注解

一.MP的原理 mp究竟是如何知道我們需要對哪個表進行操作&#xff0c;并且又是如何知道要操作哪些字段的呢&#xff1f;這是因為mp使用到了反射機制&#xff0c;我們在定義mapper接口時使其繼承了BaseMapper接口&#xff0c;并指定了BaseMapper接口泛型為User&#xff0c;因此m…

ABAP+記錄一個BDC的BUG修改過程

問題背景&#xff1a; 業務顧問反饋在使用BDC 進行MEQ1進行供應商配額時&#xff0c;由于以前錄屏時用例只有3行數據&#xff0c;導致現在有5行數據的時候&#xff0c;代碼仍然只獲取了3行數據進行錄入&#xff0c;現在需要更改代碼&#xff0c;使其按照實際情況自動調整行數。…

github上傳代碼步驟(http)

github上傳步驟&#xff08;http&#xff09; 之前github上傳不了代碼&#xff0c;總是報錯。后面發現自己用的ssh上傳需要秘鑰&#xff0c;現在我介紹一個最簡單的http上傳方法&#xff08;雖然沒有ssh安全。。。但簡單嘛~&#xff09;&#xff0c;現在我做個例子&#xff0c…

深入理解Nginx-以實際http通信例子改造帶ssl配Nginx的實戰-優雅草卓伊凡|麻子

深入理解Nginx-以實際http通信例子改造帶ssl配Nginx的實戰-優雅草卓伊凡|麻子 SSL/TLS在Nginx中的底層實現原理 Nginx的SSL模塊架構 Nginx通過ngx_http_ssl_module模塊實現SSL/TLS功能&#xff0c;該模塊基于OpenSSL庫構建。根據Nginx官方文檔&#xff0c;SSL模塊在Nginx架構…