隨著年紀(jì)增長(zhǎng),記性越來(lái)越差,現(xiàn)在把之前寫(xiě)的專(zhuān)利《一種測(cè)試覆蓋分析方法與系統(tǒng)》的實(shí)踐、思考和技術(shù)實(shí)現(xiàn)過(guò)程記錄下來(lái),以便思考和學(xué)習(xí),繼續(xù)深入。
PS:想法基于“沖天炮”,主要邏輯寫(xiě)在Oracle Procedure存過(guò),具有一定的獨(dú)特(約束)性,但是實(shí)現(xiàn)的想法涉及很多方面的工具和技術(shù)。)
想法來(lái)源于一些項(xiàng)目需要:
1. 由于需求變更,需要表變更或者調(diào)整存過(guò),需手工梳理存過(guò)和修改的配置文件;
2. 由于“沖天炮”技術(shù)升級(jí),配合程序修改,需提供測(cè)試入口菜單;
3. 根據(jù)服務(wù)接口的登記情況,通知上下游修改;
4. 自動(dòng)化的測(cè)試腳本關(guān)聯(lián)程序。
“沖天炮”是一個(gè)非常棒(非前后端分離)的框架,易學(xué)好使實(shí)用,愧于本人水平所限,把基于“沖天炮”搭建的系統(tǒng)想象為這樣:

然后根據(jù)XML的信息、程序內(nèi)容嵌套的“調(diào)用”關(guān)鍵字(forward、include、form等等),生成菜單程序鏈路。
開(kāi)始的實(shí)現(xiàn),通過(guò)啟發(fā)式的雙向?qū)挾葍?yōu)先搜索,發(fā)現(xiàn)程序鏈路圖的規(guī)模很大,菜單-程序-程序之間——多對(duì)多的網(wǎng)絡(luò)關(guān)系,當(dāng)時(shí)通過(guò)內(nèi)存和文件方式存儲(chǔ),一直無(wú)法滿(mǎn)足日常使用的需要。后來(lái)采用NoSQL的Neo4j存儲(chǔ)鏈路節(jié)點(diǎn),去重寫(xiě)鏈路生成和遍歷,效果滿(mǎn)足日常使用的需求。
此時(shí)得到一份菜單為入口的菜單程序鏈路圖,生成了所有菜單經(jīng)過(guò)的程序、存儲(chǔ)過(guò)程和涉及的表的關(guān)聯(lián)圖。該方法有局限性,純文本分析和XML解析,容易把多余的程序鏈路生成,改進(jìn)想法通過(guò)系統(tǒng)運(yùn)行的日志,還原菜單運(yùn)行過(guò)程中的程序鏈路。
為了實(shí)現(xiàn)測(cè)試覆蓋分析,想法是基于各種Guard系列(PageObject 模式)的自動(dòng)化測(cè)試框架,自動(dòng)生成自動(dòng)化腳本(Velocity實(shí)現(xiàn)),人工只需配置數(shù)據(jù)和斷言:
1)Oracle Procedure的存過(guò)單元測(cè)試;
2)底層是Java程序的系統(tǒng)內(nèi)部和外部調(diào)用接口;
3)菜單頁(yè)面的UI是基于Selenium和SikuliX的封fuzzer先建立測(cè)試案例,自動(dòng)化測(cè)試腳本與程序鏈路的關(guān)系(手動(dòng)),然后
捕捉到代碼變化(Java git tool)或者表結(jié)構(gòu)變化,便可完成通過(guò)菜單鏈路調(diào)用自動(dòng)化測(cè)試,同時(shí)測(cè)試覆蓋的統(tǒng)計(jì)依賴(lài)沖天炮自帶,jacoco,還有利器antrl。
實(shí)踐中,自動(dòng)化測(cè)試的能力得到擴(kuò)展:ui幫助實(shí)現(xiàn)ie兼容性測(cè)試;基于owasp的 top10 payloads實(shí)現(xiàn)接口測(cè)試和存過(guò)單元測(cè)試的安全能力;基于覆蓋率反饋和魯棒性的思考,引入了fuzzer data generator,提升測(cè)試覆蓋率,fuzzer的斷言非常不易,做過(guò)基于機(jī)器學(xué)習(xí)做數(shù)據(jù)分類(lèi)和結(jié)果聚類(lèi),在小的接口測(cè)試結(jié)果樣本沒(méi)有較好的準(zhǔn)確率, 大神指導(dǎo)過(guò)有深度學(xué)習(xí)的方法還沒(méi)嘗試;一直沒(méi)有了解基于AFL的測(cè)試覆蓋反饋?zhàn)鰂uzz 也沒(méi)完整用oss-fuzz做0day。
過(guò)程中,觀察到測(cè)試問(wèn)題反饋,需求描述,開(kāi)發(fā)進(jìn)度,項(xiàng)目質(zhì)量,測(cè)試覆蓋的關(guān)系,用jieba做了這些內(nèi)容的NLP,然后暴力knn,發(fā)現(xiàn)一些有趣的東西,但是模型是有問(wèn)題的,跟項(xiàng)目其他特征如工作量,人數(shù),關(guān)聯(lián)系統(tǒng)等特征來(lái)重建模型。
既然需要更多資源和語(yǔ)聊,特意用scrapy寫(xiě)了spider,基于itchat搭了一個(gè)基于規(guī)則的應(yīng)答機(jī)器人,本意是作為入口查看爬蟲(chóng)數(shù)據(jù),結(jié)果發(fā)現(xiàn)如果基于常見(jiàn)開(kāi)發(fā)測(cè)試運(yùn)維問(wèn)題做智能應(yīng)答,豈不美事,規(guī)則易建,智能難做。
待續(xù)…