隨著年紀增長,記性越來越差柱宦,現(xiàn)在把之前寫的專利《一種測試覆蓋分析方法與系統(tǒng)》的實踐、思考和技術(shù)實現(xiàn)過程記錄下來播瞳,以便思考和學習掸刊,繼續(xù)深入。
PS:想法基于“沖天炮”赢乓,主要邏輯寫在Oracle Procedure存過忧侧,具有一定的獨特(約束)性,但是實現(xiàn)的想法涉及很多方面的工具和技術(shù)牌芋。)
想法來源于一些項目需要:
1. 由于需求變更蚓炬,需要表變更或者調(diào)整存過,需手工梳理存過和修改的配置文件躺屁;
2. 由于“沖天炮”技術(shù)升級肯夏,配合程序修改,需提供測試入口菜單犀暑;
3. 根據(jù)服務接口的登記情況驯击,通知上下游修改;
4. 自動化的測試腳本關(guān)聯(lián)程序耐亏。
“沖天炮”是一個非常棒(非前后端分離)的框架徊都,易學好使實用,愧于本人水平所限广辰,把基于“沖天炮”搭建的系統(tǒng)想象為這樣:
然后根據(jù)XML的信息碟贾、程序內(nèi)容嵌套的“調(diào)用”關(guān)鍵字(forward币喧、include、form等等)袱耽,生成菜單程序鏈路杀餐。
開始的實現(xiàn),通過啟發(fā)式的雙向?qū)挾葍?yōu)先搜索朱巨,發(fā)現(xiàn)程序鏈路圖的規(guī)模很大史翘,菜單-程序-程序之間——多對多的網(wǎng)絡(luò)關(guān)系,當時通過內(nèi)存和文件方式存儲冀续,一直無法滿足日常使用的需要琼讽。后來采用NoSQL的Neo4j存儲鏈路節(jié)點,去重寫鏈路生成和遍歷洪唐,效果滿足日常使用的需求钻蹬。
此時得到一份菜單為入口的菜單程序鏈路圖,生成了所有菜單經(jīng)過的程序凭需、存儲過程和涉及的表的關(guān)聯(lián)圖问欠。該方法有局限性,純文本分析和XML解析粒蜈,容易把多余的程序鏈路生成顺献,改進想法通過系統(tǒng)運行的日志,還原菜單運行過程中的程序鏈路枯怖。
為了實現(xiàn)測試覆蓋分析注整,想法是基于各種Guard系列(PageObject 模式)的自動化測試框架,自動生成自動化腳本(Velocity實現(xiàn))度硝,人工只需配置數(shù)據(jù)和斷言:
1)Oracle Procedure的存過單元測試肿轨;
2)底層是Java程序的系統(tǒng)內(nèi)部和外部調(diào)用接口;
3)菜單頁面的UI是基于Selenium和SikuliX的封fuzzer先建立測試案例蕊程,自動化測試腳本與程序鏈路的關(guān)系(手動)萝招,然后
捕捉到代碼變化(Java git tool)或者表結(jié)構(gòu)變化,便可完成通過菜單鏈路調(diào)用自動化測試存捺,同時測試覆蓋的統(tǒng)計依賴沖天炮自帶,jacoco曙蒸,還有利器antrl捌治。
實踐中,自動化測試的能力得到擴展:ui幫助實現(xiàn)ie兼容性測試纽窟;基于owasp的 top10 payloads實現(xiàn)接口測試和存過單元測試的安全能力肖油;基于覆蓋率反饋和魯棒性的思考,引入了fuzzer data generator,提升測試覆蓋率臂港,fuzzer的斷言非常不易森枪,做過基于機器學習做數(shù)據(jù)分類和結(jié)果聚類视搏,在小的接口測試結(jié)果樣本沒有較好的準確率, 大神指導過有深度學習的方法還沒嘗試;一直沒有了解基于AFL的測試覆蓋反饋做fuzz 也沒完整用oss-fuzz做0day县袱。
過程中浑娜,觀察到測試問題反饋,需求描述式散,開發(fā)進度筋遭,項目質(zhì)量,測試覆蓋的關(guān)系暴拄,用jieba做了這些內(nèi)容的NLP漓滔,然后暴力knn,發(fā)現(xiàn)一些有趣的東西乖篷,但是模型是有問題的响驴,跟項目其他特征如工作量,人數(shù)撕蔼,關(guān)聯(lián)系統(tǒng)等特征來重建模型豁鲤。
既然需要更多資源和語聊,特意用scrapy寫了spider罕邀,基于itchat搭了一個基于規(guī)則的應答機器人畅形,本意是作為入口查看爬蟲數(shù)據(jù),結(jié)果發(fā)現(xiàn)如果基于常見開發(fā)測試運維問題做智能應答诉探,豈不美事日熬,規(guī)則易建,智能難做肾胯。
待續(xù)…