組織與策略問題_第1頁
組織與策略問題_第2頁
組織與策略問題_第3頁
組織與策略問題_第4頁
組織與策略問題_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

編程規(guī)范—第一講

組織與策略問題軟件工程系本小節(jié)主要闡述的是程序編程開發(fā)的基本問題,這些問題大多與代碼本身并沒有直接關(guān)系,它們討論的是編寫規(guī)范代碼所必須的工具與技術(shù)。不要拘泥于小節(jié)在高警告級別處干凈利落地進(jìn)行編譯使用自動構(gòu)建系統(tǒng)使用版本控制系統(tǒng)做代碼審查1.不要拘泥小節(jié)不要強(qiáng)制施加個人喜好或者過時的做法應(yīng)該在每個源文件乃至每個項(xiàng)目中都使用一致的編程格式不要規(guī)定縮進(jìn)多少,應(yīng)該規(guī)定要用縮進(jìn)來體現(xiàn)代碼的結(jié)構(gòu);不要強(qiáng)制行的具體長度,應(yīng)該保證代碼行的長度有利于閱讀;不要在命名方面規(guī)定過多,應(yīng)該規(guī)定的是使用一致的命名規(guī)范;不要規(guī)定注釋風(fēng)格,應(yīng)該編寫有用的注釋。W文件結(jié)構(gòu)

文件每個C++程序通??梢苑譃閮蓚€文件:一個文件用于保存程序的聲明,稱為頭文件(“.h”);一個文件用于保存程序的實(shí)現(xiàn),稱為定義文件(“.cpp”).W文件結(jié)構(gòu)

文件頭文件由三部分組成頭文件開頭出的版權(quán)和版本聲明;預(yù)處理塊;函數(shù)和類結(jié)構(gòu)聲明等。為了防止頭文件被重復(fù)引用,應(yīng)當(dāng)用ifndef/define/endif結(jié)構(gòu)產(chǎn)生預(yù)處理塊頭文件(graphics.h)中只存放“聲明”而不存放“定義”。W文件結(jié)構(gòu)

文件定義文件由三部分組成定義文件開頭出的版權(quán)和版本聲明對一些頭文件的定義程序的實(shí)現(xiàn)體假設(shè)定義文件的名稱為graphics.cpp。程序版式

文件空行:在每個類聲明之后,每個函數(shù)定義結(jié)束后都要加空行。每行代碼只做一件事,如只定義一個變量,或只寫一條語句。這樣的代碼容易閱讀,并且方便注釋。If、for、while、do等語句自占一行,執(zhí)行語句不得緊跟其后。不論執(zhí)行語句有多少都要加{}。盡可能在定義變量的同時初始化該變量。Intsum=0;修飾符的位置應(yīng)該緊靠變量:int*x,y;命名規(guī)則

文件命名兩個基本原則:含義清晰,不易混淆;不和其他模塊、系統(tǒng)API的命名空間相沖突即可。標(biāo)識符應(yīng)當(dāng)直觀且可以拼讀,最好采用英文單詞或其組合,便于記憶和閱讀。不要用漢語拼音。標(biāo)識符長度應(yīng)當(dāng)符合“min-length&&max-information”命名規(guī)則

文件命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風(fēng)格保持一致。Windows應(yīng)用程序通常采用大小寫混排(AddChild)。Unix應(yīng)用程序標(biāo)識符次用小寫加下劃線(add_child)程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似標(biāo)識符。IntX,x;voidfoo(intx);voidFOO(floatx);局部變量與全局變量不要完全相同。盡管作用域不同也很容易出現(xiàn)語法錯誤。變量名盡量使用“名詞”或者“形容詞+名詞”;全局函數(shù)名字應(yīng)當(dāng)使用“動詞”或“動詞+名詞”,類中的成員函數(shù)可以只用“動詞”;Floatvalue;Floatoldvalue;DrawBox();box->Draw();命名規(guī)則

文件Windows應(yīng)用程序命名規(guī)則:類名和函數(shù)名用大寫字母開頭的單詞組合而成ClassNode;ClassleafNode;//類名VoidDraw(void);voidSetValue(intvalue);//函數(shù)名變量和參數(shù)用小寫字母開頭的單詞組合而成。BOOLflag;intdrawMode;常量全用大寫字母、用下劃線分割單詞。ConstintMAX=100;ConstintMAX-LENGTH=100;靜態(tài)變量加前綴s_(表示static)注釋

