編寫高質量的代碼

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按鈕Titlepc_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中有錯誤碼

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章