亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Git的跨版本遷移的軟件評(píng)審設(shè)計(jì)與實(shí)現(xiàn)

        2018-08-01 08:06:38關(guān)婷婷任洪敏江金蓮
        現(xiàn)代計(jì)算機(jī) 2018年19期
        關(guān)鍵詞:倉(cāng)庫(kù)軟件歷史

        關(guān)婷婷,任洪敏,江金蓮

        (上海海事大學(xué)信息工程學(xué)院,上海 201306)

        0 引言

        軟件開(kāi)發(fā)實(shí)踐表明,大部分缺陷從軟件開(kāi)發(fā)的最早階段起,就存在于軟件之中。經(jīng)驗(yàn)表明,在制定技術(shù)規(guī)范期間產(chǎn)生的問(wèn)題如果在集成測(cè)試或者產(chǎn)品使用時(shí)被發(fā)現(xiàn),與在設(shè)計(jì)編碼期間被發(fā)現(xiàn)相比較,返工的成本前者比后者高10-100倍。軟件評(píng)審是用于開(kāi)發(fā)過(guò)程檢查和糾正缺陷的最佳途徑。它們可以檢查未形成的執(zhí)行代碼的文檔缺陷,用評(píng)審發(fā)現(xiàn)缺陷的成本與其他的是相當(dāng)?shù)偷?,并且可以提高?xiàng)目的生產(chǎn)率更早的發(fā)現(xiàn)缺陷從而減少返工時(shí)間和測(cè)試時(shí)間。軟件評(píng)審工具不僅可以節(jié)約評(píng)審會(huì)議的時(shí)間而且不再限制參與評(píng)審人員的時(shí)間和地點(diǎn),也更好地記錄了評(píng)審的全部信息。隨著Git軟件項(xiàng)目托管平臺(tái)的普遍應(yīng)用給軟件開(kāi)發(fā)人員對(duì)文件和代碼的修改帶來(lái)便捷。從而同時(shí)存儲(chǔ)的軟件項(xiàng)目都存在多個(gè)版本,致使軟件評(píng)審的工作需要不斷地隨之變更給軟件評(píng)審活動(dòng)帶來(lái)不便極大地降低了軟件評(píng)審的效率。所以本文將Git版本控制的原理融入到軟件評(píng)審的方式中,研究出一個(gè)可以跨版本遷移的軟件評(píng)審系統(tǒng)。版本控制是一種軟體工程技巧,籍以在開(kāi)發(fā)的過(guò)程中,確保由不同人所編輯的同一檔案都得到更新。版本控制透過(guò)文檔控制記錄程序各個(gè)模組的改動(dòng),并為每次改動(dòng)編上序號(hào)。通過(guò)這些生成的32位具有唯一性的編號(hào)可以實(shí)現(xiàn)將某個(gè)文件回溯到之前的狀態(tài),甚至將整個(gè)項(xiàng)目都回退到過(guò)去某個(gè)時(shí)間點(diǎn)的狀態(tài)。則跨版本遷移正是利用項(xiàng)目當(dāng)前版本與歷史版本的比對(duì),根據(jù)差異對(duì)比實(shí)現(xiàn)當(dāng)前版本與歷史評(píng)審信息的比對(duì)。從而實(shí)現(xiàn)軟件評(píng)審的工作結(jié)果隨軟件項(xiàng)目的改動(dòng)而自動(dòng)變動(dòng)。不再因?yàn)檐浖?xiàng)目的修改而從新開(kāi)始軟件評(píng)審工作。

        1 Git的版本控制原理

        1.1 Git Log歷史版本回顧

        版本控制是一種軟體工程技巧,籍以在開(kāi)發(fā)的過(guò)程中,確保由不同人所編輯的同一檔案都得到更新。版本控制透過(guò)文檔控制記錄程序各個(gè)模組的改動(dòng),并為每次改動(dòng)編上序號(hào)。Git是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),可以有效、高速f處理從很小到非常大的項(xiàng)目版本管理。利用Git命令中的日志查詢命令Git Log的原理來(lái)獲取當(dāng)前文件的所有歷史版本的版本號(hào)。版本的信息會(huì)按提交時(shí)間列出所有的更新,最后一次提交的信息會(huì)在最上面。Git Log會(huì)展示出所有提交過(guò)版本的信息,這些信息包括32位版本號(hào)、提交時(shí)間、提交者姓名、版本的提示信息。通過(guò)git log命令,可以根據(jù)時(shí)間從最近到最遠(yuǎn)顯示提交日志,如下列所示第一行是Git的編號(hào)。與SVN編號(hào)不同這串?dāng)?shù)字并不是按數(shù)值遞增的,而是一個(gè)SHA1計(jì)算出來(lái)的一個(gè)非常大的數(shù)字,用十六進(jìn)制表示。每提交一次Git實(shí)質(zhì)就將所有版本按時(shí)間穿成一條時(shí)間線。在Git中用HEAD表示當(dāng)前版本也就是當(dāng)前版本cae098d…,使用git reset實(shí)現(xiàn)版本回退,Git的版本回退速度非???,因?yàn)镚it在內(nèi)部有個(gè)指向當(dāng)前版本的HEAD指針,當(dāng)你回退版本的時(shí)候,Git僅僅是把HEAD的指針指向改變到新的版本上而已,然后順便把工作區(qū)的文件更新了。

        commit cae098ddaf9cecd1bc3dceaddc3db27bc7632e18

        (HEAD->master)

        Author:Guan Ting Ting

        Date:Fri Mar 23 13:07:14 2018+0800

        ----commit–m"comments on a form"

        1.2 git diff版本差異對(duì)比

        可以通過(guò)版本序號(hào)可以對(duì)比出兩個(gè)歷史版本的差異對(duì)比,或者當(dāng)前版本和一個(gè)歷史版本的文件的對(duì)比。通過(guò)git diff序列號(hào)得到如下信息:

        diff--git a/src/Main.java b/src/Main.java

        index e69de29..dca0fe6 100644

        ---a/src/Main.java

        +++b/src/Main.java

        @@-1,2+1,2@@

        第一行表示結(jié)果為Git格式的diff。進(jìn)行比較的是a版本a.java(即變動(dòng)前)和b版本的a.java(變動(dòng)后),第二行表示兩個(gè)版本的Git哈希值,index區(qū)域的4ef7e28對(duì)象與工作目錄區(qū)域的3ec1e0f對(duì)象進(jìn)行比較。最后的六位數(shù)字是對(duì)象的模式為普通文件644權(quán)限。第三行和第四行表示進(jìn)行比較的兩個(gè)文件?!?--”表示變動(dòng)前的版本,“+++”表示變動(dòng)后的版本。變動(dòng)的位置用兩個(gè)@座作為起首和結(jié)束。后面跟隨的是變動(dòng)信息的具體情況如圖代表第一個(gè)版本變動(dòng)從第一行開(kāi)始連續(xù)變動(dòng)四行,第二個(gè)版本變動(dòng)從第一行開(kāi)始連續(xù)57行。后面則是變動(dòng)的具體內(nèi)容。

        2 跨版本遷移的軟件評(píng)審平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)

        2.1 跨版本遷移的軟件評(píng)審的總體設(shè)計(jì)

        系統(tǒng)設(shè)計(jì)流程如下:

        (1)視圖獲取所選的文件倉(cāng)庫(kù)ID、分支、文件名稱。

        (2)根據(jù)倉(cāng)庫(kù)ID在數(shù)據(jù)庫(kù)中搜索相對(duì)的路徑,然后讀取文件內(nèi)容。

        (3)獲取當(dāng)前文件所有歷史版本號(hào),并獲得所有版本的數(shù)據(jù)庫(kù)中的評(píng)價(jià)信息。

        (4)將每條評(píng)價(jià)的版本號(hào)與當(dāng)前版本作git diff對(duì)比,得到相對(duì)增加或加少的行。

        (5)根據(jù)增加減少的行與此條記錄作動(dòng)態(tài)運(yùn)算得到當(dāng)前版本此條評(píng)論應(yīng)該顯示的行號(hào)。

        (6)將讀取到的文件、文件所有的評(píng)論、每條評(píng)論在當(dāng)前版本的行號(hào)一并返回視圖層。

        (7)添加評(píng)論是將倉(cāng)庫(kù)ID、branch、文件名、行號(hào)、評(píng)論內(nèi)容存入數(shù)據(jù)庫(kù)中生成記錄??绨姹具w移的軟件評(píng)審實(shí)現(xiàn)流程如下:

        圖1 跨版本遷移的實(shí)現(xiàn)流程

        2.2 實(shí)現(xiàn)技術(shù)

        平臺(tái)前端頁(yè)面采用Syntaxhighlighter框架結(jié)合jQuery實(shí)現(xiàn)不同軟件文件內(nèi)容的高亮顯示,很好地支持了Java、XML、PHP等16種文件形式,并結(jié)合HT?ML5、CSS3等前端技術(shù)呈現(xiàn)友好的界面。后臺(tái)程序以Spring Boot為框架,以Java為主要開(kāi)發(fā)語(yǔ)言,通過(guò)Java調(diào)用JGit的API實(shí)現(xiàn)對(duì)Git倉(cāng)庫(kù)的相關(guān)操作,后臺(tái)與數(shù)據(jù)庫(kù)MySQL的連接、查詢、添加等數(shù)據(jù)交互是通過(guò)JSON數(shù)據(jù)對(duì)象來(lái)實(shí)現(xiàn)。使用面向?qū)ο蟮拈_(kāi)發(fā)結(jié)構(gòu)和MVC模式;后臺(tái)通過(guò)JGit實(shí)現(xiàn)本地倉(cāng)庫(kù)信息的讀取,并在前端通過(guò)AJAX接收返回的數(shù)據(jù)和對(duì)應(yīng)的評(píng)審結(jié)果。JGit是一款由Eclipse基金會(huì)提供支持的輕量級(jí)、Java庫(kù)實(shí)現(xiàn)的Git版本控制系統(tǒng),包括三大部分:(1)版本庫(kù)訪問(wèn)程序(2)網(wǎng)絡(luò)協(xié)議(3)核心版本控制算法。圖2為本平臺(tái)的技術(shù)框架。

        3 跨版本遷移的算法實(shí)現(xiàn)

        3.1 歷史版本評(píng)論及文件讀取的實(shí)現(xiàn)步驟

        Step1:前端通過(guò)AJAX傳遞當(dāng)前文件的倉(cāng)庫(kù)編碼、文件名稱、分支,后臺(tái)根據(jù)倉(cāng)庫(kù)編碼得到在數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)應(yīng)的倉(cāng)庫(kù)路徑。

        Step2:根據(jù)倉(cāng)庫(kù)編碼在數(shù)據(jù)庫(kù)中查找倉(cāng)庫(kù)路徑,從而得到當(dāng)前文件在Git倉(cāng)庫(kù)中的路徑。

        Step3:通過(guò)獲取的文件路徑從字符輸入流中讀取本地Git倉(cāng)庫(kù)的文件,創(chuàng)建BufferedReader對(duì)象逐行緩沖各個(gè)字符,并將讀取的字符存儲(chǔ)到一個(gè)ArrayList的結(jié)構(gòu)中。

        Step4:通過(guò)JGit提供的獲得文件版本編號(hào)的API獲得所有提交過(guò)的日志信息中的版本編號(hào)。

        Step5:將獲得的所有版本編號(hào)拼成一個(gè)字符串,用之在數(shù)據(jù)庫(kù)中查找所有歷史版本的評(píng)論。

        3.2 git diff差異對(duì)比的算法實(shí)現(xiàn)

        跨版本文件中評(píng)論信息的遷移主要由兩部分實(shí)現(xiàn):首先獲得提交日志中所有版本中的評(píng)論信息,將每條評(píng)論信息所在的版本與當(dāng)前版本作git diff的對(duì)比,從而得知相對(duì)當(dāng)前版本增加的行號(hào)和減少的行號(hào)。通過(guò)使用JGit提供的git diff的API,實(shí)現(xiàn)兩個(gè)文件差異的比較。

        3.3 動(dòng)態(tài)計(jì)算跨版本遷移行號(hào)

        動(dòng)態(tài)計(jì)算原理:通過(guò)分析git diff返回的對(duì)比結(jié)果,歷史版本對(duì)于當(dāng)前版本新增行數(shù)的數(shù)組和刪減行數(shù)的數(shù)組。遍歷增加的行數(shù)數(shù)組,歷史版本中記錄評(píng)論的行號(hào)后移分為兩種情況:①若新增的行號(hào)小于歷史版本中記錄行號(hào),則歷史版本記錄行號(hào)需向后移動(dòng)一位。②若新增行號(hào)等于歷史版本記錄行號(hào),連續(xù)增加幾行則歷史行號(hào)需后移幾位。同理歷史版本中記錄評(píng)論的行號(hào)向前移動(dòng)亦然。用一個(gè)變量diffCount記錄需要增加或刪減的行數(shù),則當(dāng)前版本中的評(píng)論行號(hào)就等于歷史版本中記錄的行號(hào)加變量diffCount。

        4 實(shí)驗(yàn)結(jié)果

        4.1 實(shí)驗(yàn)環(huán)境

        開(kāi)發(fā)過(guò)程中開(kāi)發(fā)人員不斷的對(duì)文件進(jìn)行修改,然后不斷地提交修改到版本庫(kù)里??绨姹具w移平臺(tái)實(shí)現(xiàn)了評(píng)審的文件的多個(gè)版本的切換,評(píng)論結(jié)果不丟失,并對(duì)應(yīng)匹配文件行號(hào)。本文跨版本遷移的軟件評(píng)審平臺(tái)需要的環(huán)境配置如下:

        表1 實(shí)驗(yàn)環(huán)境軟件工具表

        4.2 實(shí)驗(yàn)結(jié)果對(duì)比

        目前流行的軟件評(píng)審系統(tǒng)大致分為三種。第一種是簡(jiǎn)單的和輕量級(jí)的評(píng)審系統(tǒng),但是這種只是單純的代碼評(píng)審工具并沒(méi)有關(guān)聯(lián)到遠(yuǎn)程代碼倉(cāng)庫(kù)。不能立即對(duì)更新的代碼做最新的評(píng)審降低評(píng)審效率。需要每次手動(dòng)導(dǎo)入帶評(píng)審項(xiàng)目,給評(píng)審帶來(lái)便。第二種就如谷歌開(kāi)發(fā)的Gerrit一樣,實(shí)際上一個(gè)Git服務(wù)器,它為在其服務(wù)器上托管的Git倉(cāng)庫(kù)提供一系列權(quán)限控制。這種評(píng)審系統(tǒng)龐大,不僅需要進(jìn)行復(fù)雜的公鑰、私鑰配置。第三種是基于SVN的軟件評(píng)審系統(tǒng),SVN采用集中式代碼管理,頻繁的提交代碼會(huì)致使服務(wù)器壓力過(guò)大,數(shù)據(jù)庫(kù)容量暴增。并且如果連接不到服務(wù)器就無(wú)法工作非常受限。而本文研發(fā)的基于Git的跨版本遷移的軟件評(píng)審系統(tǒng)不僅省去繁瑣的配置工作,也不需要隨文件的改動(dòng)手動(dòng)再次導(dǎo)入需要評(píng)審的文件,提高了開(kāi)發(fā)的效率為開(kāi)發(fā)人員節(jié)省了工作時(shí)間。

        5 結(jié)語(yǔ)

        本文研發(fā)的系統(tǒng)是一個(gè)基于Web在線的代碼評(píng)審系統(tǒng)原型,使用Git版本控制系統(tǒng)讀取Git倉(cāng)庫(kù)文件作代碼評(píng)審。操作簡(jiǎn)單不需要手動(dòng)導(dǎo)入待評(píng)審文件也不需要繁瑣的公鑰、秘鑰配置。目前并沒(méi)有一個(gè)軟件評(píng)審工具具有跨版本的遷移功能。評(píng)審文件各個(gè)版本之間自由切換,評(píng)審標(biāo)記和評(píng)審信息隨之改變。這樣每次開(kāi)放人員提交新的版本就不需要從新評(píng)審。系統(tǒng)將自動(dòng)與之前的版本做對(duì)比顯示標(biāo)注和評(píng)審信息。使軟件評(píng)審的過(guò)程更加輕巧便捷,開(kāi)發(fā)人員隨時(shí)掌握軟件代碼的最新?tīng)顟B(tài)節(jié)省了開(kāi)發(fā)時(shí)間,提升了評(píng)審效率。

        猜你喜歡
        倉(cāng)庫(kù)軟件歷史
        倉(cāng)庫(kù)里的小偷
        禪宗軟件
        填滿倉(cāng)庫(kù)的方法
        四行倉(cāng)庫(kù)的悲壯往事
        軟件對(duì)對(duì)碰
        新歷史
        全體育(2016年4期)2016-11-02 18:57:28
        歷史上的6月
        歷史上的八個(gè)月
        歷史上的4月
        消防設(shè)備
        天天天天躁天天爱天天碰| 日韩精品极视频在线观看免费 | 手机在线看片| 成人免费看片又大又黄| 国产白丝网站精品污在线入口| 日韩有码中文字幕av| 国产午夜视频一区二区三区| 永久黄网站免费视频性色| 亚欧国产女人天堂Av在线播放| 日本女同伦理片在线观看| 国产不卡视频在线观看| 亚洲中文字幕无码av| 免费一级特黄欧美大片久久网| 一区二区三区午夜视频在线观看| 亚洲av少妇高潮喷水在线| 国产色在线 | 亚洲| 手机看片福利日韩| 国产喷白浆精品一区二区豆腐| 熟女一区二区三区在线观看| 桃花色综合影院| 亚洲一区二区三区精品网| 亚洲国产成人av毛片大全| 国产精品久久成人网站| 真人男女做爰无遮挡免费视频| 水蜜桃在线视频在线观看| 午夜一区二区三区观看| 国产一区二区在线视频| 久热香蕉精品视频在线播放| av一区二区三区观看| 丰满少妇a级毛片| 国产精在线| 国内精品嫩模av私拍在线观看| 丝袜人妻一区二区三区| 丰满少妇在线观看网站| 538在线视频| 国产色视频一区二区三区不卡| 免费看黄色电影| 欧美成人高清手机在线视频| 粉嫩人妻91精品视色在线看| 人妻aⅴ中文字幕| 极品 在线 视频 大陆 国产|