謝宇涵 許世東 曾啟炫 陳梓平 鐘健
(廣州理工學院,廣東 廣州 510540)
在現代計算機產業滲透到各行各業的背景下,越來越多人參與到軟件編寫到行業來,有從其他職業轉到程序員到,也有本來就是這個專業到大學生參與到這個職業中來,而培訓機構也是多種多樣的,在學習編程的過程中所接觸的每一個教師都有自己的編碼風格,哪怕是同學,編碼風格都有差異,這就導致了參與到同一個開發工程中的成員編碼風格非常不統一。
軟件開發過程分為需求分析、系統設計、編碼測試等階段,其中編碼階段的主要工作就是對于代碼結構和風格的規范化,一般的集成開發環境(IDE),如Eclipse、IDEA 和Visual Studio,都有內置的專有編碼規范格式插件,由供應商提供,并且可以根據默認規則輕松修改。主要實施方式是:本地驗證+本地修改,即開發人員在本地格式化后提交到代碼庫。適用于中小型企業項目開發或使用統一開發套件的單個項目開發。
對于軟件企業來說,由于開發活動頻繁,代碼庫數量巨大,需要通過以下方式進行管理:服務器端驗證+本地修改。也就是說,在代碼評審和合并到庫中之前,使用部署在服務端的代碼規范檢查器進行分析,發現問題后,及時拒絕修改提交通知。
作為代碼訪問的第一個閾值,這種方法的缺點是它對開發效率的影響更大,因為即使是很小的規范問題也會阻塞后續的過程。同時,實施編碼規范作為一項周期性的開發活動,積累了很長一段時間,由于反復提交,造成修改的時間消耗也是很客觀的。
綜上,我們需要一種實現代碼結構和流程再造的方法和工具,以便檢測和修復不符合規范的代碼,以達到提高開發效率的目的。
在軟件開發中,一開始會為軟件設計好適合的架構和選擇理想的框架,但是隨著開發的進行,每個開發人員提交了自己的功能之后,代碼的風格就會出現不統一,在這期間有的開發人員為了趕進度,可能就會忽略了代碼的質量,而這只是前期會出現的問題,隨著第一次展示代碼效果,并且開始和甲方交流增加功能或者修改功能開始,就會出現更多不可避免的功能重疊等等問題。后續增加功能的開發人員會因為編碼風格等原因難以看懂代碼,這會導致可維護性的降低。隨著軟件版本的迭代,這樣的小問題就會不斷堆疊,直到增加新功能的成本比重新開發一個軟件的成本高時,這個軟件的生命也就到頭了。
而這個過程中,如果用到代碼重構,將大大改變這些問題,在這個基于web 和python 的代碼重構系統中,會根據提前設計好的編碼風格,命名規則等進行代碼重構和流程重構,使得代碼統一,提高可維護性和代碼可讀性,使得軟件后期的增加功能和維護成本大大降低。
計算機系統數據與應用程序的分布式方式,成為企業計算機應用系統的計算模式,也成為企業計算模式。自從第一臺計算機誕生以來,計算機協助人類進行社會生產、數據處理已經有半個世紀了,而在這個過程中計算機的應用系統模式也發生了數次迭代,分別是從單主機計算模式到分布式客戶/服務器計算模式(C/S)到瀏覽器/服務器計算模式(B/S)。
單主機模式下,是第一臺計算機誕生開始的應用系統模式,也就是單獨的主機,只能提供單獨的應用操作系統,系統也只有一個控制臺,例如勞資報表統計等等。而到后期分時多應用系統的成功研究也讓單主機模式進行了一個小升級,到達了單主機一多終端模式。在這個模式中,每個用戶似乎都在獨自享有計算資源,但是實際上是由同一個主機輪流為不同用戶提供計算資源,分時輪流為每個終端服務的。這一模式在但是被成為“計算中心”,單主機模式中,由于硬件結構的限制,我們只能將數據和應用集中放在主機上。因此,這一模式有時候也會被稱為集中式企業計算模式。
而到達20 世紀80 年代之后,由于個人計算機(PC)的發展和局域網技術的普及,讓用戶可以通過網絡進行計算機資源的共享和協同完成一些數據處理工作。在這個時候,雖然個人計算機的資源有限,但是在網絡技術的支持下,應用程序可以通過互聯網獲取到其它人在網絡上共享的計算機資源。于是,在這個背景下形成了分布式客戶端/服務器(C/S)的設計模式。
在C/S 模式中,將網絡中的計算機分為兩大類,一類是為其他計算機提供資源和各種服務的計算機,稱為服務器;二是接受服務器所提供資源的計算機,成為客戶機。在這其中客戶機一般由個人PC 擔當,運行客戶端應用程序,而部門級企業級的計算機則向這些客戶機提供相應的服務。在這個模式中雖然有著專業化程度高、開發手段靈活、運行速度快等特點,但是開發成本較為高昂、對多平臺的兼容性也不好,使用繁雜,不方便推廣,維護和升級也相對麻煩,對于新興技術的適配往往不能很及時地應用。
而B/S 模式是在C/S 模式之上發展而來的。而導致B/S 模式誕生的源計動力,就是在C/S 模式下,不斷增大的業務規模和不斷復雜化的業務處理要求,為了解決這一問題,在傳統的C/S 模式的兩層結構上,改進為三層結構,也就是瀏覽器/Web服務器/數據庫服務器。在這三層結構中,用戶端負責處理用戶輸入的數據和請求,商業邏輯層負責建立數據庫連接,根據用戶的請求執行相應SQL 語句,并把結果返回給客戶端,數據庫層則負責對數據庫的檢索和存儲,并將結果返回給中間層。B/S 模式系統以服務器為核心,程序處理和數據存儲大部分工作都是在服務器上完成操作的,用戶使用的時候無需安裝本地客戶端,只需要將計算機接通網絡就行,所以,針對B/S 模式開發的應用也叫作Web 應用。
相對于C/S模式設計的應用,B/S模式的應用,也就是Web應用的有點十分的明顯。
首先,Web 應用相對C/S 應用的維護工作量大大地減少了。在C/S 應用中,每一個客戶端都必須安裝和配置文件,假若這套軟件系統進行了很小的升級改動,用戶都必須進行卸載重新安裝,假若一個公司有50 套這樣的系統,那這個維護工作就要進行50 次,更不用提擁有上百套系統的大公司了。在這個維護過程中,若是有某一客戶端忘記進行維護,則會因為版本不相同而不能進行工作。而在B/S 結構中,客戶端不必進行安裝和維護,我們將剛剛的場景復現,假若這個50 人的公司使用的是B/S 結構的軟件,那這個軟件升級后,維護工作該如何進行呢:維護人員只需要將服務器上的軟件版本升級到最新的版本就行,其他客戶端的使用者,只需要重新進入該系統,就已經是最新的系統了。
其次,B/S 相對C/S 的另一個優勢就是能夠最大限度地降低成本。C/S 一般是兩層結構,而B/S、采用的是三層結構。在兩層結構中,客戶端通過將用戶請求發送到服務器來獲得數據結果,并且返回給用戶,而在三層結構中,客戶端通過轉發用戶請求給應用服務,而應用服務則從數據庫服務中獲得數據,應用服務的作用是將數據進行計算并且將結果提供給客戶端,而客戶端僅僅呈現結果給用戶。這兩個結構中的差別在于,兩層結構中,客戶端需要進行數據的運算和處理,而三層結構中,客戶端僅僅需要對數據進行呈現。由于在三層結構中,客戶端不參加運算,所以對于客戶端計算機的電腦配置要求往往并不高。代價僅僅是提高一臺服務器的加過,卻可以起到降低所有使用者電腦價格的作用,起到了降低整體成本的作用。
借用百度百科的解釋,重構,就是通過調整程序代碼改善軟件的質量、性能,使其程序的設計模式和架構更趨合理,提高軟件的擴展性和維護性。簡單來講就是在不改變軟件的功能的前提下,改變軟件系統的實現方式。
軟件的重構重要性要從軟件的生命周期說起。軟件屬于智力產品是抽象存在的,不存在物理上的損耗,那么導致軟件無法繼續使用的原因就只有一個,那就是用戶需求的變更。軟件的產生往往伴隨著各種需求,當需求無法被滿足的時候,這個軟件也就無法使用了,或者說必須做出改變了,而軟件的改變和迭代都是需要成本的,當迭代成本大于制作成本時,就是這個軟件生命走到盡頭的時候了,所以軟件發展到一定的階段的時候就需要通過重構來使其具備較強的適應能力。
1.關于變量命名重構,會根據前后代碼判斷該命名類型,若是類名則會運用約定的大寫字母開頭,然后根據判斷是否為多個單詞,若是則會將每個單詞的首字母大寫;若該單詞為方法名,則運用第一個單詞的字母小寫,后面單詞首字母大寫的原則重新命名;若為常量名,則全部字母都將修改為大寫字母。
2.方法重構
(1)提取子函數
該方法的目的是為了保證函數的簡潔性,使得主干清晰明了
例如:
private 起床上課{
起床,穿衣服,疊被子,洗臉,刷牙,吃早點,出門,步行,查看課表,到教學樓,進教室,簽到
}
這樣的主干會顯得格外繁瑣,于是我們將進行提取子函數封裝
private 起床吃飯{
起床,穿衣服,疊被子,洗臉,刷牙,吃早點
}
private 出門{
出門,步行
}
private 上課{
查看課表,到教學樓,進教室,簽到
}
最后就成了這樣:
private 起床上課{
起床吃飯,出門,上課
}
(2)上移函數到父類
當在代碼中發現有多個子類都用到類某一段相同的動作時,我們會把這一段相同的動作代碼封裝到父類當中去。
(3)下移函數到子類
同樣的,當我們發現有大部分的子類是不需要用到父類的某一個動作時,我們會將該動作的代碼提取賦予一個新的類,減少耦合性。例如建立一個開車的主類,其中有啟動停車,加速,開門,關門的方法,但是考慮到電動車自行車是沒有門的,那么我們就可以將有開門關門的提取為一個有門的車的類,也就是將父類下移到子類。
(4)封裝固定邏輯
當一套流程執行當順序是固定的時候,我們也會把這套邏輯封裝成一個方法,也就是將多個流程封裝成一個流程。
(5)使用泛型去除重復邏輯
在處理多類對象的時候,處理方法都很一致,而且處理流程與類型無關,為了簡化處理流程,我們可以使用泛型來減少函數的數量。
(6)使用對象避免過多的參數
當傳入參數過多時,我們會將這些參數封裝為一個對象屬性,然后直接傳遞對象。
例如:
Private showRecommendation(title,content,pic,writer,sail){
...
}
在這里就可以把參數封裝成如下
Class ShareData{
Title,content,pic,writer,sail
}
轉移函數
當一個類中當方法,太以來另外一類中的大部分屬性時,我們會考慮把這個方法放到另一個類中。
根據上述原理,開展了系統研究。系統搭建在web 平臺,其實現流程為:首先從本地上傳文件,然后系統會根據事先設定好的規則,開始對文件進行上述的重構(提取子類、上移到父類、下移到子類、封裝固定邏輯等等),對文件對操作原理是利用正則表達式判斷代碼所屬類型,再根據所屬類型進行相應的邏輯判斷,然后重新構造代碼文件,最后再由用戶下載。