• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于國(guó)產(chǎn)操作系統(tǒng)對(duì)開源軟件集成開發(fā)的研究與應(yīng)用

      2023-07-10 14:00:32陳吉寧黃季洋
      計(jì)算機(jī)應(yīng)用文摘 2023年11期

      陳吉寧 黃季洋

      關(guān)鍵詞:國(guó)產(chǎn)操作系統(tǒng);開源軟件;集成開發(fā);JMeter

      中圖法分類號(hào):TP316 文獻(xiàn)標(biāo)識(shí)碼:A

      近年來(lái),越來(lái)越多的單位開始進(jìn)行國(guó)產(chǎn)化替代,用戶開始從Windows操作系統(tǒng)轉(zhuǎn)向國(guó)產(chǎn)操作系統(tǒng)。但在用戶使用過(guò)程中,一系列問題也開始暴露出來(lái),如國(guó)產(chǎn)軟件生態(tài)的系統(tǒng)不完善、應(yīng)用程序不豐富、缺乏相應(yīng)的軟件體系和軟件工程方法等。開源軟件是一種版權(quán)持有人向公眾公開軟件源代碼,并允許公眾下載、編譯的軟件,在整個(gè)軟件行業(yè)中占有重要地位,其開發(fā)模式成為技術(shù)創(chuàng)新和推動(dòng)軟件產(chǎn)業(yè)發(fā)展的主要方式。引入開源軟件可以很好地增添當(dāng)下國(guó)產(chǎn)軟件生態(tài)的多樣性,豐富用戶的國(guó)產(chǎn)平臺(tái)使用體驗(yàn)。通過(guò)對(duì)開源軟件的二次開發(fā),能更好地實(shí)現(xiàn)本地化功能,更有利于貼合用戶使用場(chǎng)景,進(jìn)而滿足各種繁雜的工作需求。

      1開源軟件集成開發(fā)分析

      1.1國(guó)產(chǎn)操作系統(tǒng)上搭建開發(fā)環(huán)境

      經(jīng)過(guò)國(guó)產(chǎn)操作系統(tǒng)不斷的更新迭代,目前對(duì)開發(fā)環(huán)境的支持已經(jīng)足夠完善。即便是ARM架構(gòu)的國(guó)產(chǎn)處理器平臺(tái)也具備了和Windows平臺(tái)相近的開發(fā)體驗(yàn)。以目前主流的統(tǒng)信UOS和銀河麒麟Kylin為例,系統(tǒng)本身自帶JDK11和Python2,Python3,故搭建環(huán)境就只需要安裝集成開發(fā)環(huán)境(IDE)。截至目前,將統(tǒng)信UOS更新到最新版本1050,即可從應(yīng)用商店中安裝Java開發(fā)常用的Intellij idea的免費(fèi)社區(qū)版、Python開發(fā)常用的PyCharm等開發(fā)環(huán)境。其實(shí)際上的使用與Windows平臺(tái)并無(wú)太大區(qū)別,即可開始開發(fā)。

      1.2依賴的管理

      依賴(dependencies)是各種軟件開發(fā)項(xiàng)目中不可或缺的一部分,依賴可以理解為開發(fā)者要調(diào)用的附加代碼?,F(xiàn)在的開發(fā)離不開各式各樣的依賴支撐,我們對(duì)開源軟件進(jìn)行集成開發(fā)時(shí)碰到所需的依賴在項(xiàng)目中沒有提供,則需要引入外部依賴到項(xiàng)目中。以Java和Python為例,分析二者的依賴管理方式。

      (1) Java。

      早期Java項(xiàng)目的依賴管理全靠開發(fā)者自己搜羅相關(guān)的依賴Jar包,然后導(dǎo)人本地項(xiàng)目中,隨著Java開發(fā)的各種輔助插件工具的演變,現(xiàn)在的依賴管理工具已經(jīng)可以從遠(yuǎn)程倉(cāng)庫(kù)中下載和安裝對(duì)應(yīng)依賴包。在Java開發(fā)的依賴管理中,較為知名的有Maven和Gradle等。

      由Apache

      Maven進(jìn)行依賴管理的項(xiàng)目引入新依賴比較簡(jiǎn)單,前往mvnrepository.com或其他途徑查詢所需依賴的引入代碼,找到項(xiàng)目根目錄下的pom.xml文件,在的標(biāo)簽內(nèi)添加所需依賴的代碼,然后刷新項(xiàng)目即可自動(dòng)下載安裝。

      Gradle是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化構(gòu)建開源工具,與Maven類似,前往mvnrepository.com或其他途徑查詢到所需依賴的引入代碼,找到項(xiàng)目中的build. gradle文件或build.gradle.kts(Kotlin),粘貼到dependencies{}的花括號(hào)中,重新加載項(xiàng)目即可自動(dòng)下載安裝。

      (2) Python。

      pip(package installer for Python)是用于管理Python中包的默認(rèn)工具。通過(guò)命令行執(zhí)行pip install相關(guān)依賴來(lái)完成對(duì)依賴的引入。部分Python開源軟件會(huì)提供一個(gè)requirements. txt文檔來(lái)指導(dǎo)用戶安裝所需的依賴,使用pip install-r requirements.txt即可完成依賴的下載與安裝。

      Conda是一個(gè)通用的虛擬環(huán)境工具,在進(jìn)行多個(gè)Python開源軟件開發(fā)時(shí),可以使用Conda生成多個(gè)虛擬環(huán)境來(lái)安裝不同的依賴,以提高各個(gè)項(xiàng)目的獨(dú)立性。

      1.3代碼結(jié)構(gòu)的分析

      若要對(duì)一款開源軟件進(jìn)行二次開發(fā),則必須了解它的項(xiàng)目代碼結(jié)構(gòu),才能針對(duì)功能需求下手。以JMeter 5.5的源碼為例,src文件夾存放的是JMeter核心源代碼,其中又分為眾多的模塊,如bom,bshclient,config,core,functions等。如圖1所示,可以看到src下每個(gè)模塊展開后的結(jié)構(gòu)都是一個(gè)獨(dú)立的小項(xiàng)目,有自己的src文件夾存放源代碼,也有build文件夾存放編譯后的class文件。部分功能模塊有resouces文件夾存放資源文件,也有其單獨(dú)的build.gradle.kts依賴管理文件。

      JMeter對(duì)每個(gè)子模塊進(jìn)行單獨(dú)管理,實(shí)現(xiàn)其極高的開放性和可再開發(fā)性。并非所有開源軟件的代碼結(jié)構(gòu)都如JMeter復(fù)雜,小型的開源軟件項(xiàng)目結(jié)構(gòu)單一,代碼文件較少,也存在代碼復(fù)用性、可讀性差的開源軟件。

      2基于JMeter的二次開發(fā)實(shí)例

      本次JMeter二次開發(fā)實(shí)例采用的是JMeter5.5版本,涉及引入依賴、函數(shù)插件的開發(fā)、取樣器插件的開發(fā)3個(gè)環(huán)節(jié),均在國(guó)產(chǎn)桌面整機(jī)寶德PT620K上完成,該整機(jī)搭載了ARM架構(gòu)的國(guó)產(chǎn)處理器鯤鵬920,操作系統(tǒng)則為統(tǒng)信UOSV20(1050)。

      2.1引入所需外部依賴

      本文在開發(fā)functions功能模塊時(shí),發(fā)現(xiàn)JMeter自帶的Json相關(guān)依賴并不能滿足需求,需要引入外部依賴org.json,該依賴提供了眾多Json解析方法。第一步則是前往mvnrepository.com查詢需要的依賴,并復(fù)制該依賴的Gradle引入代碼,如implementation("org.json:json:20220924")。第二步是將復(fù)制的引入代碼粘貼到functions下的build.gradle.kts文件中,如圖2所示,然后重新加載Gradle項(xiàng)目即可自動(dòng)下載和安裝該依賴。

      2.2函數(shù)插件的設(shè)計(jì)與開發(fā)

      JMeter的函數(shù)插件是二次開發(fā)中廣泛使用的模塊,函數(shù)插件可以通過(guò)JMeter圖形化中的工具→函教助手對(duì)話框進(jìn)行調(diào)用,還可以嵌入性能測(cè)試腳本中進(jìn)行調(diào)用。函數(shù)插件模塊位于JMeter源碼src文件夾下的functions,JMeter原生的函數(shù)插件都繼承自AbstractFunction,這是JMeter提供的抽象類方法,其中規(guī)定了函數(shù)插件的4種重寫方法。

      鑒于目前Web應(yīng)用系統(tǒng)大多使用加密算法對(duì)用戶賬號(hào)密碼進(jìn)行加密,自然性能測(cè)試中也會(huì)涉及對(duì)賬號(hào)密碼加密的流程,JMeter原生插件中并沒有主流RSA算法的加解密插件,本文就對(duì)此進(jìn)行二次開發(fā)。于functions下的src/main/java/org. apache.jmeter.funcitons新建Java類,部分代碼如圖3所示,通過(guò)setParameters()規(guī)定了僅接受2個(gè)人參,分別是明文和公鑰,重寫getReferenceKey(),告訴JMeter此函數(shù)在框架中的應(yīng)用名稱,重寫getArgumentDesc()將人參名稱集合List返回給JMeter,通過(guò)execute()實(shí)現(xiàn)了RSA中使用公鑰對(duì)明文進(jìn)行加密并輸出密文的處理邏輯。

      2.3取樣器插件的設(shè)計(jì)與開發(fā)

      取樣器(Sampler)為JMeter性能測(cè)試中的一個(gè)重要組件,平時(shí)針對(duì)Web應(yīng)用系統(tǒng)的性能測(cè)試需要先創(chuàng)建取樣器中的HTTP請(qǐng)求。相較于函數(shù)插件,取樣器插件的二次開發(fā)賦予開發(fā)者的自由度更高,能實(shí)現(xiàn)的功能也更多,不受性能測(cè)試的限制。取樣器模塊位于JMeter源碼src文件夾下的protocol,protocol文件夾下還有許多以協(xié)議命名的子模塊。

      本文選取了java請(qǐng)求類型進(jìn)行二次開發(fā),設(shè)計(jì)了一個(gè)簡(jiǎn)單的驗(yàn)證輸入數(shù)字是否存在反數(shù)的功能,于protocol/java/src/main/java/org. apache. jmeter.protocol.java.test下新建Java類,同樣需要繼承自JMeter提供的AbstractjavaSamplerClient。實(shí)現(xiàn)方式仍是重寫父類中的實(shí)現(xiàn)方法來(lái)實(shí)現(xiàn)自己的邏輯。如圖4所示,重寫getDefaultParameters(),設(shè)置參數(shù)名為num,默認(rèn)值為空字符串,重寫setupTest(),讓每個(gè)線程執(zhí)行前獲取人參賦予方法中的變量x。

      如圖5所示,核心邏輯方法需要重寫runTest()來(lái)實(shí)現(xiàn),使用SampleResult設(shè)置取樣器在前臺(tái)的回顯,并可以通過(guò)setSuccessful規(guī)定本方法的調(diào)用成功與否,logger.info記錄的日志會(huì)同步在JMeter前臺(tái)顯示。當(dāng)人參數(shù)字不是反數(shù)時(shí),該Java請(qǐng)求取樣器會(huì)響應(yīng)失敗,反之則會(huì)響應(yīng)成功。

      最后,如圖6所示,還可以重寫teardownTest(),在整個(gè)取樣器執(zhí)行完畢后再執(zhí)行個(gè)性化的邏輯,本文編制了一個(gè)返回測(cè)試結(jié)果的簡(jiǎn)單邏輯。

      2.4開發(fā)功能展示

      (1)新增的函數(shù)插件功能如圖7所示,提供了明文和公鑰2個(gè)入?yún)?,點(diǎn)擊生成后即可輸出經(jīng)過(guò)RSA加密過(guò)后的密文,同時(shí)會(huì)生成函數(shù)字符串,可以直接在性能測(cè)試腳本中調(diào)用。

      (2)新增的取樣器插件功能如圖8所示,需要先創(chuàng)建線程組,然后新建取樣器中的Java請(qǐng)求,在右側(cè)下拉選擇新增的Java請(qǐng)求功能。當(dāng)輸入的num為反數(shù)時(shí),執(zhí)行該線程組后,在結(jié)果樹中的輸出為:請(qǐng)求成功,結(jié)果為0。當(dāng)輸入的num為負(fù)數(shù)時(shí),結(jié)果樹中的輸出為:請(qǐng)求失敗,結(jié)果為-1。

      3結(jié)束語(yǔ)

      本文針對(duì)不同開發(fā)語(yǔ)言的開源軟件在國(guó)產(chǎn)操作系統(tǒng)上如何進(jìn)行集成開發(fā)進(jìn)行了歸納分析,以JMeter為例分析了其代碼結(jié)構(gòu),完成了引入外部依賴和函數(shù)、取樣器插件的開發(fā)。集成開發(fā)所增添的功能很好地豐富了JMeter的使用場(chǎng)景,與國(guó)產(chǎn)操作系統(tǒng)互補(bǔ),給用戶提供更多的便利。

      本文的不足在于沒有更廣泛地研究、探索JMeter等大型開源軟件的功能模塊,如JMeter仍有眾多值得集成開發(fā)的功能有待掌握。希望更多的開源軟件能夠擁抱國(guó)產(chǎn)平臺(tái),以及更多的開發(fā)者加入二次開發(fā)的行列中來(lái),以降低用戶的使用門檻、豐富信創(chuàng)軟件生態(tài)。

      作者簡(jiǎn)介:

      陳吉寧(1980—),碩士,研究方向:計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)安全。

      黃季洋(1997—),本科,研究方向:Java編程與軟件編譯。

      淳安县| 台州市| 徐水县| 平凉市| 扎鲁特旗| 庆云县| 彰化县| 北宁市| 虎林市| 常山县| 外汇| 万州区| 山西省| 天水市| 永年县| 杭州市| 亚东县| 米易县| 临朐县| 安国市| 光山县| 浙江省| 普洱| 泸溪县| 辽宁省| 尼木县| 黄梅县| 阳高县| 敦煌市| 洪湖市| 墨江| 公安县| 常熟市| 仁怀市| 囊谦县| 临桂县| 黑龙江省| 广南县| 城步| 信阳市| 保山市|