天天看點

編寫高品質的代碼

C語言基礎

高品質的代碼

簡潔,有效代碼行數,注釋代碼比例(20%),可靠,可測試性(每一個子產品都便于測試),可維護性(代碼便于閱讀),可移植性(改變運作環境,代碼依舊可以運作)

代碼的壞味道

過長的函數(50),過多的函數參數(5),過多的局部變量(5),

重複代碼,資料泥潭(有些資料項,喜歡成群結對),長switch語句,

代碼的重構

函數拆分(單一職責),函數提煉,

代碼注釋是程式設計人員與程式閱讀者之間的橋梁,非常有助于提高代碼的可維護性。代碼的注釋要簡潔明了,而且需要有意義。

過少的注釋,不利于程式的閱讀。

過多的注釋也不太好,注釋過于冗長往往都是因為那段代碼比較糟糕,晦澀難懂。這時候就需要考略重構。

注釋可以分為以下幾種:多行注釋,單行注釋,函數注釋,檔案注釋

函數的編寫原則

命名要有意義,最好具有自解釋功能。

函數功能要單一,長度不可以過長(<50),形式參數不可以過多(<5,可以借助結構體可以解決資料泥潭,可以借助指針減少大資料拷貝),局部變量不可以過多(<10),嵌套深度不可以太深(<5)

功能代碼的編寫原則

條件表達式拆解,合并分支語句

高品質的代碼:

簡潔(易于了解和實作),可維護(易修改),可靠(成功運作的機率),可測試(軟體發現故障并隔離,定位的能力,便于測試設計和執行),高效(盡可能少的占用資源,記憶體,時間),可移植(在原設計的特定環境之外運作) 

可視化标準:

圈複雜度(每一個分之條件是一個複雜度) (1_10)進入函數是1 

有效代碼行數(函數體不要太大,否則可能意味函數功能不單一) 

函數參數個數(減少函數參數,引入結構體,參數過多容易受外部影響,同時增大測試難度) (0,5) 

非結構化語句數量(goto)盡量不使用,影響代碼條理性(0,0) 

嵌套層數(1,4) 

(0,20%)(0,5)(0,5) 

過度耦合(混亂的接口,不恰當的暴露) 

複雜的表達式 

重構手法:拆分函數,重命名函數,提煉函數(if for switch集中的地方是混亂的源泉,一組變量在一個功能内使用), 正确使用臨時變量,命名清晰,用途單一 

合并重複代碼,合并重複的條件判斷(特别是嵌套) 

分解條件式(提煉),合并條件式(相同處理可提煉子產品或函數) 

代碼壞味道:

有效代碼注釋比例(提高可讀性) 

過度的局部變量(意味着大函數) 

函數變量個數(資料依賴不可以多),資料關系複雜,一般控制函數功能即可 

重複代碼(修改不友善),大函數(難了解),過多函數參數,資料泥潭(參數多,代碼重複),長switch語句(邏輯混亂), 

靈活的四大宣言:

個體和互動  優于 流程和工具

工作的軟體詳盡的文檔

客戶合作 合同談判

響應變化 遵循計劃

産品負責人,scrum master,成員

使用者故事:獨立的,可以商讨的,有價值的,可以估計的,合适的小,可測試的 

标準格式:作為……角色,希望系統可以……(目标),以便……(原因)

分解故事:分使用者,分場景

故事需要在一個sprint可以完成,可以加入滿意條件。

作為網站的所有者,我希望能統計廣告的點選次數,以便我能清除廣告收益。

Product backlog 産品需要完成的所有故事

Sprint backlog 一個疊代階段或沖刺需要完成的所有故事,相當于一個小版本

每日站會:總結問題,讨論問題解決方案

story卡片 優先級 

需求編号 

story标題 

較長的描述 

如何驗收 

開發責任人 估計點數 

測試責任人 

轉測試時間 

傳遞時間 

燃盡圖

橫坐标:項目設定總時間

縱坐标:故事數或故事點數或工作量

意義:到第x天燃盡多少個故事或……

兩條線:一條是理論線,一條是實際線。

Source insight3.5 

注冊碼:SI3US-361500-17409

F1幫助文檔

最重要的是搜尋功能:search project     lookup reference     browse project symbols

尋找變量定義,按下ctrl+單擊,<-  和  ->分别代表上一步和下一步

1.DOS下運作:

在DOS下輸入C:\PCLint\Lint-nt E:\main.cpp

回車,檢查結果就出來了。

檢查位于E盤根目錄下的main.cpp檔案,其他檔案類推,輸入“路徑+檔案名”

a、打開SI,選擇Options->Custom Commands->Add...,輸入pclint。