文件注釋常用于版本、版權(quán)聲明;函數(shù)借口說明;重要的代碼行或段落提示。注釋是對代碼的提示,不宜太多,如果代碼本身清楚,則不必注釋。邊寫代碼邊注釋,修改代碼同時修改注釋,保持注釋與代碼的一致。注釋中避免出現(xiàn)縮寫,位置與被描述代碼相鄰,可以放在代碼上方或右方,不可放在下方。當(dāng)代碼過長,特別出現(xiàn)多重嵌套時,應(yīng)當(dāng)在一些段略的結(jié)束處加注釋,便于閱讀。第1條:在高警告級別干凈利落地進(jìn)行編譯高度重視警告:使用編譯器的最高警告級別。理解所有警告通過修改代碼而不是降低警告級別來排除警告編譯器對某個構(gòu)造發(fā)出警告,一般表明代碼中存在潛在問題。成功的構(gòu)建應(yīng)該是無聲無息的,沒有警告。排除警告的正確做法就是:把它弄清楚,然后改寫代碼以排除警告,并使代碼閱讀者和編譯器都能更加清楚,代碼是按編寫者的意圖執(zhí)行的。2.在高警告級別干凈利落地進(jìn)行編譯未使用參數(shù):不提供該參數(shù)名稱即可未使用的變量:插入一個該變量的表達(dá)式即可。這算是一個慣用法了,會比較多的用到。變量未初始化:初始化。需要通過一個過程來初始化的例外,即形如:obj;init_obj(obj);某些分支沒有return返回值。在這些分支上加入斷言:assert(false);再接一個return返回值。有、無符號不匹配。如果無法避免,預(yù)先寫好強(qiáng)制轉(zhuǎn)換。個人認(rèn)為,盡量避免無符號數(shù),即使是處理理論上就沒有符號的數(shù)據(jù),有符號數(shù)適應(yīng)性更好。幾乎沒有必要使用無符號數(shù)---除了某些位操作。3.使用自動構(gòu)建系統(tǒng)相比其它語言,C/C++的編譯過程比較復(fù)雜,依賴具體的編譯器、操作系統(tǒng)、硬件環(huán)境,所以一直以來缺乏一個簡單易用、跨平臺、支持多種編譯器的通用構(gòu)建工具。傳統(tǒng)的C++構(gòu)建系統(tǒng)有:SconsWaf、Jam/Boost.Jam、Cmakecmake的特點(diǎn)主要有:開放源代碼、跨平臺、能夠管理大型項(xiàng)目、簡化編譯構(gòu)建過程和編譯過程、高效率、可擴(kuò)展功能等常用:自動構(gòu)建系統(tǒng)FlexBuild:每天構(gòu)建某個工程,可方便部署為每日構(gòu)建、每夜構(gòu)建、自動構(gòu)建系統(tǒng)。使用完全自動化的構(gòu)建系統(tǒng),無需用戶干預(yù)即可構(gòu)建整個項(xiàng)目單操作的構(gòu)建過程能將源文件可靠和可重復(fù)地轉(zhuǎn)換為可以交付的軟件包。3.使用自動構(gòu)建系統(tǒng)FlexBuild是跨平臺的C/C++項(xiàng)目構(gòu)建工具(Daily-Build)-能每天定時執(zhí)行指令構(gòu)建整個產(chǎn)品樹,并生成結(jié)果報表。一鍵編譯所有的工程支持VsiualC++6.0/2003/2005/2008/2010、MinGW/GCC、以及Intel編譯器的支持支持Windows下所有類型程序的開發(fā)版本自動遞增各個項(xiàng)目源碼行數(shù)以及編譯時間統(tǒng)計詳細(xì)的編譯結(jié)果輸出方便定制每個項(xiàng)目編譯前和編譯后要執(zhí)行的操作豐富的輔助開發(fā)工具4.使用版本控制系統(tǒng)簡單點(diǎn)說,你在開發(fā)過程中,會不斷發(fā)現(xiàn)新需求,不斷發(fā)現(xiàn)bug,如果不做控制,你的軟件將永遠(yuǎn)不會發(fā)布,或今天一個版本,明天又是一個版本。版本控制系統(tǒng):VersionControlSystem功能:版本記錄和恢復(fù)、共享數(shù)據(jù)、追蹤修改信息和責(zé)任人。核心概念:版本庫4.使用版本控制系統(tǒng)常見版本控制系統(tǒng):VisualSourceSafe(簡稱VSS)VSS是配置管理的一種很好的入門級的工具。VSS采用標(biāo)準(zhǔn)的windows操作界面,安裝和配置非常簡單,VSS的配置管理的功能比較基本,提供文件的版本跟蹤功能。VSS提供share(共享)、branch(分支)和合并(merge)的功能,對于團(tuán)隊的開發(fā)進(jìn)行支持。VSS只能在windows平臺上運(yùn)行,不能運(yùn)行在其他操作系統(tǒng)上,微軟不再對VSS提供技術(shù)支持。4.使用版本控制系統(tǒng)ConcurrentVersionSystem(簡稱CVS)CVS是開發(fā)源代碼的配置管理工具,其源代碼和安裝文件都可以免費(fèi)下載。CVS是源于unix的版本控制工具,對于CVS的安裝和使用最好對unix的系統(tǒng)有所了解能更容易學(xué)習(xí),CVS的服務(wù)器管理需要進(jìn)行各種命令行操作。CVS是開發(fā)源碼軟件,沒有生產(chǎn)廠家為其提供技術(shù)的支持。如發(fā)現(xiàn)問題,通常只能靠自己查找網(wǎng)上的資料進(jìn)行解決。4.使用版本控制系統(tǒng)SubVersion(簡稱SVN)SVN是一個開放源代碼的版本控制系統(tǒng)采用分支管理系統(tǒng)。版本號遞增,邏輯明確,符合大眾思維習(xí)慣。版本庫集中式管理、版本信息不易透漏。唯一的版本庫,代碼一致性非常高。SubVersion:實(shí)現(xiàn)服務(wù)系統(tǒng)的軟件。TortoiseSVN:是SVN客戶端程序,為windows外殼程序集成到windows資源管理器和文件管理系統(tǒng)的Subversion客戶端。5.做代碼審查什么是代碼審查?代碼評審也稱代碼復(fù)查,是指通過閱讀代碼來檢查源代碼與編碼標(biāo)準(zhǔn)的符合性以及代碼質(zhì)量的活動。在測試中又稱為靜態(tài)分析,包括:代碼走查、代碼審查、技術(shù)評審。往往需要借助白盒測試工具來自動檢測。代碼審查負(fù)責(zé)解決的問題:編碼規(guī)范問題:命名不規(guī)范代碼結(jié)構(gòu)問題:重復(fù)代碼、巨大的方法和類、分層不當(dāng)、緊耦合工具、框架使用不當(dāng):Spring、Hibernate、AJAX5.做代碼審查實(shí)現(xiàn)問題:錯誤驗(yàn)證、異常處理、事務(wù)劃分、線程、性能、安全、實(shí)現(xiàn)過于復(fù)雜、代碼可讀性不佳、擴(kuò)展性不好測試問題:測試覆蓋度不夠、可測試性不好代碼評審不負(fù)責(zé)檢查功能、邏輯是否正確,這些要靠單元測試和QA工作來解決好處:提高代碼質(zhì)量在項(xiàng)目的早期發(fā)現(xiàn)缺陷,將損失降至最低評審的過程也是重新梳理思路的過程,雙方都加深了對系統(tǒng)的理解促進(jìn)團(tuán)隊溝通、促進(jìn)知識共享、共同提高5.做代碼審查怎么做代碼審查?交叉評審——代碼走查:團(tuán)隊成員互相檢查代碼參與者可以是任意兩個組員,或開發(fā)組長分別與每個組員結(jié)對進(jìn)行時機(jī)可以選擇在下班前半小時,對當(dāng)天改動的模塊進(jìn)行評審代碼作者講解如何以及為何這樣實(shí)現(xiàn)、評審者提出問題和建議每次解決的問題要記錄到SVN注釋5.做代碼審查會審:以項(xiàng)目為單位,召開專門的代碼評審會議參與者:包括項(xiàng)目組全體成員及其它組的開發(fā)組長時機(jī)選擇:開發(fā)進(jìn)行到某一階段時,對共性問題進(jìn)行總結(jié),對好的做法進(jìn)行提煉和推廣會前準(zhǔn)備工作:組織者應(yīng)通知各參與者本次評審的范圍參與者閱讀源代碼,列出發(fā)現(xiàn)的問題、亮點(diǎn),匯總給組織者準(zhǔn)備工作要細(xì)致,需要給出問題詳細(xì)描述以及相關(guān)代碼在SVN上的URL地址等評審代碼的選擇:最近一次迭代開發(fā)的代碼系統(tǒng)關(guān)鍵模塊業(yè)務(wù)較復(fù)雜的模塊缺陷率較高的模塊5.做代碼審查會審:以項(xiàng)目為單位,召開專門的代碼評審會議會議議程:如果是第一次會議,先由該項(xiàng)目開發(fā)組長做整體介紹參加者依次發(fā)言,結(jié)合代碼講解發(fā)現(xiàn)的問題每講完一個問題,針對其展開討論,每個問題控制在10分鐘以內(nèi)如果問題不多,還可以安排該組成員對最近開發(fā)的代碼進(jìn)行地毯式的講解和排查;或者針對某個方面對整個項(xiàng)目做評審,例如性能、安全性或測試會后總結(jié):把會上提出的所有問題、亮點(diǎn)及最終結(jié)論詳細(xì)的記錄下來,供其他團(tuán)隊借鑒未能討論清楚的問題,會后解決5.做代碼審查提供評審案例:用評審前的代碼與評審后優(yōu)化的代碼做對比問題跟蹤:對評審中發(fā)現(xiàn)的問題代碼應(yīng)加以跟蹤,確保問題得以解決,防止復(fù)發(fā)評審到什么程度:進(jìn)行全面的代碼評審成本較高,也沒有必要對發(fā)現(xiàn)的問題要本著集體代碼所有制的觀點(diǎn)和就事論事的原則,因此建議把代碼質(zhì)量與團(tuán)隊績效(而不是個人績效)掛鉤總結(jié)要拘泥于小節(jié)在高警告級別處干凈利落地進(jìn)行編譯使用自動構(gòu)建系統(tǒng)使用版本控制系統(tǒng)做代碼審查目標(biāo)掌握文件結(jié)構(gòu)、命名規(guī)則理解自動構(gòu)建系統(tǒng)和版本控制系統(tǒng)理解代碼審查的作用與做法C++知識回顧三個問題:1、C++程序由哪些組成部分2、C++與C的區(qū)別3、區(qū)別面向?qū)ο笈c面向過程C++程序組成#include<iostream>

