构建轻量级的AEP框架
上一篇 / 下一篇 2007-10-17 21:32:14 / 个人分类:自动错误预防(AEP,Automated Error Prevention)
陈能技
*uJ3` E;GE02007-10-1751Testing软件测试网R8s vr/l6y
AEP
什么是AEP?AEP,Automated Error Prevention,自动错误预防,是指通过在整个软件开发周期中自动地预防错误来提高产品质量。AEP通过应用行业最佳实践来防止普遍错误并建立全寿命的错误预防基础。可以把代码标准检查、单元测试、集成测试、压力测试、连接检查、监视等放到软件开发周期中并自动化。51Testing软件测试网T"g{b$e
关于AEP的更多概念和基础理论,可参考以下两篇文章:
&tM[t2[JD{0《我们为什么不多做点预防错误的工作》
3pKn-@|0http://www.51testing.com/?141783/action_viewspace_itemid_64195.html
^.`QUU7e0
《自动错误预防的五大法则》
0tKBt8P,g/K!B#ajL0http://www.51testing.com/?141783/action_viewspace_itemid_64481.html51Testing软件测试网4[KI4I/i egMU0Z`
作为一个起步,我们可以先搭建一个初步的、轻量级的AEP框架。然后再逐步加入其它自动化检查工具来应用其它行业最佳实践。从而逐步建立起完整的、适合项目实际的AEP系统。
%^ec/Gq(yTXp u3ZH0
例如,在我们的项目中,使用.NET和SQLServer数据库构建C/S结果的应用软件。那么首先可以考虑的是加入VS.NET 2005开发工具自带的代码标准检查工具FxCop和SQLBPA。参考我的博客上的两篇文章:51Testing软件测试网4Y#p}&x-j/N4Y0\-h
《VS.NET 2005的代码分析工具》51Testing软件测试网e2W'Y&X-w!D.T
http://www.51testing.com/?141783/action_viewspace_itemid_64245.html51Testing软件测试网(A%W!G%AMlM+}
《SQLServer最佳实践自动检查工具》)。51Testing软件测试网,Z6N&NmyZ
http://www.51testing.com/?141783/action_viewspace_itemid_64473.html51Testing软件测试网S U WEW0BH)eWD%X
FxCop用于检查代码是否满足.NET的编码规范,SQLBPA用于检查SQL Server的表、视图、存储过程等是否满足最佳实践的规范。
UUnC!^z%M%`:J0
利用Jscrīpt脚本搭建每日构建框架
首先利用Jscrīpt脚本建立起一个基本的每日构建框架,这个框架需要包括:51Testing软件测试网)I9i1kH3z+O A
1、 从源代码服务器获取最新代码并编译51Testing软件测试网4MN!YAc1P| }9|mZ#v
2、 调用FxCop对代码进行检查51Testing软件测试网+O Ir*_wyi B
3、 调用BPA对数据库进行检查51Testing软件测试网dqiEV
4、 汇总检查结果并发送给项目组51Testing软件测试网}b_}!sUn X
关于Jscrīpt的脚本使用可参考Windows脚本编程,或访问我的博客的Jscrīpt栏目。51Testing软件测试网ffw6L;[:Kbx m/W
调用FxCopCmd
VS.NET 2005自带的代码检查工具在安装目录可以找到。51Testing软件测试网+P!P$t?*{4C;m%Kw
例如:C:\Program Files\Microsoft Visual Studio 8\Team Tools\Static Analysis Tools\FxCop
8U8K.V-E)k0
加入到每日构建框架中时,需要使用FxCop的命令行工具FxCopCmd。命令行的使用方法可参考如下:
@0V_A9Sc;s0/file:<文件/目录> [缩写: /f:<文件/目录>]要分析的程序集文件51Testing软件测试网pz6j }to a3uD
/rule:<[+|-]文件/目录> [缩写: /r:<[+|-]文件/目录>]包含规则程序集的目录或规则程序集的路径。“+”启用所有规则,“-”禁用所有规则
j$p\Ne2f i@ G,{A0
/ruleid:<[+|-]Category#CheckId> [缩写: /rid:<[+|-]Category#CheckId>]标识规则的Category和CheckId字符串。“+”启用规则,“-”禁用规则
7jKTd%iq0
/out:<文件> [缩写: /o:<文件>]FxCop项目或Xml报告输出文件51Testing软件测试网MQ o%Yvo
/outxsl:<文件> [缩写: /oxsl:<文件>]引用XML报告文件中的指定XSL,/outxsl:none会生成一个不带有XSL样式表的XML报告51Testing软件测试网N MV2b(^E3i
/applyoutxsl [缩写: /axsl]将XSL样式表应用于输出
W&W)uva@@m1}0e0
/project:<文件> [缩写: /p:<文件>]要加载的项目文件51Testing软件测试网C/b \._5r:R
/platform:<目录> [缩写: /plat:<目录>]平台程序集的位置51Testing软件测试网*IcT%SZ7U&L
/directory:<目录> [缩写: /d:<目录>]要搜索程序集依赖项的位置
7BDR8n+xc&z_(l0
/types:<类型列表> [缩写: /t:<类型列表>]仅分析这些类型和成员51Testing软件测试网rB;Vtf2vB;Y
/import:<文件/目录> [缩写: /i:<文件/目录>]导入XML报告或FxCop项目文件
},uz.O3V;S7vx6f0
/summary [缩写: /s]在分析之后显示摘要51Testing软件测试网y,D@zR8it U
/verbose [缩写: /v]在分析期间提供详细输出结果
vm-[:M n3{0
/update [缩写: /u]如果进行了更改,则更新项目文件51Testing软件测试网 ZEZ@ry1Z s1m
/console [缩写: /c]将包括文件和行号信息在内的消息输出到控制台
.WOkr [l0
/consolexsl:<文件> [缩写: /cxsl:<文件>]将指定的XSL应用于控制台输出51Testing软件测试网V7fwJ]*a5k;U
/forceoutput [缩写: /fo]即使在没有发生冲突的情况下,也写入输出XML和项目文件
6b*U [.}#?j0
/dictionary:<文件> [缩写: /dic:<文件>]自定义字典
i2e0N*J0q*R Y0
/quiet [缩写: /q]禁止所有控制台输出,/console或/consolexsl暗示的报告除外51Testing软件测试网8zu0C#os1Ret
/ignoreinvalidtargets [缩写: /iit]在不进行提示的情况下忽略无效的目标文件
5h;J8HQ(U*uO0
/aspnet [缩写: /asp]只分析ASP.NET生成的二进制文件,并对要分析的所有程序集适用App_Code.dll中的模块禁止显示规则
tB,Z7Y8o/Fi1m0
因此一个调用的例子如下所示:
ruChq[\.Q0FxCopCmd /f:”D:\AUT\bin\Debug\aut.exe” /out:”C:\1.txt” /s /rule:+”C:\Program Files\Microsoft Visual Studio 8\Team Tools\Static Analysis Tools\FxCop\Rules\DesignRules.dll” /ruleid:-“Microsoft.Design#CA2210”51Testing软件测试网M`0k#L^.w,ZV
BpaCmd
SQL BPA分SQLServer2000版和SQLServer2005版。加入到每日构建中时,同样需要利用它的命令行工具BpaCmd,可以在安装目录找到,例如:
d} d;|\Y#Lt0C:\Program Files\Microsoft SQL Server Best Practices Analyzer51Testing软件测试网)pnIaB7u:Y
而BpaCmd的调用也比较简单,例如:51Testing软件测试网D+?!RMC
BpaCmd –S 192.168.3.8 –d sqlbpa –E –r TSQLTest51Testing软件测试网"]&|i:U ~Wq
但是前提是已经建立sqlbpa库以及建立了规则检查包。
/?btiRS1cz0
BPACmd的使用方法可参考如下:
(t;{z!l5u6d^\0-REPOSITORY CONNECTION OPTIONS-51Testing软件测试网x)g*qv ?
-S <server name> Specifies the name of the SQL Server instancethat contains the repository.51Testing软件测试网 ~ jCj&atupV
-d <database name> Specifies the name of the repository database.
}L.P"FW#}0-E Use integrated authentication to log on to repository.
ew.qC-YmV&\0-U <username> User name to log on to repository.
{*v^H%\(U4xBg0-P <password> Password to log on to repository.
g'x)s]K4piX-L0
-BEST PRACTICE GROUP OPTIONS-
"vk'Hw#E g|nu&eq2?0-r <best practice group> Executes the specified best practice group.51Testing软件测试网 W0mWX)kF
-MISCELLANEOUS OPTIONS-
zQ7A7M)m,T+@Bv'CU0-q Quiet mode - does not display additional messages.
/r*J MV+A X7l0-l Logs operation of BPA engine to msbpa.log.
}7sUb7Z{SB9|#q0-? Displays usage help.51Testing软件测试网"d\|Bw#q;H7r
Examples:
w/J5qFfg(l.@ld0bpacmd -S MainServer -d sqlbpa -E -r tsql_rules -r upgrade_prep
)ZV6mz6vY%_0
Executes the best practice groups "tsql_rules" and "upgrade_prep"after connecting to the specified repository using integrated authentication.51Testing软件测试网FRML[O#s6P&YQ
结果检查和发送
FxCopCmd和BpaCmd都能把检查结果保存到文件中,因此可以利用Jscrīpt读入文件,分析和汇总结果,形成最终的AEP报告,并发送给项目组所有人。