天天看点

编写高质量的代码

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中有错误码

继续阅读