//包含頭文件iostream編譯指示usingnamespacestd;//使用命名空間std聲明intmain()//函數(shù){cout<<“HelloXiaoming!\n”;//可執(zhí)行語句return0;//函數(shù)返回值

}1、程序組成包括編譯指示、聲明語句、可執(zhí)行語句、函數(shù)、賦值運(yùn)算語句、復(fù)合語句、控制語句、注釋等等;2、C++函數(shù)定義必須包含返回類型、函數(shù)名稱、形參表格和函數(shù)體。返回值類型默認(rèn)為int類型;C與C++C++對C的擴(kuò)充主要表現(xiàn)在面向?qū)ο蠛头盒途幊虄刹糠郑語言的基礎(chǔ)語法進(jìn)行了完善與添加。C++繼承了C面向過程的特點(diǎn),同時又是面向?qū)ο蟮木幊?,類是它的主要特點(diǎn),在程序執(zhí)行過程中,先由main函數(shù)進(jìn)入,定義一些類,根據(jù)需要執(zhí)行類的成員函數(shù),過程概念被淡化了(主函數(shù)語句還是面向過程),以類驅(qū)動程序運(yùn)行,類抽象化對象,即為面向?qū)ο蟪绦蛟O(shè)計。具有抽象性、封裝性、繼承性及多態(tài)性等。面向?qū)ο蟪绦蛟O(shè)計的特點(diǎn):

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論