b、在Run輸入c:\lint\lint-nt -u c:\lint\std.lnt c:\lint\env-vc8.lnt %f

c、勾上【Iconic Window】、【Capture Output】、Save Files First 【Parse Links in Output】、【File,then Line】。

d、點選右側的【Menu】,在Menu對應的下拉框選擇【View】,選中<end of menu>,點【Insert】,OK退出。

e、可以添加運作pclint的快捷鍵:打開Options菜單中的“Custom Commands”指令項,點選該對話框中的”keys”,

在彈出的對話框中選中pclint指令,點選”Assign New Key…”菜單,會提示你在鍵盤上按快捷鍵,此時在鍵盤

上同時按下“ctrl、shift和p”鍵,點”OK”,就可以用ctrl+shift+p運作pclint了。

這時就可以使用source insight編譯VS2005相應的工程。

當然,如果想使用pclint內建到si後可以支援其它編譯器,可以重新設定PC-LINT,并生成一份新的std_XXX.lnt

檔案,在配置中使用相應的std_XXX.lnt。 

如果大家想要在vs2005中配置PC-lint9.0版,請參考http://blog.csdn.net/wzx19840423/article/details/6215925cn。

接下來給大家詳細講解在vs2010或者vs2008中配置PC-lint9.0版的步驟。

可以到http://download.csdn.net/detail/zhenliangqiu/3250717下載下傳Gimpel_PC_Lint_9.zip免注冊版,下載下傳完後點選pclint9setup.exe進行安裝,這裡以安裝到C:/lint介紹。安裝完成後勾選I want to run the configuration program now.點選finish進入配置頁面,配置選項依次為:

1、C:/lint(這個是pc lint的安裝目錄),Create a new STD.LNT

2、Microsoft Visual C++ 2008(co-msc90.lnt)

3、32-bit Flat Model(-ms, -si4, -sp4)

4、Active Template Library(ATL),Microsoft Foundation Class Library,Standard Template Library,Windows 32-bit

5、Scott Meyers(Effective C++ More Effective C++ and Effective C++ 3rd Edition),Dan Saks,MISRA 2004

6、Create -i options

7、這裡将vc的包含目錄加進去,我加的是以下兩個

C:\Program Files\Microsoft Visual Studio 10.0\VC\include

C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include

備注:C:\Program Files\Microsoft Visual Studio 10.0是我電腦上vs2010的安裝目錄

7.2 No 不建立新的lnt

8、No

9、(env-vc9.lnt) Microsoft's Visual C++.NET 2010

10、Prepend my PC-lint directory to my PATH(create LSET.BAT)

完成

      配置好pc lint之後,下面就将它內建到vc2010中,打開vc2010--Tools--External Tools,點選Add按鈕Title為pc_lint(這個可以任意命名),Command為 C:/lint/lint-nt.exe(這個為lint-nt的絕對路徑),Arguments為-i"c:/lint" std.lnt env-vc9.lnt "$(ItemDir)$(ItemFileName)$(ItemExt)",Initial directory為$(ItemDir),勾選"Use Output windows",點選OK

接下來大家就會可以利用vs2010-Tools-pc_lint來對目前工程下的檔案進行分析了。

點選Tools--pc_lint就可以對選中項目分析了。

備注:如果出現類似Error 307: Can't open indirect file 'env-vc9.lnt'的錯誤,大家也不用緊張,隻需要到安裝目錄C:\lint下看看有沒有‘env-vc9.lnt'檔案,如果沒有一般在C:\lint\lnt下是一定有的,大家隻需要将該檔案拷貝一份到C:\lint目錄下即可。

-i 指令其實是一個include,-i "c:/lint"意思是将pc lint的安裝目錄包含進來,如果你的安裝目錄不是"c:/lint"的話可能需要修改。std.lnt是配置檔案,你可以在你的安裝目錄下找到,你可以用記事本把它打開看看,就能大緻明白是什麼意思了。另外,env-vc9.lnt的英文解釋是environment parameters for Microsoft's Visual C++ 9.0,翻譯就是為了在vs2008上使用pc-lint的配置檔案,這個檔案對于vs2010也适用。

-i 指明包含路徑

-u 指明使用哪些.lnt檔案

遇到一個問題:

Error 322: Unable to open include file 'stdio.h'

遇到此問題的童鞋可以再vs指令提示工具中輸入

echo %INCLUDE%

出現類似一下參數:

C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include;7

将這些參數複制,重新運作 config程式,配置到pclint路徑中即可。 

可參照文章:http://www.viva64.com/en/a/0033/

觀察檢查輸出結果,如果出現error 900: (Note -- Successful completion, *** messages produced)提示表述檢查順利完成

 在c:\lint\msg.txt中有錯誤碼

繼續閱讀