﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-秋阳的软件测试专栏-随笔分类-01 静态测试</title><link>http://www.cnitblog.com/qiuyangzh/category/375.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 15:48:53 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 15:48:53 GMT</pubDate><ttl>60</ttl><item><title>PolySpace－－能够发现Run-Time Error的静态分析工具</title><link>http://www.cnitblog.com/qiuyangzh/archive/2006/01/18/6241.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Wed, 18 Jan 2006 08:53:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2006/01/18/6241.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/6241.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2006/01/18/6241.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/6241.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/6241.html</trackback:ping><description><![CDATA[
		<p>一个好朋友给我介绍了一款他们公司代理的软件测试工具——PolySpace。我看了这款软件的功能说明，觉得非常不错，很有新意。<br /><br />  PolySpace是一款静态分析测试工具，它能对被测代码进行静态扫描，查找出可能存在Run-Time Error的代码段。我觉得这个功能可以说是创新性的。传统的静态分析工具，比如Logiscope，只能帮助使用人员分析程序的流程结构，统计程序的复杂性，或者是审查代码的编码规范性；而传统的Run-Time Error工具，比如著名的BoundChecker，以及Purify之类的工具，只能在运行被测代码的情况下，才能进行Run-Time Error的检查。<br /><br />  PolySpace这个工具结合了传统的静态分析工具和动态Run-Time Error工具二者的特点——测试执行方式是静态的，但能够发现Run-Time的错误。这种方式的最大好处就是——省去了我们制定测试用例的工作。因为对于传统的Run-Time Error工具来讲，只有执行到的代码，才能发现其中是否存在问题，对于没有被执行的代码，工具是无法检测其中是否存在Run-Time Error的，也就是要达到相当的代码覆盖率。但如果使用PolySpace这个工具，就不会有这个问题。这个工具的特点，非常适合在编码阶段对代码进行测试，尤其是核心模块。<br /><br />  当然，我现在已经过了对技术存在幻想和过份依赖的时期。我没有实际操作这款软件，但我猜想这款工具工具会存在如下类似的问题：运行时间会比较慢；定位的准确率不会太高，结果需要人工过滤等等。不过我觉得这仍是一款非常不错的软件（因为它解决了我们工作中的问题）。有合适的场合，我会想到它！<br /><br /></p>
<img src ="http://www.cnitblog.com/qiuyangzh/aggbug/6241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2006-01-18 16:53 <a href="http://www.cnitblog.com/qiuyangzh/archive/2006/01/18/6241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++编码规范</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/973.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:30:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/973.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/973.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/973.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/973.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/973.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1 前言本编码规范针对C++语言。制定本规范的目的：提高代码的健壮性，使代码更安全、可靠；提高代码的可读性，使代码易于查看和维护。本文档分别对C++程序的格式、注释、标识符命名、语句使用、函数、类、程序组织、公共变量等方面做出了要求。规范分为两个级别——规则和建议。规则级的规范要求开发人员必须要遵守，建议级的规范开发人员应尽量遵守。各项目组在用C++语言或基于C++语言的开发工...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/973.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:30 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RuleChecker编码规范全文</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/971.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:27:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/971.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/971.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/971.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/971.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1 前言本文挡详细描述了在Logiscope——Rulechecker中包含的所有编码规范。对每一条编码规范，分别给出了它的名称、规范的内容描述、参数（只针对可设置的规范）、遵守规范的好处以及示例。Rulechecker共包含81条编码规范，其中有30条左右可以对其内容进行定制，对于可定制编码规范的具体定制方法，可参见《RuleChecker可定制规则》。2 Rulechecker规则...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/971.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:27 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RuleChecker可定制编码规范</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/972.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:27:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/972.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/972.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/972.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/972.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1 前言本文挡描述了在Logiscope——Rulechecker规则集中，可定制编码规则的定制方法。对于这些编码规则的解释说明，可参见《RuleChecker编码规范全文》。2 可定制编码规则集Rulechecker规则集中可定制的编码规则共有30条。通过设置，可以使这些规则更好的适应我们的实际要求。下面逐条对可定制编码规则的定制方法进行介绍。2.1 ansi 函数的声明和定义要...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/972.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:27 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Logiscope-Audit函数度量元</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/966.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:25:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/966.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/966.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/966.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/966.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/966.html</trackback:ping><description><![CDATA[<H1 style="TEXT-ALIGN: justify"><A name=_Toc26609697><SPAN lang=EN-US>1 前言</SPAN></A></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">本文挡描述的是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体">Logiscope——Audit中函数作用域常用度量元的具体含义。<SPAN style="COLOR: gray"><?xml:namespace prefix = o /><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">对每个度量元的解释分为以下几部分：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">首先是该度量元的原文名称，后面是该度量元的代号，跟在后面的是<SPAN lang=EN-US>Audit质量模型为该度量元设的参考值（用中括号括起。当然，对于这个范围值，我们可以对它进行修改），再往下就是对该度量元含义的具体解释。</SPAN></SPAN></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc26609698><SPAN lang=EN-US>2函数度量元</SPAN></A></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">下面分别介绍函数作用域中各个度量元</SPAN><SPAN style="FONT-FAMILY: 宋体">的具体含义</SPAN><SPAN style="FONT-FAMILY: 宋体">。注意，下面讨论的所有问题都是站在一个函数的角度上的，这一点对于我们理解这些度量元很重要。</SPAN></P>
<H2><A name=_Toc26609699><SPAN lang=EN-US>2.1 "Cyclomatic Number" : ct_vg <SPAN>&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[ 1<SPAN>&nbsp;&nbsp; </SPAN>,<SPAN>&nbsp; </SPAN>10 ]</SPAN></A><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN></SPAN></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：函数的圈复杂度。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">函数圈复杂度的计算方法为：将函数流程图中各节点（开始和结束结点除外）的引出边的数量减去一后的值相加，最后再在这个和的基础上加一。可见，当一个函数中条件判断的地方越多时，它的</SPAN><SPAN lang=EN-US>ct_vg</SPAN><SPAN style="FONT-FAMILY: 宋体">就会越大。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">如果该值过大，会增大函数的复杂性，影响我们对函数的理解。</SPAN></P>
<H2><A name=_Toc26609700><SPAN lang=EN-US>2.2 "Number of Branches" : ct_bran<SPAN> </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[ 0 ,<SPAN>&nbsp;&nbsp; </SPAN>0 ]</SPAN></A><SPAN lang=EN-US><SPAN>&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN></SPAN></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：函数中非结构化语句的数量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">非结构化语句包括：</SPAN><SPAN lang=EN-US>goto</SPAN><SPAN style="FONT-FAMILY: 宋体">语句、在循环中使用的</SPAN><SPAN lang=EN-US>break</SPAN><SPAN style="FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US>continue</SPAN><SPAN style="FONT-FAMILY: 宋体">语句。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元是为了使程序编写符合结构化的要求。</SPAN></P>
<H2><A name=_Toc26609701><SPAN lang=EN-US>2.3 "Number of Declared Variables" : dc_lvars<SPAN> </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>0<SPAN>&nbsp; </SPAN>,<SPAN>&nbsp;&nbsp; </SPAN>5 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数中定义的变量的数量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">在函数体内部定义的变量的数量。函数中局部变量定义的过多，会增大代码的复杂性，影响对函数的理解。</SPAN></P>
<H2><A name=_Toc26609702><SPAN lang=EN-US>2.4 "Number of parameters" : ic_param <SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>[ 0<SPAN>&nbsp;&nbsp; </SPAN>,<SPAN>&nbsp;&nbsp; </SPAN>5 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数参数的数量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">函数的参数过多，会使函数易于受外部（其他部分的代码）变化的影响，从而影响维护工作。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">函数的参数过多也会增大测试的工作量。</SPAN></P>
<H2><A name=_Toc26609703><SPAN lang=EN-US>2.5 "Number of Direct Calls" : dc_calls<SPAN> </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[ 0 ,<SPAN>&nbsp;&nbsp; </SPAN>5 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数中调用其它函数的数量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">在函数体中调用其它函数的数量，对同一函数的多次调用计为一次。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该值过大，首先是会使函数易于受外部（其他部分的代码）变化的影响，从而增加维护工作的工作量。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其次，该值过大，也会增加阅读程序的人在理解程序上的困难。</SPAN></P>
<H2><A name=_Toc26609704><SPAN lang=EN-US>2.6 "Number of Exits" : ct_exit <SPAN></SPAN><SPAN>&nbsp;&nbsp; </SPAN>[ 0<SPAN>&nbsp; </SPAN>,<SPAN>&nbsp;&nbsp; </SPAN>1]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数出口的数量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">也就是函数体中退出点的数量。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">在一个函数中存在一个以上的出口会增加函数出错的可能性，建议单出口。</SPAN></P>
<H2><A name=_Toc26609705><SPAN lang=EN-US>2.7 "Number of Distinct Uses of External Attributes" : ic_varpe<SPAN> </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[ 0<SPAN> </SPAN>,<SPAN>&nbsp; </SPAN>2 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数中使用其它类的数据成员的数量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">所谓函数中使用的其它类的数据成员的数量，也就是在函数体中对外部类（与该函数所属的类不是同一个类）的数据成员的使用数量，对同一数据成员的多次使用计为一次。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">这个度量元的用意也很好理解，就是为了尽量减少函数与其它类的耦合关系。</SPAN></P>
<H2><A name=_Toc26609706><SPAN lang=EN-US>2.8 "Number of paths" : ct_path<SPAN> </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[ 1<SPAN>&nbsp; </SPAN>,<SPAN>&nbsp;&nbsp; </SPAN>60 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数中执行路径的数量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">函数中执行路径过多，会极大的增大测试的工作量。</SPAN></P>
<H2><A name=_Toc26609707><SPAN lang=EN-US>2.9 "Number of Statement"<SPAN>&nbsp; </SPAN>: lc_stat<SPAN> </SPAN>[<SPAN>&nbsp; </SPAN>1 ,<SPAN>&nbsp; </SPAN>20 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数中的可执行语句数</SPAN><SPAN lang=EN-US>.</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">函数中的可执行语句数过多，意味着函数的功能可能不单一，同时也会增加函数的复杂性。</SPAN></P>
<H2><A name=_Toc26609708><SPAN lang=EN-US>2.10 "Average size of statements"<SPAN>&nbsp;&nbsp;&nbsp; </SPAN>:<SPAN>&nbsp; </SPAN>AVGS<SPAN>&nbsp;&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>1.00<SPAN> </SPAN>,<SPAN>&nbsp;&nbsp; </SPAN>9.00 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：语句平均承载的信息量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元计算在一个函数中，平均每个可执行语句所包含的操作符和操作数的数量。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">AVGS = (N1 + N2) / (lc_stat )</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp; </SPAN>N1 </SPAN><SPAN style="FONT-FAMILY: 宋体">是该函数中的操作符的数量</SPAN><SPAN lang=EN-US>,</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp; </SPAN>N2 </SPAN><SPAN style="FONT-FAMILY: 宋体">是该函数中的操作数的数量</SPAN><SPAN lang=EN-US>,</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp; </SPAN>lc_stat<SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">是函数中可执行语句的数量</SPAN><SPAN lang=EN-US>.</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">如果平均每个可执行语句所包含的操作符和操作数的数量较多时，也就是说当程序语句比较长时，会增大阅读者理解程序的难度。应该将较长的语句分解为几个较短的语句，以此来降低程序的复杂性。</SPAN></P>
<H2><A name=_Toc26609709><SPAN lang=EN-US>2.11 "Vocabulary frequency":<SPAN>&nbsp; </SPAN>VOCF<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>1.00<SPAN>&nbsp;&nbsp; </SPAN>,<SPAN>&nbsp;&nbsp; </SPAN>4.00 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：词汇频率。</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN> </P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">该度量元表示的是在一个函数中，相同的操作符和操作数出现的频率。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">VOCF = (N1+N2) / (n1+n2)</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>N1 </SPAN><SPAN style="FONT-FAMILY: 宋体">是该函数中的操作符的数量，包括重复出现的；</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>N2 </SPAN><SPAN style="FONT-FAMILY: 宋体">是该函数中的操作数的数量，包括重复出现的；</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>n1 </SPAN><SPAN style="FONT-FAMILY: 宋体">是该函数中不同的操作符的数量</SPAN><SPAN lang=EN-US>,</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>n2 </SPAN><SPAN style="FONT-FAMILY: 宋体">是该函数中不同的操作数的数量</SPAN><SPAN lang=EN-US>,</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">当一个函数</SPAN><SPAN lang=EN-US>VOCF</SPAN><SPAN style="FONT-FAMILY: 宋体">的值较高时，说明在这个函数中可能包含重复的或类似的语句。如果确实是这种情况，建议将这些反复使用的语句分离出来，写成一个单独的函数，从而增加了程序的简明、清晰程度，也为以后修改这个函数带来了方便。</SPAN></P>
<H2><A name=_Toc26609710><SPAN lang=EN-US>2.12 "Comments frequency": COMF<SPAN> </SPAN>[<SPAN>&nbsp; </SPAN>0.20<SPAN>&nbsp; </SPAN>， +oo ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数的注释比率。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">函数中的注释块的数量与函数中的可执行语句的数量之比。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">COMF = (lc_bcom + lc_bcob) / (lc_stat )</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>lc_bcom </SPAN><SPAN style="FONT-FAMILY: 宋体">是函数体中注释块的数量</SPAN><SPAN lang=EN-US>,</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>lc_bcob </SPAN><SPAN style="FONT-FAMILY: 宋体">是函数体前注释块的数量（值只能为</SPAN><SPAN lang=EN-US> 0 </SPAN><SPAN style="FONT-FAMILY: 宋体">或</SPAN><SPAN lang=EN-US> 1</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SPAN lang=EN-US>,</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>lc_stat<SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">是函数中可执行语句的数量</SPAN><SPAN lang=EN-US>.</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">这个度量元能反映出程序的开发者是否对程序进行了认真的注释。如果函数的注释写的比较充分，那么在我们进行测试工作和维护工作需要理解程序代码时是非常有用的。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">这个度量元检测的是注释块的数量，而不是注释行的数量，这种注释量的计算方法我认为更科学。</SPAN></P>
<H2><A name=_Toc26609711><SPAN lang=EN-US>2.13 "Number of levels":<SPAN>&nbsp;&nbsp; </SPAN>LEVL = ct_nest + 1<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN></SPAN></A><SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体">[ 1 </SPAN></SPAN><SPAN><SPAN>，</SPAN></SPAN><SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体">4 ]</SPAN></SPAN></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数中具有嵌套的控制结构的最大的嵌套层数再加一。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H3><A name=_Toc20813988></A><A name=_Toc26349497></A><A name=_Toc26609712><SPAN><SPAN><SPAN lang=EN-US>LEVL = ct_nest + 1</SPAN></SPAN></SPAN></A></H3>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US>ct_nest</SPAN><SPAN style="FONT-FAMILY: 宋体">：函数中控制结构嵌套的最大嵌套层数。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">函数中具有嵌套的控制结构的最大的嵌套层数再加一。该值越大，说明函数越复杂，越难于理解。</SPAN></P>
<H2><A name=_Toc26609713><SPAN lang=EN-US>2.14 "Fan In": FAN_IN<SPAN>&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>0<SPAN>&nbsp;&nbsp; </SPAN>，4 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：</SPAN><SPAN style="FONT-FAMILY: 宋体">扇入</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H3><A name=_Toc20813990></A><A name=_Toc26349499></A><A name=_Toc26609714><SPAN><SPAN><SPAN lang=EN-US>FAN_IN = ic_usedp + ic_varpi</SPAN></SPAN></SPAN></A></H3>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ic_usedp </SPAN><SPAN style="FONT-FAMILY: 宋体">是函数参数的个数；</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN>&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ic_varpi </SPAN><SPAN style="FONT-FAMILY: 宋体">是函数对本类中数据成员的使用次数。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">这个度量元反映的是函数需要输入的数据量。</SPAN> <SPAN style="FONT-FAMILY: 宋体">如果函数需要输入的数据过多，那么阅读者对函数进行理解时会变的困难，并且外部变化对函数的影响也会较大。</SPAN></P>
<H2><A name=_Toc26609715><SPAN lang=EN-US>2.15 "Fan Out": FAN_OUT<SPAN> </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>0<SPAN>&nbsp; </SPAN>，<SPAN>&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN>4 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：</SPAN><SPAN style="FONT-FAMILY: 宋体">扇出</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H3><A name=_Toc20813992></A><A name=_Toc26349501></A><A name=_Toc26609716><SPAN><SPAN><SPAN lang=EN-US>FAN_OUT = ic_paradd +ic_varpe</SPAN></SPAN></SPAN></A></H3>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ic_paradd<SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">是传址参数的个数；</SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>ic_varpe<SPAN>&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">是函数对外部类数据成员的使用次数。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">这个度量元反映的是函数的输出数据量。如果函数输出的数据量过多，那么对这个函数进行理解分析时会很困难。同时，函数输出的数据量越大，这样的函数对系统的影响也会越大，所以应该加以限制。</SPAN></P>
<H2><A name=_Toc26609717><SPAN lang=EN-US>2.16 " Number of callers ": dc_calling<SPAN>&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>0<SPAN>&nbsp; </SPAN>， 7 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：</SPAN><SPAN style="FONT-FAMILY: 宋体">被调用次数</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该项度量元表示的是：调用了该函数的函数的个数。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">一个函数，调用它的函数越多，则对该函数的可靠性要求的越高，它一旦发生问题，引发的后果就越严重。系统中这样的函数越多，出现问题的可能性就越大，所以应该加以限制。</SPAN></P>
<H2><A name=_Toc26609718><SPAN lang=EN-US>2.17 "Number of relative call graph levels": cg_levels<SPAN>&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>1<SPAN>&nbsp; </SPAN>， 12 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：调用层次数</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该项度量元表示的是：在该函数的调用关系图中，函数调用关系的层次数。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">比如图</SPAN><SPAN lang=EN-US>2-1</SPAN><SPAN style="FONT-FAMILY: 宋体">的这个的函数调用关系图中，函数</SPAN><SPAN lang=EN-US>Fun2( )</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US>cg_levels</SPAN><SPAN style="FONT-FAMILY: 宋体">的值为</SPAN><SPAN lang=EN-US>3</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN></P>
<DIV style="TEXT-ALIGN: center"><IMG height=235 alt=logiscope80.jpg src="http://www.cnitblog.com/images/cnitblog_com/qiuyangzh/logiscope3/logiscope80.jpg" width=234 border=0><BR><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 黑体">图<SPAN lang=EN-US> 2-1 函数调用关系图<BR></SPAN></SPAN>
<DIV style="TEXT-ALIGN: left">
<H2><A name=_Toc26609719><SPAN lang=EN-US>2.18 "Relative call graph Hierarchical complexity": cg_hiercpx<SPAN>&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>1.0<SPAN>&nbsp; </SPAN>， 5.0 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：每层平均函数个数</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该项度量元表示的是：在该函数的调用关系图中，平均每一层上的函数个数。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">比如图</SPAN><SPAN lang=EN-US>2-1</SPAN><SPAN style="FONT-FAMILY: 宋体">的函数调用关系图中，函数</SPAN><SPAN lang=EN-US>Fun2( )</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US>cg_hiercpx</SPAN><SPAN style="FONT-FAMILY: 宋体">的值为</SPAN><SPAN lang=EN-US>4 / 3 = 1.3</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN></P>
<H2><A name=_Toc26609720><SPAN lang=EN-US>2.19 " Relative call graph Structural complexity ": cg_strucpx<SPAN>&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>0.0<SPAN>&nbsp; </SPAN>， 3.0 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数平均调用数量</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该项度量元表示的是：在函数的调用关系图中，每个函数的平均调用数量。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">比如图</SPAN><SPAN lang=EN-US>2-1</SPAN><SPAN style="FONT-FAMILY: 宋体">的函数调用关系图中，函数</SPAN><SPAN lang=EN-US>Fun2( )</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US>cg_strucpx</SPAN><SPAN style="FONT-FAMILY: 宋体">的值为</SPAN><SPAN lang=EN-US>3 / 4 = 0.75</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN></P>
<H2><A name=_Toc26609721><SPAN lang=EN-US>2.20 "Number of relative call graph call-paths":IND_CALLS<SPAN>&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>1<SPAN>&nbsp; </SPAN>， 30 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：调用路径数量</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该项度量元表示的是：在该函数的调用关系图中，从该函数到每个叶子函数的不同路径数量之和。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">比如图</SPAN><SPAN lang=EN-US>2-1</SPAN><SPAN style="FONT-FAMILY: 宋体">的函数调用关系图中，函数</SPAN><SPAN lang=EN-US>Fun2( )</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US>IND_CALLS</SPAN><SPAN style="FONT-FAMILY: 宋体">的值为</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN></P>
<H2><A name=_Toc26609722><SPAN lang=EN-US>2.21 "Relative call graph System testability":cg_testab<SPAN>&nbsp;&nbsp; </SPAN>[<SPAN>&nbsp; </SPAN>0.0<SPAN>&nbsp; </SPAN>， 1.0 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：函数调用关系的易测性</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">该项度量元表示的是：对该函数的函数调用关系进行测试时的工作量。<BR><BR></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 黑体"><SPAN lang=EN-US></SPAN></SPAN></DIV></DIV><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:25 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Logiscope-Audit系统度量元</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/967.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:24:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/967.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/967.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/967.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/967.html</trackback:ping><description><![CDATA[<H1 style="TEXT-ALIGN: justify"><A name=_Toc26351659><SPAN lang=EN-US style="FONT-FAMILY: 黑体">1 前言</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><?xml:namespace prefix = o /><o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">本文挡描述的是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体">Logiscope——Audit中常用的系统度量元的具体含义。<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">对每个度量元的解释分为以下几部分：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">首先是该度量元的原文名称，后面是该度量元的代号，跟在后面的是<SPAN lang=EN-US>Audit质量模型为该度量元设的参考值（用中括号括起。对于这个范围值，我们可以对它进行修改），再往下就是对该度量元含义的具体解释。</SPAN></SPAN></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc26351660><SPAN lang=EN-US style="FONT-FAMILY: 黑体">2系统度量元</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">下面介绍系统作用域中各个度量元</SPAN><SPAN style="FONT-FAMILY: 宋体">的具体含义</SPAN><SPAN style="FONT-FAMILY: 宋体">。注意，下面讨论的所有问题都是站在整个系统（或子系统）的角度上的，这一点对于我们理解这些度量元很重要。</SPAN></P>
<H2><A name=_Toc26351661><SPAN lang=EN-US>2.1 "Coupling Factor" : ap_cof<SPAN>&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[0.03 ,<SPAN>&nbsp;&nbsp; </SPAN>0.18]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：类耦合因素。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算方法为：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">类的总数</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US>ap_cof = </SPAN><SPAN style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体">（</SPAN><SPAN style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体">∑</SPAN><SPAN style="FONT-SIZE: 18pt"> </SPAN><SPAN lang=EN-US style="FONT-SIZE: 16pt">C</SPAN><B><SPAN lang=EN-US style="FONT-SIZE: 12pt">i</SPAN></B><SPAN style="FONT-FAMILY: 宋体">与其他的类发生耦合关系的数量</SPAN><SPAN style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体">）</SPAN><B><SPAN lang=EN-US style="FONT-SIZE: 16pt">/ </SPAN></B><SPAN style="FONT-FAMILY: 宋体">类的总数</SPAN><SPAN lang=EN-US>*</SPAN><SPAN style="FONT-FAMILY: 宋体">（类的总数</SPAN> <SPAN style="FONT-FAMILY: 宋体">—</SPAN><SPAN lang=EN-US> 1</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 18pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">i = 1<o:p></o:p></SPAN></P>
<P class=MsoNormal><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">( 注：Ci表示第i个类 )<BR></SPAN></B></P>
<P class=MsoNormal></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">当某一个类有以下情形之一时，该类与其他类的耦合关系的数量加一：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1 </SPAN><SPAN style="FONT-FAMILY: 宋体">在该类的类函数中调用了另一个类的成员函数。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2 </SPAN><SPAN style="FONT-FAMILY: 宋体">该类通过友员的方法调用另一个类中的可见或不可见的函数。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>3 </SPAN><SPAN style="FONT-FAMILY: 宋体">在该类中调用了另一个类的构造</SPAN><SPAN lang=EN-US>/</SPAN><SPAN style="FONT-FAMILY: 宋体">析构函数。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>4 </SPAN><SPAN style="FONT-FAMILY: 宋体">该类中将另一个类作为数据成员或作为类函数中的参数。</SPAN></P>
<H2><A name=_Toc26351662><SPAN lang=EN-US>2.2 "Method Inheritance Factor" : ap_mif<SPAN>&nbsp; </SPAN>[ 0.6<SPAN> </SPAN>,<SPAN>&nbsp;&nbsp; </SPAN>0.8]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：类函数继承的比率。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：该度量元是一个比值。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">分子为：在系统所有类的成员函数中，由父类继承来的成员函数的数量总和。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">分母为：系统所有类的成员函数的总和（包括自己定义的和从父类继承而来的）。</SPAN></P>
<H2><A name=_Toc26351663><SPAN lang=EN-US>2.3 "Attribute Inheritance Factor" : ap_aif<SPAN>&nbsp; </SPAN>[0.3 ,<SPAN>&nbsp; </SPAN>0.6]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：类数据成员继承的比率。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US><SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">该度量元是一个比值。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">分子为：在系统所有类的数据成员中，由父类继承来的数据成员的数量总和。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">分母为：系统所有类的数据成员的总和（包括自己定义的和从父类继承而来的）。</SPAN></P>
<H2><A name=_Toc26351664><SPAN lang=EN-US>2.4 "Polymorphism Factor" : ap_pof<SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>[ 0.3<SPAN> </SPAN>,<SPAN>&nbsp;&nbsp; </SPAN>1.0 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：类的多态性因素。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：该度量元是一个比值。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">分子为：在系统所有类的成员函数中，重载的函数的数量总和。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">分母为：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">系统中类的总数</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 54pt"><SPAN style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体">∑（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 16pt">C</SPAN><B><SPAN lang=EN-US style="FONT-SIZE: 12pt">i</SPAN></B><SPAN style="FONT-FAMILY: 宋体">中未被重载的成员函数的数量</SPAN><SPAN lang=EN-US>* </SPAN><SPAN lang=EN-US style="FONT-SIZE: 16pt">C</SPAN><B><SPAN lang=EN-US style="FONT-SIZE: 12pt">i</SPAN></B><SPAN style="FONT-FAMILY: 宋体">子类的个数</SPAN><SPAN style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体">）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 18pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">i = 1<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 42.05pt"><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">( 注：Ci表示第i个类 )<o:p></o:p></SPAN></B></P>
<H2><A name=_Toc26351665><SPAN lang=EN-US>2.5<SPAN>&nbsp; </SPAN>"Attribute Hiding Factor" : ap_ahf<SPAN> </SPAN>[0.7<SPAN> </SPAN>1.0 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：类对其数据成员的保护程度。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：该度量元是一个比值。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">分子为：在系统所有类的数据成员中，属于</SPAN><SPAN lang=EN-US>Private</SPAN><SPAN style="FONT-FAMILY: 宋体">型数据成员的总数。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">分母为：系统所有类的数据成员的总和。</SPAN></P>
<H2 style="MARGIN-LEFT: 70pt; TEXT-INDENT: -70pt"><A name=_Toc26351666><SPAN lang=EN-US>2.6 "Average coupling between objects": AVG_CBO<SPAN>&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>[0.0 , 10.0 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：系统中类耦合的平均值。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">计算公式为：</SPAN></P>
<H3><A name=_Toc26351667><SPAN lang=EN-US>AVG_CBO = ap_cbo / ap_clas</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US>ap_cbo </SPAN><SPAN style="FONT-FAMILY: 宋体">的值由以下两部分组成：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">在一个类的成员函数中调用不属于该类的函数，在系统中，这种情况出现一次，</SPAN><SPAN lang=EN-US>ap_cbo</SPAN><SPAN style="FONT-FAMILY: 宋体">的值加一。</SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 63pt; TEXT-INDENT: -63pt"><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2</SPAN><SPAN style="FONT-FAMILY: 宋体">类中类类型数据成员的数量。在系统中，这种情况出现一次，</SPAN><SPAN lang=EN-US>ap_cbo</SPAN><SPAN style="FONT-FAMILY: 宋体">的值加一。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ap_clas</SPAN><SPAN style="FONT-FAMILY: 宋体">：系统中类的数量。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">如果该值过高，则说明系统中类与类之间的耦合较强，这会使对系统进行更改工作时变的非常困难。</SPAN></P>
<H2><A name=_Toc26351668><SPAN lang=EN-US>2.7 "Number of Levels in the Inheritance Graph" : ap_inhg_levl<SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>[ 1 ,<SPAN>&nbsp; </SPAN>4 ]</SPAN></SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：<SPAN>类继承图的深度。</SPAN></SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：在系统中所有的<SPAN>类继承图中，最大继承层次的数量。</SPAN></SPAN><I><SPAN lang=EN-US><o:p></o:p></SPAN></I></P>
<H2><A name=_Toc26351669><SPAN lang=EN-US>2.8 "Method Hiding Factor" : ap_mhf <SPAN></SPAN><SPAN>[ 0.1 ， 0.4 ]</SPAN></SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：<SPAN>类成员函数的私有情况。</SPAN></SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">该度量元</SPAN><SPAN style="FONT-FAMILY: 宋体">的计算公式为：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类总数</SPAN><SPAN> </SPAN><SPAN style="FONT-FAMILY: 宋体">类</SPAN><SPAN lang=EN-US>i</SPAN><SPAN style="FONT-FAMILY: 宋体">中函数个数</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>ap_mhf =</SPAN></B><B><SPAN style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体">（</SPAN></B><B><SPAN style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">∑ </SPAN></B><B><SPAN lang=EN-US style="FONT-SIZE: 15pt">[ </SPAN></B><B><SPAN style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">∑（<SPAN lang=EN-US> 1 – V( m ) ）]）/ </SPAN></SPAN></B><B><SPAN style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体">（</SPAN></B><SPAN style="FONT-FAMILY: 宋体">系统中<SPAN>类成员函数数量的总和</SPAN></SPAN><B><SPAN style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体">）</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </SPAN>i = 1<SPAN>&nbsp; </SPAN>m=1</SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体">V( m )的值为：<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>当该函数为 public型时，V( m ) = 1<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>当该函数为 private型时，V( m ) = 0<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>当该函数为 protected型时，V( m ) = ( 由该类派生的类的个数 ) </SPAN><B><SPAN lang=EN-US style="FONT-FAMILY: 宋体">/</SPAN></B><SPAN style="FONT-FAMILY: 宋体">（类总数 <SPAN lang=EN-US>– 1 ）<o:p></o:p></SPAN></SPAN></P>
<H2><A name=_Toc26351670><SPAN lang=EN-US>2.9 "Hierarchical Complexity of the Inheritance Graph" : ap_inhg_cpx <SPAN></SPAN><SPAN>&nbsp;&nbsp; </SPAN><SPAN>[ 1.0 ,<SPAN>&nbsp; </SPAN>2.0 ]</SPAN></SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：类<SPAN>继承图的层次复杂性。</SPAN></SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">它的计算公式为：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>ap_inhg_cpx == SUM( N * I )</SPAN></B><B><SPAN lang=EN-US> / </SPAN><SPAN lang=EN-US>SUM( N )<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><B><SPAN lang=EN-US style="FONT-FAMILY: 宋体">SUM</SPAN></B><SPAN style="FONT-FAMILY: 宋体">表示取和，</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B>I</B></SPAN><SPAN style="FONT-FAMILY: 宋体">为类继承图中的层次序号（</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">，</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体">，</SPAN><SPAN lang=EN-US>3…</SPAN><SPAN style="FONT-FAMILY: 宋体">），</SPAN><B><SPAN lang=EN-US>N</SPAN></B><SPAN lang=EN-US> </SPAN><SPAN style="FONT-FAMILY: 宋体">为继承图中第</SPAN><B><SPAN lang=EN-US>I</SPAN></B><SPAN style="FONT-FAMILY: 宋体">层中的结点个数。例如下面这样的一个继承关系：</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<DIV style="TEXT-ALIGN: center"><SPAN lang=EN-US>&nbsp;<IMG height=201 alt=logiscope81.jpg src="http://www.cnitblog.com/images/cnitblog_com/qiuyangzh/logiscope3/logiscope81.jpg" width=298 border=0></SPAN></DIV>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">则</SPAN><SPAN> <B><SPAN lang=EN-US>ap_inhg_cpx = </SPAN></B></SPAN><B><SPAN style="FONT-FAMILY: 宋体">（</SPAN><SPAN lang=EN-US> 1* 1 + 2*3 + 3*1 </SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">）</SPAN></B><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">/</SPAN><SPAN lang=EN-US> </SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">（</SPAN><SPAN lang=EN-US>1 +<SPAN>&nbsp; </SPAN>3 <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>1 </SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SPAN lang=EN-US>= 2.0</SPAN></B><SPAN style="FONT-FAMILY: 宋体">。由计算公式可以看出，多继承很影响该度量元的得分，所以尽量避免多重继承。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元是类继承关系的图形结构的表示，它的目的是测量类继承关系的复杂性。如果改值大于二，则表明类的继承关系过于复杂。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<H2><A name=_Toc26351671><SPAN lang=EN-US>2.10 "Ratio of repeated inheritances in the application": URI_Ratio <SPAN>&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN><SPAN>[ 0.0 ,<SPAN>&nbsp; </SPAN>10.0 ]</SPAN></SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：<SPAN>重复继承的类的数量占系统中类继承关系数量的比率。</SPAN></SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：<SPAN>重复继承的类的数量占系统中类继承关系数量的比率。</SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H3><A name=_Toc20815391></A><A name=_Toc26351672><SPAN><SPAN lang=EN-US style="FONT-FAMILY: 'Times New Roman'">URI_Ratio = (ap_inhg_uri * 100) / ap_inhg_edge</SPAN></SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 'Times New Roman'"><o:p></o:p></SPAN></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US>ap_inhg_uri </SPAN><SPAN style="FONT-FAMILY: 宋体">：系统中重复继承的“类对”的数量。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ap_inhg_edge</SPAN><SPAN style="FONT-FAMILY: 宋体">：系统中类的继承关系图中边的数量。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">那么，何为重复继承呢？重复继承指某一个类对同一个类继承两次。下面举一个例子。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">比如：</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 147pt"><SPAN lang=EN-US><IMG height=212 alt=logiscope82.jpg src="http://www.cnitblog.com/images/cnitblog_com/qiuyangzh/logiscope3/logiscope82.jpg" width=367 border=0><BR>&nbsp;<BR></SPAN><SPAN style="FONT-FAMILY: 宋体">在这个例子中</SPAN><SPAN lang=EN-US>, </SPAN><SPAN style="FONT-FAMILY: 宋体">类</SPAN><SPAN lang=EN-US>E</SPAN><SPAN style="FONT-FAMILY: 宋体">通过类对</SPAN><SPAN lang=EN-US> (B,C)</SPAN><SPAN style="FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US>(C,D)</SPAN><SPAN style="FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US>(B,D)</SPAN><SPAN style="FONT-FAMILY: 宋体">对类</SPAN><SPAN lang=EN-US>A</SPAN><SPAN style="FONT-FAMILY: 宋体">重复继承。则</SPAN><SPAN lang=EN-US>ap_inhg_uri</SPAN><SPAN style="FONT-FAMILY: 宋体">的值为</SPAN><SPAN lang=EN-US>3</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US>ap_inhg_edge</SPAN><SPAN style="FONT-FAMILY: 宋体">的值为</SPAN><SPAN lang=EN-US>6</SPAN><SPAN style="FONT-FAMILY: 宋体">。所以</SPAN><SPAN lang=EN-US>URI_Ratio = (3 * 100) / 6 = 50.0<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">过多的重复继承会导致程序变的复杂，还可能发生函数命名冲突（</SPAN><SPAN> </SPAN><SPAN style="FONT-FAMILY: 宋体">类</SPAN><SPAN lang=EN-US>E</SPAN><SPAN style="FONT-FAMILY: 宋体">中的函数就可能会有命名冲突）。所以在组织程序时，提倡单继承，避免使用多继承类。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<H2><A name=_Toc26351673><SPAN lang=EN-US>2.11 "Percentage of non-member functions": NMM_Ratio </SPAN></A><A name=_Toc529678262><SPAN><SPAN>&nbsp;&nbsp; </SPAN><SPAN lang=EN-US>[ 0.0 ,<SPAN>&nbsp; </SPAN>10.0 ]</SPAN></SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：<SPAN>独立于类的函数的比率。</SPAN></SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">系统中非成员函数（独立于类的函数）占系统中函数总数的比率。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<P class=MsoToc1><SPAN lang=EN-US>NMM_Ratio =( ( ap_func - ap_nmm ) <SPAN>&nbsp;</SPAN>/ <SPAN>&nbsp;</SPAN>ap_func) * 100<SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US>ap_func</SPAN><SPAN style="FONT-FAMILY: 宋体">：系统中总的函数数量（包括游离于类之外的全局函数）。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ap_nmm </SPAN><SPAN style="FONT-FAMILY: 宋体">：系统中各个类的成员函数的数量之和。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">如果该度量元的值过大的话，说明该程序设计不符合面向对象的思想。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<H2><A name=_Toc26351674><SPAN lang=EN-US>2.12<SPAN>&nbsp; </SPAN>"Average of the VG of the application's functions":<SPAN>&nbsp; </SPAN>AVG_VG <SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>[ 1.0 ,<SPAN>&nbsp; </SPAN>5.0 ]</SPAN></SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：<SPAN>系统中每个函数的平均圈复杂度。</SPAN></SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>AVG_VG = ap_vg / ap_func<SPAN><o:p></o:p></SPAN></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US>ap_vg<SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">：系统中各函数的圈复杂度的总和（关于函数的圈复杂度的计算方法请参见〈〈</SPAN><SPAN lang=EN-US>Logiscope</SPAN><SPAN style="FONT-FAMILY: 宋体">函数度量元〉〉文挡）。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ap_func</SPAN><SPAN style="FONT-FAMILY: 宋体">：系统中函数的数量（包括成员函数和非成员函数）</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">如果该值过高，则说明系统中有大量函数的圈复杂度的值过高，也就是说系统中有大量过于复杂的函数。由于函数的复杂性过高，对于系统的维护工作是很不利的。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<H2><A name=_Toc26351675><SPAN lang=EN-US>2.13<SPAN>&nbsp; </SPAN>"<SPAN> Ratio of recursive edges on the call graph</SPAN> ":<SPAN style="COLOR: red"><SPAN>&nbsp; </SPAN></SPAN><SPAN>RECU_Ratio</SPAN> <SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>[ 0.0 ,<SPAN>&nbsp; </SPAN>5.0 ]</SPAN></SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：</SPAN><SPAN> </SPAN><SPAN style="FONT-FAMILY: 宋体">递归调用的百分比。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H3><A name=_Toc20815395></A><A name=_Toc26351676><SPAN><SPAN lang=EN-US style="FONT-FAMILY: 'Times New Roman'">RECU_Ratio = (ap_cg_cycle * 100) / ap_cg_edge</SPAN></SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 'Times New Roman'"><o:p></o:p></SPAN></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US>ap_cg_cycle<SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN style="FONT-FAMILY: 宋体">函数调用流程图中递归调用的数量<SPAN>。</SPAN></SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>ap_cg_edge<SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN style="FONT-FAMILY: 宋体">函数调用流程图中边的数量<SPAN>。</SPAN></SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<H2><A name=_Toc26351677><SPAN lang=EN-US>2.14<SPAN>&nbsp; </SPAN>" Number of Levels in the Call Graph ":<SPAN>&nbsp; </SPAN>ap_cg_levl <SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>[ 2 ,<SPAN>&nbsp; </SPAN>9 ]</SPAN></SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元名称：</SPAN><SPAN> </SPAN><SPAN style="FONT-FAMILY: 宋体">函数调用流程图的最大层次数。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">在系统所有的函数调用流程图中，最大的层次数。<BR></SPAN></P>
<P class=MsoNormal><BR><SPAN style="FONT-FAMILY: 宋体"></SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal><BR><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></B></P><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:24 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Logiscope-Audit类度量元</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/969.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:24:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/969.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/969.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/969.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/969.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/969.html</trackback:ping><description><![CDATA[<H1 style="TEXT-ALIGN: justify"><A name=_Toc26352652><SPAN lang=EN-US style="FONT-FAMILY: 黑体">1 前言</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><?xml:namespace prefix = o /><o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">本文挡描述的是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体">Logiscope——Audit中常用的类度量元的具体含义。<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">对每个度量元的解释分为以下几部分：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">首先是该度量元的原文名称，后面是该度量元的代号，跟在后面的是<SPAN lang=EN-US>Audit质量模型为该度量元设的参考值（用中括号括起。当然，对于这个范围值，我们可以对它进行修改），再往下就是对该度量元含义的具体解释。</SPAN></SPAN></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc26352653><SPAN lang=EN-US style="FONT-FAMILY: 黑体">2类度量元</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">下面分别介绍类作用域中中各个度量元</SPAN><SPAN style="FONT-FAMILY: 宋体">的具体含义</SPAN><SPAN style="FONT-FAMILY: 宋体">，注意，下面讨论的所有问题都是站在一个类的角度上的，这一点对于我们理解这些度量元很重要。</SPAN></P>
<H2><A name=_Toc26352654><SPAN lang=EN-US>2.1 "Class Comments Frequency": COMFclass<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>[ 0.2,<SPAN>&nbsp; </SPAN>+oo ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：类注释频度</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元表示类中注释的频度。所谓类的注释，只限于类定义的中的注释，不包括类实现中的注释。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<P class=MsoNormal><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">COMFclass = <o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">(cl_bcom + cl_bcob) / (cl_func_publ + cl_func_prot + cl_data_prot + cl_data_publ)<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-FAMILY: 黑体">cl_bcom</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类前的注释数量（只能为</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">或</SPAN><SPAN lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-FAMILY: 黑体">cl_bcob</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类定义中的注释数量</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-FAMILY: 黑体">cl_func_publ</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">成员函数的数量</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-FAMILY: 黑体">cl_func_prot</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>protected</SPAN><SPAN style="FONT-FAMILY: 宋体">成员函数的数量</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-FAMILY: 黑体">cl_data_prot</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>protected</SPAN><SPAN style="FONT-FAMILY: 宋体">数据成员的数量</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-FAMILY: 黑体">cl_data_publ</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">数据成员的数量</SPAN></P><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">类中每一个对外部可用的成员函数和数据成员，都应该加以注释，从而方便于类的使用者。<BR></SPAN>
<H2><A name=_Toc26352655><B><SPAN lang=EN-US>2.2</SPAN></B><SPAN lang=EN-US> "Fan out value of a class":<SPAN>&nbsp;&nbsp; </SPAN>FAN_OUTclass <SPAN>&nbsp;&nbsp;</SPAN>[ 0,<SPAN>&nbsp; </SPAN>20 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：</SPAN><SPAN style="FONT-FAMILY: 宋体">类的扇出值。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H3><A name=_Toc26350517></A><A name=_Toc26352656><SPAN><SPAN lang=EN-US>FAN_OUTclass = cl_data_prot + cl_data_publ +cl_usedp + cl_data_vare</SPAN></SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US>cl_data_prot</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN> <SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>protected</SPAN><SPAN style="FONT-FAMILY: 宋体">数据成员的数量之和，</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_data_publ</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN> <SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">数据成员的数量之和</SPAN><SPAN lang=EN-US>,</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_usedp</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类函数所使用的参数的数量之和，</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 52.5pt"><SPAN lang=EN-US>cl_data_vare<SPAN>&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类函数中使用的外部类的数据成员的数量之和。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">这个度量元反映了类对外的数据输出量，其值越大，就说明这个类对整个系统的影响越大。</SPAN></P>
<H2><A name=_Toc26352657><B><SPAN lang=EN-US>2.3</SPAN></B><SPAN lang=EN-US> "Fan in of a class":<SPAN>&nbsp;&nbsp; </SPAN>FAN_INclass <SPAN>&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[ 0,<SPAN>&nbsp; </SPAN>15 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：</SPAN><SPAN style="FONT-FAMILY: 宋体">类的扇入值。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H3><A name=_Toc26350519></A><A name=_Toc26352658><SPAN><SPAN lang=EN-US>FAN_INclass = cl_data_prot + cl_data_publ + cl_usedp + cl_data_vari</SPAN></SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN lang=EN-US>cl_data_prot</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN> <SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>protected</SPAN><SPAN style="FONT-FAMILY: 宋体">数据成员的数量，</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_data_publ</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN> <SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">数据成员的数量</SPAN><SPAN lang=EN-US>,</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_usedp</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类函数所使用的参数的数量之和，</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN lang=EN-US>cl_data_vari</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN> <SPAN style="FONT-FAMILY: 宋体">类函数中使用本类的属性的次数之和</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">这个度量元反映了类通过其数据成员和成员函数参数而引进的数据输入量，其值越大，该类日后需要频繁修改的可能性就越大。</SPAN></P>
<H2><A name=_Toc26352659><B><SPAN lang=EN-US>2.4</SPAN></B><SPAN lang=EN-US> "Number of Dependent Methods" : cl_dep_meth <SPAN>&nbsp;</SPAN>[0,<SPAN>&nbsp; </SPAN>6 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：类对其他模块的依赖性。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元表示，在一个类中，要依赖于本类之外的其他模块才能实现功能的类函数的个数。符合这样的条件的函数包括：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN lang=EN-US>1 </SPAN><SPAN style="FONT-FAMILY: 宋体">在该函数中调用了其它类的类函数。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp; </SPAN>2 </SPAN><SPAN style="FONT-FAMILY: 宋体">在该函数中使用了其它类的数据成员。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp; </SPAN>3 </SPAN><SPAN style="FONT-FAMILY: 宋体">在该函数的参数中有其它类的类类型的参数。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp; </SPAN>4 </SPAN><SPAN style="FONT-FAMILY: 宋体">在该函数中有一个其它类的类类型的变量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">该度量元的目的是控制类与类之间的耦合程度。</SPAN></P>
<H2><A name=_Toc26352660><B><SPAN lang=EN-US>2.5</SPAN></B><SPAN lang=EN-US> "Number of Base Classes" : in_bases<SPAN> </SPAN><SPAN>&nbsp;&nbsp; </SPAN>[ 0,<SPAN>&nbsp; </SPAN>3 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：基类的数量</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">该类基类的数量，基类包括其类继承图中所有的父类。当</SPAN><SPAN lang=EN-US>MFC</SPAN><SPAN style="FONT-FAMILY: 宋体">类库中的类作为父类时，则该</SPAN><SPAN lang=EN-US>MFC</SPAN><SPAN style="FONT-FAMILY: 宋体">类的基类的数量不再计入其中。在下图中，</SPAN><SPAN lang=EN-US>class 4</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US>in_bases</SPAN><SPAN style="FONT-FAMILY: 宋体">为</SPAN><SPAN lang=EN-US>4</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN></P>
<DIV style="TEXT-ALIGN: center"><IMG height=358 alt=logiscope83.jpg src="http://www.cnitblog.com/images/cnitblog_com/qiuyangzh/logiscope3/logiscope83.jpg" width=398 border=0><BR>
<DIV style="TEXT-ALIGN: left">
<H2><A name=_Toc26352661><B><SPAN lang=EN-US>2.6</SPAN></B><SPAN lang=EN-US> "Weighted Methods Per Class" : cl_wmc<SPAN>&nbsp; </SPAN>[ 0,<SPAN>&nbsp;&nbsp; </SPAN>25 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：类的圈复杂度。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">类中各个成员函数的圈复杂度的总和<SPAN>（关于函数的圈复杂度的计算方法请参见〈〈</SPAN></SPAN><SPAN lang=EN-US>Logiscope</SPAN><SPAN style="FONT-FAMILY: 宋体">函数度量元〉〉文挡）。</SPAN></P>
<H2><A name=_Toc26352662><B><SPAN lang=EN-US>2.7</SPAN></B><SPAN lang=EN-US> "Specializability":SPECIAL<SPAN> </SPAN>[ 0,<SPAN>&nbsp; </SPAN>25 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：类功能的专一性。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<P class=MsoNormal><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">SPECIAL = <SPAN>&nbsp;</SPAN><o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体">2 * ( cl_data_publ + cl_data_prot ) <SPAN>&nbsp;</SPAN>+<A name=_Toc529676269><SPAN>&nbsp; </SPAN>cl_func_publ + cl_func_prot +</A> <A name=_Toc529676270>10 *in_bases </A></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US>cl_data_publ</SPAN><SPAN style="FONT-FAMILY: 宋体">：类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">型的数据成员的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_data_prot</SPAN><SPAN style="FONT-FAMILY: 宋体">：类中</SPAN><SPAN lang=EN-US>protected</SPAN><SPAN style="FONT-FAMILY: 宋体">型的数据成员的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_func_publ</SPAN><SPAN style="FONT-FAMILY: 宋体">：类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">型的成员函数的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_func_prot<SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>protected</SPAN><SPAN style="FONT-FAMILY: 宋体">型的成员函数的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>in_bases</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">该类的基类的数量（包括直接基类的基类）。</SPAN></P>
<H2><A name=_Toc26352663><B><SPAN lang=EN-US>2.8</SPAN></B><SPAN lang=EN-US> "Usability": USABLE<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>[ 0,<SPAN>&nbsp; </SPAN>10 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：类的易用性。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H3><A name=_Toc26350525></A><A name=_Toc26352664><SPAN><SPAN lang=EN-US>USABLE = (2 * cl_data_publ) + cl_func_publ</SPAN></SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN lang=EN-US>cl_data_publ</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">型的数据成员的数量</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN lang=EN-US>cl_func_publ</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">型的成员函数的数量</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN style="FONT-FAMILY: 宋体">该度量元表示了类对外的接口情况，类对外的接口越多，掌握、使用这个类就越困难。</SPAN></P>
<H2><A name=_Toc26352665><B><SPAN lang=EN-US>2.9</SPAN></B><SPAN lang=EN-US> "Encapsulation rules":<SPAN>&nbsp;&nbsp; </SPAN>ENCAP<SPAN> </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>[ 0,<SPAN>&nbsp; </SPAN>5 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：类的封装性。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H3><A name=_Toc26350527></A><A name=_Toc26352666><SPAN><SPAN lang=EN-US>ENCAP = cl_data_publ + cl_data_vare</SPAN></SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN><SPAN lang=EN-US>cl_data_publ</SPAN><SPAN style="FONT-FAMILY: 宋体">：类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">型的数据成员的数量</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_data_vare</SPAN><SPAN style="FONT-FAMILY: 宋体">：在类成员函数中使用的外部类的数据成员的次数之和</SPAN></P>
<H2><A name=_Toc26352667><B><SPAN lang=EN-US>2.10</SPAN></B><SPAN lang=EN-US> "Number of Direct Users Classes" : cu_cdusers <SPAN></SPAN>[<SPAN>&nbsp; </SPAN>0<SPAN>&nbsp; </SPAN>, <SPAN>&nbsp;&nbsp; </SPAN>4<SPAN>&nbsp; </SPAN>]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：被其他类使用的次数。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该类被其他类使用的次数</SPAN><SPAN lang=EN-US> (</SPAN><SPAN style="FONT-FAMILY: 宋体">被同一个类多次使用计为一次</SPAN><SPAN lang=EN-US>).</SPAN></P>
<H2><A name=_Toc26352668><B><SPAN lang=EN-US>2.11</SPAN></B><SPAN lang=EN-US> "Class Coupling" : cl_cobc <SPAN></SPAN><SPAN>&nbsp;&nbsp; </SPAN>[ 0,<SPAN>&nbsp; </SPAN>12 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：类耦合</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的值，包括以下几种情况之和：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>1 </SPAN><SPAN style="FONT-FAMILY: 宋体">该类直接基类的数量</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>2 </SPAN><SPAN style="FONT-FAMILY: 宋体">该类中类类型的数据成员的数量</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>3 </SPAN><SPAN style="FONT-FAMILY: 宋体">调用了静态成员函数的成员函数的数量的二倍。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>4</SPAN><SPAN style="FONT-FAMILY: 宋体">有类类型参数的类成员函数的数量的二倍。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>5</SPAN><SPAN style="FONT-FAMILY: 宋体">有类类型变量的类函数数量的三倍。</SPAN></P>
<H2><A name=_Toc26352669><B><SPAN lang=EN-US>2.12</SPAN></B><SPAN lang=EN-US> "Number of Children" : in_noc<SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>[ 0,<SPAN>&nbsp; </SPAN>2 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：派生类数量。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：从该类派生的类的数量。只计直接派生类的数量，间接派生不算在内。</SPAN></P>
<H2><A name=_Toc26352670><B><SPAN lang=EN-US>2.13</SPAN></B><SPAN lang=EN-US> "Rate of class autonomy ": AUTONOM<SPAN>&nbsp; </SPAN>[30.0,<SPAN>&nbsp; </SPAN>100.0 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：类自治的程度。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">该度量元的计算方法为：与其它的类没有牵扯关系的类函数和类数据成员的数量之和，再</SPAN><SPAN style="FONT-FAMILY: 宋体">除以</SPAN><SPAN style="FONT-FAMILY: 宋体">类函数和类数据成员的数量之和的百分比<B>。</B></SPAN><B><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<H4><SPAN lang=EN-US>AUTONOM = </SPAN></H4>
<P class=MsoBodyText><SPAN lang=EN-US><SPAN>&nbsp;</SPAN><SPAN>&nbsp;</SPAN>100 * ((cl_func_priv + cl_func_prot + cl_func_publ - cl_dep_meth) +</SPAN></P>
<P class=MsoBodyText><SPAN lang=EN-US><SPAN>&nbsp;</SPAN><SPAN>&nbsp;</SPAN>(cl_data_prot + cl_data_publ + cl_data_priv - cl_data_class)) <SPAN>&nbsp;</SPAN>/ </SPAN></P>
<P class=MsoBodyText style="MARGIN-LEFT: 10.55pt; TEXT-INDENT: -10.55pt"><SPAN lang=EN-US><SPAN>&nbsp; </SPAN>(cl_func_priv + cl_func_prot + cl_func_publ + cl_data_priv + cl_data_prot + cl_data_publ)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 10.5pt"><SPAN lang=EN-US>cl_func_priv </SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>private</SPAN><SPAN style="FONT-FAMILY: 宋体">型的成员函数的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;</SPAN>cl_func_prot </SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>protected</SPAN><SPAN style="FONT-FAMILY: 宋体">型的成员函数的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_func_publ </SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">型的成员函数的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_data_prot </SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>protected</SPAN><SPAN style="FONT-FAMILY: 宋体">型的数据成员的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_data_publ </SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">型的数据成员的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_data_priv </SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中</SPAN><SPAN lang=EN-US>private</SPAN><SPAN style="FONT-FAMILY: 宋体">型的数据成员的数量。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_data_class</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中类类型数据成员的个数</SPAN><SPAN lang=EN-US>.</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_dep_meth</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类函数中要依赖本类之外的函数的个数，</SPAN> <SPAN style="FONT-FAMILY: 宋体">这样的函数是指：</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1 </SPAN><SPAN style="FONT-FAMILY: 宋体">该函数使用了其他类的数据成员</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2 </SPAN><SPAN style="FONT-FAMILY: 宋体">在该函数中调用了其他类的函数</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>3 </SPAN><SPAN style="FONT-FAMILY: 宋体">该函数有一个其他类类型的实体对象的参数</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>4 </SPAN><SPAN style="FONT-FAMILY: 宋体">该函数中有一个其他类的类类型的变量</SPAN></P>
<H2><A name=_Toc26352671><B><SPAN lang=EN-US>2.14</SPAN></B><SPAN lang=EN-US><SPAN>&nbsp; </SPAN>"Number of used Classes" : cu_cdused <SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>[ 0,<SPAN>&nbsp; </SPAN>4 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：使用其它类的数量</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">在该类中直接使用的其它类的数量。多次使用同一个类计为一次。</SPAN></P>
<H2><A name=_Toc26352672><B><SPAN lang=EN-US>2.15</SPAN></B><SPAN lang=EN-US> "Testability": TESTAB <SPAN>&nbsp;&nbsp;&nbsp;</SPAN>[ 0,<SPAN>&nbsp; </SPAN>100 ]</SPAN></A></H2>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">度量元的名称：易于测试性。</SPAN></P>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">解释说明：</SPAN><SPAN lang=EN-US> </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该度量元的计算公式为：</SPAN></P>
<P class=MsoBodyText><SPAN lang=EN-US>TESTAB = </SPAN></P>
<P class=MsoNormal><B><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>cl_fprot_path + cl_fpriv_path + cl_fpubl_path + cl_data_vare + cl_func_calle</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">其中：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN lang=EN-US>cl_fprot_path</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中所有的</SPAN><SPAN lang=EN-US>protected</SPAN><SPAN style="FONT-FAMILY: 宋体">型函数的执行路径总和，</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN lang=EN-US>cl_fpriv_path</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中所有的</SPAN><SPAN lang=EN-US>private</SPAN><SPAN style="FONT-FAMILY: 宋体">型函数的执行路径总和，</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN lang=EN-US>cl_fpubl_path</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类中所有的</SPAN><SPAN lang=EN-US>public</SPAN><SPAN style="FONT-FAMILY: 宋体">型函数的执行路径总和。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN lang=EN-US>cl_data_vare </SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类函数中使用的外部类的数据成员的次数之和，</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>cl_func_calle</SPAN><SPAN style="FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US><SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">类函数中对类外部的函数的调用次数之和，</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 31.5pt"><SPAN style="FONT-FAMILY: 宋体">通过观察该度量元的各个组成元素，我们会发现这些都是会对我们需要制定测试用例的数量产生重要影响的数据。</SPAN></P><BR></DIV></DIV><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:24 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Logiscope-Audit质量因素、质量标准</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/965.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:23:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/965.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/965.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/965.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/965.html</trackback:ping><description><![CDATA[<H1 style="TEXT-ALIGN: justify"><A name=_Toc28142696><SPAN lang=EN-US>1前言</SPAN></A></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">本文介绍了</SPAN><SPAN lang=EN-US>Logiscope</SPAN><SPAN style="FONT-FAMILY: 宋体">——</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">对应于软件质量模型，在质量因素级、质量标准级上的具体实现。需要说明的是，文档中描述的质量模型只涉及了可维护性这个质量因素。根据情况，我们可以制做出不同的质量模型。这篇文档的目的是为了能让大家更好的了解</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">对软件质量模型的实现。</SPAN></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc28142697><SPAN lang=EN-US>2 质量因素</SPAN></A></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">我们先说质量因素这一级。每个质量因素都由若干个质量标准按权重相加组成。关于这些质量标准的含义，请看本文档第三部分的内容。<SPAN lang=EN-US><?xml:namespace prefix = o /><o:p></o:p></SPAN></SPAN></P>
<H2><A name=_Toc28142698><SPAN lang=EN-US>2．1 函数作用域</SPAN></A></H2>
<H3><A name=_Toc28142699><SPAN lang=EN-US>2.1.1函数的可维护性质量因素</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量因素表示：对函数进行修改时，为防止引发错误，所需要做的工作的难度。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US>function_MAINTAINABILITY<SPAN>&nbsp; </SPAN>= <SPAN>&nbsp;&nbsp;&nbsp;</SPAN>function_ANALYZABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>+ function_CHANGEABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>+ function_STABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>+ function_TESTABILITY<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142700><SPAN lang=EN-US>2.1.2 函数调用复杂性质量因素</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量因素表示：对函数进行修改时，为防止引发错误，所需要做的工作的难度。其计算公式为：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US>relativeCall_MAINTAINABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;&nbsp;</SPAN>relativeCall_ANALYZABILITY<o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;</SPAN>+ relativeCall_STABILITY<o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>+ relativeCall_TESTABILITY<o:p></o:p></SPAN></B></P>
<H2><A name=_Toc28142701><SPAN lang=EN-US>2．2 类作用域</SPAN></A></H2>
<H3><A name=_Toc28142702><SPAN lang=EN-US>2.2.1 类的可维护性质量因素</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量因素表示：对类进行修改时，为防止引发错误，所需要做的工作的难度。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US>class_MAINTAINABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;&nbsp;</SPAN>class_ANALYZABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>+ class_CHANGEABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>+ class_STABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>+ class_TESTABILITY<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142703><SPAN lang=EN-US>2.2.2 类的可复用性质量因素</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">可复用性是指类是否能够被比较容易的复用。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US>class_REUSABILITY<SPAN>&nbsp; </SPAN>= <SPAN>&nbsp;&nbsp;</SPAN>class_USABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>+ class_SPECIALIZABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>+ class_ANALYZABILITY<o:p></o:p></SPAN></B></P>
<H2><A name=_Toc28142704><SPAN lang=EN-US>2．3 系统作用域</SPAN></A></H2>
<H3><A name=_Toc28142705><SPAN lang=EN-US>2.3.1系统的可维护性质量因素</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量因素表示：对程序代码进行修改时，为防止引发错误，所需要做的工作的难度。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US>application_MAINTAINABILITY<SPAN>&nbsp; </SPAN>=<SPAN>&nbsp; </SPAN>application_ANALYZABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>+ application_CHANGEABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>+ application_STABILITY <o:p></o:p></SPAN></B></P>
<P class=MsoNormal><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>+ application_TESTABILITY<o:p></o:p></SPAN></B></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc28142706><SPAN lang=EN-US>3 质量标准</SPAN></A></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">下面我们讨论软件质量模型中质量标准这一级。质量标准组成了我们上面说到的质量因素。每个质量标准都是由若干个质量度量元按权重相加组成的。关于组成各个质量标准的度量元的含义，请看《<SPAN lang=EN-US>Logiscope-Audit函数度量元》、《Logiscope-Audit类度量元》、《Logiscope-Audit系统度量元》这3篇文章的内容。<o:p></o:p></SPAN></SPAN></P>
<H2><A name=_Toc28142707><SPAN lang=EN-US>3．1 函数的质量标准</SPAN></A></H2>
<H3><A name=_Toc28142708><SPAN lang=EN-US>3.1.1 函数易于测试性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：函数被修改后，为保证系统不发生错误，需进行测试的工作量。计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>function_TESTABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>dc_calls<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>LEVL <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ct_path<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>ic_param<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142709><SPAN lang=EN-US>3.1.2 函数稳定性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：函数之外的代码发生变化之后，导致函数发生错误的可能性。计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US>function_STABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>dc_calling <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ic_varpe <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ct_exit <SPAN>&nbsp;</SPAN><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 125.45pt"><B><SPAN lang=EN-US>+ <SPAN>&nbsp;</SPAN>dc_calls + ic_param<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142710><SPAN lang=EN-US>3.1.3 函数适应变化性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：当需要更改函数代码、修正函数代码缺陷时，需做的工作量。计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>function_CHANGEABILITY <SPAN>&nbsp;</SPAN>=<SPAN>&nbsp; </SPAN>ic_param<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>dc_lvars<SPAN>&nbsp; </SPAN>+ VOCF <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ct_bran<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142711><SPAN lang=EN-US>3.1.4 函数易于分析性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：理解函数所需花费的脑力劳动量，也就是函数的复杂程度。计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>function_ANALYZABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>ct_vg <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>lc_stat<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>AVGS <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>COMF<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142712><SPAN lang=EN-US>3.1.5 函数调用可分析性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：理解函数的相互调用关系所需花费的脑力劳动量。计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>relativeCall_ANALYZABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>cg_strucpx <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>cg_levels<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142713><SPAN lang=EN-US>3.1.6函数调用稳定性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：对程序（包括本函数体中的代码以及其他函数体中的代码）进行修改时，导致引发意想不到的错误的可能性。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>relativeCall_STABILITY<SPAN>&nbsp; </SPAN>= <SPAN>&nbsp;</SPAN>IND_CALLS <SPAN>&nbsp;</SPAN>+<SPAN>&nbsp; </SPAN>cg_hiercpx<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142714><SPAN lang=EN-US>3.1.7函数调用易于测试性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：为了验证程序的正确性，所需测试工作的工作量。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>relativeCall_TESTABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>cg_testab <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>IND_CALLS<o:p></o:p></SPAN></B></P>
<H2><A name=_Toc28142715><SPAN lang=EN-US>3．2 类的质量标准</SPAN></A></H2>
<H3><A name=_Toc28142716><SPAN lang=EN-US>3.2.1类可分析性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：为了理解类的功能，所需付出的脑力劳动量。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US>class_ANALYZABILITY<SPAN>&nbsp; </SPAN>=<SPAN>&nbsp; </SPAN>cl_wmc<SPAN>&nbsp; </SPAN>+<SPAN>&nbsp; </SPAN>in_bases<SPAN>&nbsp; </SPAN>+<SPAN>&nbsp; </SPAN>cl_dep_meth<SPAN>&nbsp; </SPAN><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 135.85pt"><B><SPAN lang=EN-US>+<SPAN>&nbsp; </SPAN>FAN_Inclass<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>FAN_OUTclass <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>COMFclass<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142717><SPAN lang=EN-US>3.2.2 类适应变化性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：当需要对类进行修改时，所需付出的工作量。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>class_CHANGEABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>ENCAP <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>USABLE <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>SPECIAL<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142718><SPAN lang=EN-US>3.2.3 类稳定性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：当需要对程序进行修改时，为了防止发生错误所需付出的工作量。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>class_STABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>AUTONOM <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>in_noc<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>cl_cobc<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>cu_cdusers<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">减少类与类之间的耦合，提高类的封装程度，会提高类的稳定性。</SPAN></P>
<H3><A name=_Toc28142719><SPAN lang=EN-US>3.2.4 类易于测试性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：为了验证程序的正确性，所需测试工作的工作量。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>class_TESTABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>in_bases<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>TESTAB <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>cu_cdused<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142720><SPAN lang=EN-US>3.2.5 类易于使用性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：类是否能被使用者容易的理解和方便、安全的使用。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>class_USABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>USABLE <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ENCAP <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>AUTONOM<o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142721><SPAN lang=EN-US>3.2.6<SPAN>&nbsp; </SPAN>类功能专一性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准用于检验类的可复用性。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>class_SPECIALIZABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>SPECIAL <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ENCAP <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>AUTONOM<o:p></o:p></SPAN></B></P>
<H2><A name=_Toc28142722><SPAN lang=EN-US>3．3 系统的质量标准</SPAN></A></H2>
<H3><A name=_Toc28142723><SPAN lang=EN-US>3.3.1 系统可分析性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：系统的复杂程度，即系统是否能被较容易的理解。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US>application_ANALYZABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>ap_inhg_levl <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>AVG_CBO <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ap_aif <SPAN>&nbsp;</SPAN><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 166.85pt"><B><SPAN lang=EN-US>+ <SPAN>&nbsp;</SPAN>ap_mif <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ap_cof <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>RECU_Ratio <o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142724><SPAN lang=EN-US>3.3.2 系统适应变化性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：当需要对程序进行修改时，为了防止发生错误所需付出的工作量。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt"><B><SPAN lang=EN-US>application_CHANGEABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>ap_inhg_levl<SPAN>&nbsp; </SPAN>+ URI_Ratio + NMM_Ratio <o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 166.85pt"><B><SPAN lang=EN-US>+ <SPAN>&nbsp;</SPAN>ap_pof<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>ap_mif <o:p></o:p></SPAN></B></P>
<H3><A name=_Toc28142725><SPAN lang=EN-US>3.3.3<SPAN>&nbsp; </SPAN>系统稳定性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：当需要对对系统进行修改时，系统发生错误的可能性。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp; </SPAN>application_STABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>AVG_CBO <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ap_inhg_cpx<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>ap_mhf<SPAN>&nbsp; </SPAN><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>ap_ahf<SPAN>&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>ap_cof<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">系统中的各模块之间的耦合越少，则系统的稳定性越好。</SPAN></P>
<H3><A name=_Toc28142726><SPAN lang=EN-US>3.3.4<SPAN>&nbsp; </SPAN>系统易于测试性质量标准</SPAN></A></H3>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">该质量标准表示：为了验证系统功能的正确性，所需测试工作的工作量。其计算公式为：</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt; TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US>application_TESTABILITY <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>AVG_VG <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>NMM_Ratio <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ap_mhf <SPAN>&nbsp;</SPAN><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt; TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>+ <SPAN>&nbsp;</SPAN>ap_ahf <SPAN>&nbsp;</SPAN>+ <SPAN>&nbsp;</SPAN>ap_cg_levl<o:p></o:p></SPAN></B></P><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:23 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Logiscope使用说明书</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/955.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:22:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/955.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/955.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/955.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/955.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/955.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1前言本文挡介绍了测试工具Logiscope的使用方法，包括以下内容：1 安装、配置Logiscope。2 Logiscop三大功能Audit、RuleChecker、TestChecker的使用。3 其它相关问题。2 Logiscope的使用Logiscope 有三项独立的功能，以3个独立的工具的形式出现，即Audit、RuleChecker、TestChecker，它们...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/955.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:22 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编码规范检测报告模板</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1013.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:20:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1013.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/1013.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/1013.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/1013.html</trackback:ping><description><![CDATA[<H1 style="TEXT-ALIGN: justify"><A name=_Toc25138065></A><A name=_Toc26333729><SPAN><SPAN lang=EN-US>1</SPAN></SPAN></A><SPAN><SPAN><SPAN style="FONT-FAMILY: 黑体">前言</SPAN></SPAN></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">依照《xx公司编码规范》的要求，测试中心对<SPAN lang=EN-US style="COLOR: blue">[被测系统或模块的名称]</SPAN>编码的规范性进行检查。对于编码中不符合《xx公司编码规范》要求的地方，进行报告。</SPAN></P>
<P class=MsoNormalIndent style="TEXT-INDENT: 21.1pt; TEXT-ALIGN: center" align=center><B><SPAN style="FONT-FAMILY: 黑体">表<SPAN lang=EN-US>1-1 </SPAN></SPAN></B><B><SPAN style="FONT-FAMILY: 黑体">背景说明<SPAN lang=EN-US><?xml:namespace prefix = o /><o:p></o:p></SPAN></SPAN></B></P>
<DIV align=center>
<TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 2.25pt double; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 2.25pt double; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 0.75pt solid" vAlign=top width=103>
<P class=MsoNormal><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; TEXT-TRANSFORM: uppercase; FONT-FAMILY: 宋体">测试人员<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 2.25pt double; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 144pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 0.75pt solid" vAlign=top width=192>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; TEXT-TRANSFORM: uppercase; FONT-FAMILY: 宋体"><o:p><FONT face="Times New Roman" size=3></FONT></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 2.25pt double; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 54pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 0.75pt solid" vAlign=top width=72>
<P class=MsoNormal><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">设计人员<SPAN lang=EN-US style="TEXT-TRANSFORM: uppercase"><o:p></o:p></SPAN></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 2.25pt double; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 2.25pt double; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 150.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 0.75pt solid" vAlign=top width=201>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; TEXT-TRANSFORM: uppercase; FONT-FAMILY: 宋体"><o:p><FONT face="Times New Roman" size=3></FONT></o:p></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 2.25pt double; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 2.25pt double" vAlign=top width=103>
<P class=MsoNormal><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; TEXT-TRANSFORM: uppercase; FONT-FAMILY: 宋体">测试日期</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></P></TD>
<TD style="BORDER-RIGHT: 2.25pt double; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 348.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 2.25pt double" vAlign=top width=465 colSpan=3>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体"><o:p><FONT face="Times New Roman" size=3></FONT></o:p></SPAN>&nbsp;</P></TD></TR></TBODY></TABLE></DIV>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc26333730><SPAN lang=EN-US style="FONT-FAMILY: 黑体">2</SPAN></A><SPAN><SPAN style="FONT-FAMILY: 黑体">检测结果</SPAN></SPAN><SPAN></SPAN><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></H1>
<P class=MsoNormalIndent><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;下面</SPAN><SPAN style="FONT-FAMILY: 宋体">以表格的形式</SPAN><SPAN style="FONT-FAMILY: 宋体">分别列出各个程序文件中违反</SPAN><SPAN style="FONT-FAMILY: 宋体">《xx公司编码规范》的代码。其中，“</SPAN><SPAN style="FONT-FAMILY: 宋体">编码规范编号”、“编码规范名”指的是该规范在</SPAN><SPAN style="FONT-FAMILY: 宋体">《xx公司编码规范》中的编号和名称，“</SPAN><SPAN style="FONT-FAMILY: 宋体">行号”指违反规范的代码在程序文件中的行号。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><o:p></o:p></SPAN></P>
<H2><A name=_Toc26333731><SPAN lang=EN-US>2.1文件1</SPAN></A></H2>
<P class=MsoNormalIndent style="TEXT-ALIGN: center" align=center><B><SPAN style="FONT-FAMILY: 黑体">表<SPAN lang=EN-US>2-1 文件1中违反编码规范之处<o:p></o:p></SPAN></SPAN></B></P>
<DIV align=center>
<TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 40.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" vAlign=top width=54>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm; TEXT-ALIGN: center" align=center><SPAN style="FONT-FAMILY: 宋体">序号</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 81.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" vAlign=top width=109>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm; TEXT-ALIGN: center" align=center><SPAN style="FONT-FAMILY: 宋体">编码规范编号</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 214pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" vAlign=top width=285>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm; TEXT-ALIGN: center" align=center><SPAN style="FONT-FAMILY: 宋体">编码规范名</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 93.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" vAlign=top width=124>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm; TEXT-ALIGN: center" align=center><SPAN style="FONT-FAMILY: 宋体">行号</SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 0.5pt solid; WIDTH: 40.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=54>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 81.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=109>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 214pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=285>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 93.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=124>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 0.5pt solid; WIDTH: 40.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=54>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 81.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=109>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 214pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=285>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 93.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=124>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD></TR></TBODY></TABLE></DIV>
<H2><A name=_Toc26333732><SPAN lang=EN-US>2.2文件2</SPAN></A></H2>
<P class=MsoNormalIndent style="TEXT-ALIGN: center" align=center><B><SPAN style="FONT-FAMILY: 黑体">表<SPAN lang=EN-US>2-2 文件2中违反编码规范之处<o:p></o:p></SPAN></SPAN></B></P>
<DIV align=center>
<TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 40.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" vAlign=top width=54>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm; TEXT-ALIGN: center" align=center><SPAN style="FONT-FAMILY: 宋体">序号</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 81.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" vAlign=top width=109>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm; TEXT-ALIGN: center" align=center><SPAN style="FONT-FAMILY: 宋体">编码规范编号</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 153.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" vAlign=top width=205>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm; TEXT-ALIGN: center" align=center><SPAN style="FONT-FAMILY: 宋体">编码规范名</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 153.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" vAlign=top width=205>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm; TEXT-ALIGN: center" align=center><SPAN style="FONT-FAMILY: 宋体">行号</SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 0.5pt solid; WIDTH: 40.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=54>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 81.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=109>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 153.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=205>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 153.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=205>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 0.5pt solid; WIDTH: 40.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=54>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 81.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=109>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 153.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=205>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD>
<TD style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 153.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 0.5pt solid" vAlign=top width=205>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><SPAN lang=EN-US><o:p></o:p></SPAN>&nbsp;</P></TD></TR></TBODY></TABLE></DIV>
<H2><A name=_Toc26333733><SPAN lang=EN-US>2.3... ...</SPAN></A></H2>
<P class=MsoNormalIndent><SPAN lang=EN-US>… …</SPAN></P>
<P class=MsoNormalIndent><SPAN lang=EN-US>… …</SPAN></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc26333734><SPAN style="FONT-FAMILY: 黑体">附录</SPAN><SPAN lang=EN-US></SPAN></A></H1><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/1013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:20 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模块质量检测报告模板</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1012.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:17:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1012.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/1012.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/1012.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/1012.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1前言依照Logiscope提供的质量模型，测试中心对[被测模块的名称]的质量进行评价，给出质量报告。本文档共分以下几个部分：被检测的程序文件。列出本次对其进行质量分析的程序文件名。类的质量检测结果。给出对类进行质量分析所采用的依据，以及最后的分析结果。函数的质量检测结果。给出对函数进行质量分析所采用的依据，以及最后的分析结果。附录。其他的相关资料。&nbsp;[注意：...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1012.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/1012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:17 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>系统质量检测报告模板</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1011.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 13:08:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1011.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/1011.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/1011.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/1011.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1前言依照Logiscope提供的质量模型，测试中心对[被测系统的名称]的质量进行评价，给出软件质量检测报告。本文档分以下几个部分：被检测的程序文件：列出本次对其进行质量分析的程序文件名。系统的质量检测结果：给出对系统进行质量分析所采用的依据，以及最后的分析结果。类的质量检测结果：给出对类进行质量分析所采用的依据，以及最后的分析结果。函数的质量检测结果：给出对函数进行质量分...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1011.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/1011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 21:08 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/1011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Logiscope应用方案</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/954.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 12:50:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/954.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/954.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/954.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/954.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/954.html</trackback:ping><description><![CDATA[<H1><A name=_Toc25138065>1<SPAN style="FONT-FAMILY: 黑体">前言</SPAN></A></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">为了让大家在使用</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Logiscope测试实际的项目时，能够有所依据和参考，进而提高该工具的使用效率，</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">制定了本应用方案。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><?xml:namespace prefix = o /><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">本应用方案描述了使用</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">和</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">RuleChecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的过程，并给出了最后提交的测试报告的模版供参考。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<H1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A name=_Toc25138066><SPAN lang=EN-US style="FONT-FAMILY: 黑体">2 关于Audit</SPAN></A><SPAN style="FONT-FAMILY: 黑体">的应用<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></H1>
<P class=MsoNormalIndent><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 通过<SPAN lang=EN-US>Audit对软件进行质量监控，能确实的提高软件质量，但这项工作比较耗费时间和精力，所以如果决定要做，就要认真对待。如果匆忙、潦草的进行，会感觉既浪费时间，又没有明显的效果。<o:p></o:p></SPAN></SPAN></P>
<H2><SPAN lang=EN-US>2.1 Audit的功能</SPAN></H2>
<P class=MsoNormalIndent><SPAN lang=EN-US style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; Audit有两项功能——</SPAN><SPAN style="FONT-FAMILY: 宋体">质量监控和程序分析。</SPAN></P>
<H3><SPAN lang=EN-US>2.1.1质量监控</SPAN></H3>
<P class=MsoNormalIndent><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 对于<SPAN lang=EN-US>Audit质量监控这项功能，现在还不能使其最充分的发挥作用。我们现在可以做的是：依照Audit自身提供的质量模型，对软件的质量进行</SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">监控</SPAN><SPAN style="FONT-FAMILY: 宋体">。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<H3><SPAN lang=EN-US>2.1.2程序分析</SPAN></H3>
<P class=MsoNormalIndent><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 除了进行质量监控外，</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">还可以提供程序的内部实现信息，包括每个函数（成员函数和非成员函数）的控制流程图、调用关系图，每个类的继承关系图、使用关系图。通过这些信息，可以帮助我们了解程序的内部实现。</SPAN></P>
<P class=MsoNormalIndent><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">的这项功能，对于进行单元测试阶段的代码审查能发挥比较好的作用。可以先通过</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">定位那些较为复杂的函数、类，然后进行小组形式的代码人工走查，重点检查这一部分的代码，因为通常情况下这样的代码容易出现问题。</SPAN></P>
<H2><SPAN lang=EN-US>2.2</SPAN><SPAN>实际应用</SPAN></H2>
<P class=MsoBodyTextIndent><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 下面说一下<SPAN lang=EN-US>Audit在实际中的应用。分三种不同的情况：<o:p></o:p></SPAN></SPAN></P>
<H3><SPAN lang=EN-US>2.2.1对于跟踪全过程的项目</SPAN></H3>
<P><SPAN lang=EN-US></SPAN><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 对于这样的项目，</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">可以发挥比较好的作用。工作阶段如下：<BR>&nbsp;<BR></SPAN><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 </SPAN><SPAN style="FONT-FAMILY: 宋体">在项目初期，提出对该项目的质量要求，决定选用</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">作为检测工具。<BR><BR>&nbsp;&nbsp;&nbsp; </SPAN><SPAN lang=EN-US>2 </SPAN><SPAN style="FONT-FAMILY: 宋体">在概要设计之前，对开发人员做软件质量方面的培训，告知对该项目的质量要求。</SPAN></P>
<P class=MsoNormalIndent><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3 </SPAN><SPAN style="FONT-FAMILY: 宋体">在编码的过程中，测试人员通过</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">来检验函数、类等模块是否达到质量要求。如果与质量要求相差较大，开发人员进行修改。</SPAN></P>
<P class=MsoNormalIndent><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">当组装成子系统时，给出子系统的质量报告，如果与质量要求相差较大，开发人员进行修改。</SPAN></P>
<P class=MsoNormalIndent><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<SPAN>&nbsp; </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">对于那些最后质量评价仍然很低的函数、类等模块，可对其进行小组形式的人工代码走查，确定这些代码的正确性。</SPAN></P>
<P class=MsoNormalIndent><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 </SPAN><SPAN style="FONT-FAMILY: 宋体">在确认阶段，通过</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">来评价产品的质量，给出整个系统的质量报告。根据质量评价的结果、修改的难度，权衡是否需要进行修改。</SPAN></P>
<P class=MsoNormalIndent><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;严格的说，只有</SPAN><SPAN lang=EN-US>3</SPAN><SPAN style="FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US>4</SPAN><SPAN style="FONT-FAMILY: 宋体">才完全是测试人员的任务，在其他的阶段，我们只是参与者之一。但由于公司目前的情况，可能其中大部分的工作都要由我们来做。<BR><BR>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">下面给出在这个过程中，需要提交的测试报告的模板：<BR><BR>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">第</SPAN><SPAN lang=EN-US>3</SPAN><SPAN style="FONT-FAMILY: 宋体">阶段需提交的测试报告的模板——《模块质量检测报告模板》；<BR>&nbsp;<BR></SPAN><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">第</SPAN><SPAN lang=EN-US>4</SPAN><SPAN style="FONT-FAMILY: 宋体">阶段需提交的测试报告的模板——《模块质量检测报告模板》或《系统质量检测报告模板》。<BR><BR>&nbsp;&nbsp;&nbsp; 第<SPAN lang=EN-US>6</SPAN><SPAN style="FONT-FAMILY: 宋体">阶段需提交的测试报告的模板——《系统质量检测报告模板》；</SPAN></SPAN></P>
<H3><SPAN lang=EN-US>2.2.2对于只做最后的确认测试的项目</SPAN></H3>
<P class=MsoNormalIndent style="TEXT-INDENT: 20.8pt"><SPAN style="FONT-FAMILY: 宋体">首先要说明的是，对于只做确认测试的项目，用</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">的意义不是很大，唯一的作用是通过</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">对系统做一下质量评价。但无论评价的结果是好是坏，进行修改的可能性已经不是很大了。<BR><BR>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">在这个过程中，需要提交的测试报告的模板——《系统质量检测报告模板》。</SPAN><SPAN lang=EN-US style="COLOR: red"><o:p></o:p></SPAN></P>
<H3><SPAN lang=EN-US>2.2.3对于进行维护的项目</SPAN></H3>
<P class=MsoNormalIndent><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 如果是对原有项目进行维护：可以通过</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">来检测被维护软件的质量，估算出进行维护工作的难度，从而更好的计划维护工作。</SPAN></P>
<P class=MsoNormalIndent><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 对于那些质量已经得到保证的产品，可以通过</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">来监督项目的维护工作，使其质量不致后退。</SPAN></P>
<H2><SPAN lang=EN-US>2.3其他</SPAN></H2>
<P class=MsoNormalIndent><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 在使用</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">对项目进行质量监控时，不要忘了为被测项目制作</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">质量模型文件</SPAN><SPAN lang=EN-US>(Logiscope<B>.</B>ref)</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN></P>
<H1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A name=_Toc25138067><SPAN lang=EN-US>3 </SPAN></A><SPAN><SPAN style="FONT-FAMILY: 黑体">关于</SPAN><SPAN lang=EN-US>RuleChecker</SPAN></SPAN><SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体">的应用</SPAN></H1>
<P class=MsoNormalIndent style="TEXT-INDENT: 0cm"><B><SPAN lang=EN-US>RuleChecker</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">应用过程：</SPAN></B><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormalIndent><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; 1 </SPAN><SPAN style="FONT-FAMILY: 宋体">在项目开始之初，要求</SPAN><SPAN style="FONT-FAMILY: 宋体">开发人员、测试人员遵从</SPAN><SPAN style="FONT-FAMILY: 宋体">《北京许继编码规范》中对编码的规范要求。<BR><BR></SPAN><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; 2 </SPAN><SPAN style="FONT-FAMILY: 宋体">按编码规范要求，从</SPAN><SPAN lang=EN-US>RuleChecker</SPAN><SPAN lang=EN-US style="COLOR: black"> </SPAN><SPAN style="COLOR: black; FONT-FAMILY: 宋体">的编码</SPAN><SPAN style="FONT-FAMILY: 宋体">规则</SPAN><SPAN lang=EN-US>/</SPAN><SPAN style="FONT-FAMILY: 宋体">规范集中挑选出适和的规则</SPAN><SPAN lang=EN-US>/</SPAN><SPAN style="FONT-FAMILY: 宋体">规范，编写</SPAN><SPAN lang=EN-US>RuleChecker</SPAN><SPAN style="FONT-FAMILY: 宋体">规则文件（</SPAN><SPAN lang=EN-US>RuleChecker.cfg</SPAN><SPAN style="FONT-FAMILY: 宋体">）和对应的</SPAN><SPAN lang=EN-US>Audit</SPAN><SPAN style="FONT-FAMILY: 宋体">质量模型文件</SPAN><SPAN lang=EN-US>(Logiscope<B>.</B>ref)</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormalIndent><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; 3 </SPAN><SPAN style="FONT-FAMILY: 宋体">编写出</SPAN><SPAN lang=EN-US>RuleChecker</SPAN><SPAN style="FONT-FAMILY: 宋体">可用规则列表，列出</SPAN><SPAN lang=EN-US>RuleChecker</SPAN><SPAN style="FONT-FAMILY: 宋体">规则与《北京许继编码规范》中各条规范的对应关系。<BR><BR></SPAN><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; 4 </SPAN><SPAN style="FONT-FAMILY: 宋体">在开发过程中，测试人员通过</SPAN><SPAN lang=EN-US>RuleChecker</SPAN><SPAN style="FONT-FAMILY: 宋体">对代码</SPAN><SPAN style="FONT-FAMILY: 宋体">进行编码规范的自动化检查，报告不符合规范的地方，开发人员进行修改。（报告格式请参见《编码规范检测报告模板》）</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<H1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A name=_Toc25138068><SPAN lang=EN-US style="FONT-FAMILY: 黑体">4 关于TestChecker</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></H1>
<P class=MsoNormalIndent><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; RuleChecker</SPAN><SPAN style="FONT-FAMILY: 宋体">现在存在问题，用其他覆盖率统计工具代替。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<H1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US style="FONT-FAMILY: 黑体">5 结束<o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Logiscope的</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">使用过程并不局限于此文档中描述的内容。大家在实际应用</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Logiscope的过程中，当有特殊的需要时，可对该使用方案进行裁剪。如果发现某些情况比较普遍，可以补充到该方案中。<o:p></o:p></SPAN></P><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 20:50 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Logiscope测试机理</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/953.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Fri, 15 Jul 2005 12:39:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/953.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/953.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/953.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/953.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/953.html</trackback:ping><description><![CDATA[<H1 style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify">1<A name=_Toc28148572><SPAN style="FONT-FAMILY: 黑体">前言</SPAN></A></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">本文介绍了静态测试工具</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Logiscope的测试机理。通过对Logiscope测试机理的</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">了解，能</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">帮助我们更好的</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">使用</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">这个工具。<SPAN lang=EN-US><?xml:namespace prefix = o /><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">通过阅读<SPAN>本</SPAN>文，你可以了解到以下信息：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">&nbsp;Logiscope是如何分析</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">软件产品质量的；</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">&nbsp;Logiscope是如何检测代码的编码规范的；<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">&nbsp;Logiscope是如何统计测试覆盖率</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的；</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc28148573><SPAN lang=EN-US style="FONT-FAMILY: 黑体">2 Logiscope总览</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Logiscope有三项主要功能，以三个独立工具的形式出现，分别是：<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">软件质量分析工具——<SPAN lang=EN-US>Audit；<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">代码规范性检测工具——</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">；</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">测试覆盖率统计工具——</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">TestChecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Audit和</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">提供了对软件进行</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">静态分析的功能，</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">TestChecker提供了测试覆盖率统计的功能。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; Logiscope可以对多种语言实现的代码进行分析，比如C、C++、Java、Ada，等等。下面的内容与具体的语言基本是没有关系的，但如果某些地方确实要涉及具体的语言，则我都是以C++为例。<BR><BR></SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 下面，我对</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">和</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">TestChecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的测试机理，分别进行介绍。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc28148574><SPAN lang=EN-US style="FONT-FAMILY: 黑体">3 Audit测试机理</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></H1>
<H2><A name=_Toc28148575><SPAN lang=EN-US>3．1软件质量模型</SPAN></A></H2>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">前面已经说过，</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">是审查程序代码质量的。要讨论代码的质量，就需要先说明一下软件质量模型的概念，因为理解下面的内容需要软件质量模型的相关知识。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">如果你原来学习过软件质量保证的相关知识，那么应该会对软件质量模型这个概念有印象。为了说明</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的测试机理，在这里只对软件质量模型做个简单的介绍。如果你对软件质量模型的概念比较陌生，建议找一本讲述软件工程方面的书，阅读一下软件质量保证部分的内容。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">软件质量模型是一个分层结构，它的一般形式如下图所示：</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<DIV style="TEXT-ALIGN: center"><IMG height=277 alt=logiscope1.gif src="http://www.cnitblog.com/images/cnitblog_com/qiuyangzh/logiscope/logiscope1.gif" width=549 border=0><BR></DIV>
<DIV style="TEXT-ALIGN: center"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 黑体">图<SPAN lang=EN-US>3-1 软件质量模型的一般形式</SPAN></SPAN><BR></DIV><BR>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">由图可以看出，质量因素处于质量模型中最高一级。软件的质量因素包括</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">功能性、可靠性、易用性、效率、可维护性、可移植性这六</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">个方面（</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">在<SPAN lang=EN-US>ISO/IEC 9126中有详细的描述）。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">在质量因素之下，又细分成多个质量标准。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">每个质量标准又由多个质量度量元组成。这些质量度量元处于</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">质量模型</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">分层结构中的最底层</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。<BR></SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体"><BR>&nbsp;&nbsp;&nbsp; 质量因素、质量标准一般是固定的，就是这几类，</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">但质量度量元不是固定的，可以根据不同的情况发生变化。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">软件质量模型就是一个将程序信息由底层到高层、由细节到概括的一个过程模型，它由简单、可测量的数据入手，最后分析概括出软件的特征。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<H2><A name=_Toc28148576><SPAN lang=EN-US>3．2 Audit对软件质量模型的实现</SPAN></A></H2>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">上面我们了解了</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">软件质量模型的大体结构，</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">也是按照这种分层、量化的方式来审查代码质量的。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">通过一个文本文件来定义质量模型。在为被测代码建立</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">检测项目的过程中，有一步是要求我们“</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">choose a quality</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">”，这就是在要求我们设定一个质量模型，默认的，</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit会</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">提供一个质量模型文件，它的位置在“</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">LogiscopeHOME</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">\Logiscope\Ref\Logiscope.ref</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">”。用记事本打开这个文件，通过观察我们会发现，文件中首先定义了若干个度量元，并为这些度量元设定了数值范围，接着通过组合若干个度量元形成质量标准，最后又通过组合质量标准，形成最后的质量因素。这个过程与软件质量模型中由底层到高层、由细节到概括的结构恰好对应。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">除了使用</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">提供的这个质量模型文件外，我们当然可以定义自己的质量模型文件（99%的情况下都需要我们制定符合我们需要的质量模型文件），只要符合</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Logiscope.ref</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">这个文件的格式即可。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">为了方便起见，我们下面就以</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">提供的这个质量模型文件展开讨论，讲解</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Audit对软件质量模型的实现。<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">对应于</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">质量模型中</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">质量因素这一级，Logiscope提供的默认的</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">质量模型文件对软件的可维护性这个质量因素进行了实现，使用这个文件，可以通过</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">评价软件的可维护性水平</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 在</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">质量标准级，在质量模型文件中定义了</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">四个质量标准，分别是：</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">易于分析性（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">ANALYZABILITY</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">）、易于测试性（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">TESTABILITY</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">）、稳定性（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">STABILITY</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">）和适应变化性</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">（</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">CHANGEABILITY</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">）。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN> 
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">对于软件质量模型中最底层的质量度量元级，质量模型文件</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">从<SPAN lang=EN-US>Audit提供的度量元中选择了几十个</SPAN></SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">度量元构成了基本度量元</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，比如函数语句数</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">度量元</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">（<SPAN lang=EN-US>lc_stat）、类公共数据成员数</SPAN></SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">度量元（</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">cl_data_publ</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">），</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">等等。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">那么各层具体的分析结果是如何得出来的呢？我们按照质量度量元、质量标准、</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">质量因素的顺序由底到高，依次解释。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">在</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的内部定义了大量的质量度量元，度量元是检验一个软件质量好坏的最基本元素。在Logiscope提供的这个默认<SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">质量模型文件</SPAN>中，选取的度量元都是为最后评价可维护性提供服务的。通过观察</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Logiscope</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">.</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">ref</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">质量模型文件，你会发现，度量元都可以量化为数字，允许我们在质量模型文件中为每个度量元设定上限值和下限值。当某一度量元超出我们设定的上限值和下限值的范围时，</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit就</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">认为被检测的代码在该项度量元上不符和要求。<BR><BR>&nbsp;&nbsp;&nbsp; 下面举一个度量元的例子：</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">lc_stat</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">度量。</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">该度量元表示函数中可执行语句的数量。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">lc_stat</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">度量元对于衡量函数的复杂性是很有用的，比如我们可以设定它的上限值为</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">30</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，下限值为</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">0</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，即我们规定了：一个函数中可执行的语句数不能超过</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">30</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">条。这就是</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">对质量模型中度量元级的处理方法。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">通过这一个个单独的度量元，我们还不能判断程序的可维护性如何，因为过于片面，只有将这些度量元按某种规则组织起来，才能对软件的可维护性作出评价。通过观察</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Logiscope</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">.</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">ref</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">这个质量模型文件我们会发现，每个质量标准都是由若干个度量元按权相加组成的，质量标准最后也用数字来表示它自己的值。通过质量标准值的大小，</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">给出程序代码遵守该项质量标准的级别。级别共有四个，由高到底依次是</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">EXCELLENT</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">（优秀）、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">GOOD</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">（良好）、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">FAIR</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">（合格）、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">POOR</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">（不合格）。下面从</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Logiscope</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">.</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">ref</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">文件中摘录一段，作为如何计算质量标准的例子：</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<DIV style="TEXT-ALIGN: center"><IMG height=200 alt=logiscope2.gif src="http://www.cnitblog.com/images/cnitblog_com/qiuyangzh/logiscope/logiscope2.gif" width=389 border=0><BR></DIV><BR>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">这个质量标准是评价函数的稳定性的。最上面一行是这个质量标准的计算公式：</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 63pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">function_STABILITY = ic_varpe + ct_exit + dc_calls + ic_param<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">该公式表明，该质量标准由四个度量元所决定，即</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">ic_varpe </SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">ct_exit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">dc_calls</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">ic_param</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，每个度量元的权重均为1。该质量标准的最高得分为</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">4</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">分，即当构成该质量标准的四个度量元的值均在我们设定的范围内时，该项质量标准得分为</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">4</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">分，当有三个度量元的值均在我们设定的范围内时，该项质量标准得分为</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">3</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">分，以此类推。最后根据具体的得分，可以判定程序代码在该项质量标准上所处的等级。这就是</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">对质量模型中质量准则级的处理方法，可以看出，质量准则是建立在质量度量元的基础之上的，是比质量度量元更加综合的一级。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 19.85pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">最后，综合多个质量标准，得出代码的可维护性质量因素。可维护性因素的计算方法如下：</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 19.85pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">function_MAINTAINABILITY: component <SPAN>&nbsp;</SPAN>= <SPAN>&nbsp;</SPAN>function_ANALYZABILITY <o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 208.85pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">+<SPAN>&nbsp; </SPAN>function_CHANGEABILITY <o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 208.85pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">+<SPAN>&nbsp; </SPAN>function_STABILITY <o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 208.85pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">+ <SPAN>&nbsp;</SPAN>function_TESTABILITY<o:p></o:p></SPAN></P>
<DIV style="TEXT-ALIGN: center"><IMG height=207 alt=logiscope3.gif src="http://www.cnitblog.com/images/cnitblog_com/qiuyangzh/logiscope/logiscope3.gif" width=497 border=0><BR></DIV><BR>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">这是在计算函数的可维护性。最上面是计算公式，函数的可维护性由四个质量标准的得分相加得出（质量标准得分的计算方法上面已经说过了）。对于这个例子来说，它的最高得分为</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">12</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">分，最低得分为</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">0</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">分。最后根据具体的得分，可以判定程序代码在可维护性上所处的等级（</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">EXCELLENT</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">GOOD</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">FAIR</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">POOR</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">）。通过层层综合，最后终于得到了可维护性质量因素的结果。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">OK，以上通过</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">为我们提供的默认质量模型，讲述了在</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">中由质量度量元、到质量准则、最后到质量因素的逐级评价方法。如果是我们自己制定的质量模型，其原理是完全一样的。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">怎么样，这个过程清楚了吗？如果还是有些迷惑，建议你看一看“</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Logiscope</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">HOME</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">\Logiscope\Ref\Logiscope.ref</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">”这个文件的内容，那会对你理解这些内容有所帮助。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<H2><A name=_Toc28148577><SPAN lang=EN-US>3．3 作用域的划分</SPAN></A></H2>
<P class=MsoNormal style="TEXT-INDENT: 19.85pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">我们在人工分析一个应用程序的代码时，通常先会查看应用程序的总体情况，然后分析应用程序中的各个类(对于使用面向对象这类语言实现的代码来说)，进而再分析类中的成员函数。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 19.85pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">在分析、显示对代码的审查结果时，也按这种形式进行划分，我们称它为作用域，比如对于C++、Java语言实现的代码，</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">划分的作用域有：应用程序作用域、类作用域、函数作用域。通过它们的名字，你应该可以猜出各个作用域所包含的内容。应用程序作用域针对整个应用程序，类作用域针对系统中的各个类，函数作用域针对系统中的各个函数。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 19.85pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">不同作用域之间是彼此独立的，但它们都是遵照我们前面提到的那个质量模型对代码进行分析。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<H2><A name=_Toc28148578><SPAN lang=EN-US>3．4 Audit对代码的处理过程</SPAN></A></H2>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">对于使用<SPAN lang=EN-US>Audit的用户来说，输入的是源程序代码，输出的是Audit的分析结果。Audit对代码的处理过程如图所示：<o:p></o:p></SPAN></SPAN></P>
<DIV style="TEXT-ALIGN: center"><IMG height=188 alt=jili1.jpg src="http://www.cnitblog.com/images/cnitblog_com/qiuyangzh/logiscope3/jili1.jpg" width=549 border=0><BR></DIV>
<DIV style="TEXT-ALIGN: center" align=left><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 黑体">图<SPAN lang=EN-US>3-2 Audit对代码的处理过程</SPAN></SPAN></DIV>
<H2><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体"></SPAN><A name=_Toc28148579><SPAN lang=EN-US>3．5 结束</SPAN></A></H2>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">好了，Audit</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的测试机理到此就介绍完了。<BR><BR><BR><BR></SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><o:p></o:p></SPAN></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc28148580><SPAN lang=EN-US style="FONT-FAMILY: 黑体">4 Rulechecker检测机理</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">现在来介绍一下</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Logiscope为我们提供的另外一个工具——</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">也是一个静态测试工具。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">先回想一下我们组织内部的编码规范。编码规范中会对程序代码的</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">注释、变量命名、</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">书写格式等各个方面做出规定，其目的，是为了让开发人员书写的代码更健壮，可读性更好。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">这个工具也是为了协助我们实现使</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">代码更健壮，可读性更好</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">这个目的的。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">实现了一个编码规范集。在这个规范集中</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">的内容，与我们组织内部定义的编码规范的内容类似，但覆盖的范围要更广，规定的也更细（关于</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">编码规范集中各条编码规范的详细内容，可以阅读我写的另一篇文章《</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">RuleChecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">编码规范》，在这里就不做描述了）。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">在这个规范集中</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">，有将近一半</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">左右的编码规范，我们可以对其内容进行定制，这就大大增加了灵活性，使</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">能更好的适应我们实际情况的需要。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">在具体的测试过程中，</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">的编码规范是如何发挥作用的呢？在我们为被测代码建立</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">项目的过程中，有一步是让我们“</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Choose a configuration file</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">”，这就是让我们选择一个编码规范描述文件，</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">为我们提供了一个叫做‘</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">RuleChecker.cfg’</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">的编码规范描述文件，我们当然可以修改或重新编写一个</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">.cfg</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">文件，</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">来适应我们的要求。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">下面举</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">Rulechecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">编码规范集中一个编码规范的例子：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Headercom</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">编码规范<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Headercom<SPAN style="COLOR: black">编码规范</SPAN></SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">对代码文件的</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">文件注释做出了规定，具体内容为：“每个代码</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">文件的头部必须有文件注释，且注释要遵照一定的格式”。这个格式可由我们来设定。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><PRE style="TEXT-INDENT: 21pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">我现在将</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Headercom<SPAN style="COLOR: black">规范要求的</SPAN></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">注释</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">格式，</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">设置成与我所在公司的<SPAN style="COLOR: black">编码规范中规定的文件注释相同的格式。<BR><BR><BR><BR>    <BR>    打开</SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">RuleChecker.cfg文件，用下面的内容代替文件Headercom原来的内容。<o:p></o:p></SPAN></PRE>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">STANDARD Headercom ON<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">LIST "HEADER"<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【文件名】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">" <o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【功能模块和目的】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【主要函数及其功能】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【主要算法】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【接口说明】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; </SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【开发者及日期】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【版本】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【更改记录】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">" END LIST<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">LIST "CODE"<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【文件名】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">" <o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【功能模块和目的】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【主要函数及其功能】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【主要算法】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【接口说明】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【开发者及日期】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【版本】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">"<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">【更改记录】</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">" END LIST<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">END STANDARD<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">做完这个操作后，保存成另一个文件，以</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">.cfg</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">为后缀名。在建立被测代码的</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">RuleChecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">项目时，选中这个文件，则</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">RuleChecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">会以该格式检查代码文件的文件注释格式，如果哪个文件不符合要求，就会被检测出来。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black">OK，RuleChecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的测试机理介绍完了，<SPAN style="COLOR: black">应该是很好理解的。</SPAN></SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black"><o:p></o:p></SPAN></P>
<H1 style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify">5 <A name=_Toc28148581><SPAN lang=EN-US style="FONT-FAMILY: 黑体">TestChecker检测机理</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></H1>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">现在来介绍一下</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">Logiscope为我们提供的最后一个工具——TestChecker</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">TestChecker<SPAN>是用来统计</SPAN></SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">被测试程序的测试覆盖率的。它提供的覆盖率数据是边覆盖率，或者叫判定到判定的覆盖</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">(DDP</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">覆盖</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">)</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">所谓边覆盖率，也就是我们执行的测试用例对程序流程图中的边的覆盖情况。有一些单元测试工具，比如</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">Numega中的TrueCoverage</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，Rational的Purecoverage等，它们也可以</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">统计</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">被测试程序的测试覆盖率，但它们所提供的覆盖率数据是点覆盖率（</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt">IB</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">覆盖率），或者叫做语句覆盖率，这个覆盖率的覆盖强度要低于边覆盖的覆盖强度。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">TestChecker 的测试机理是这样：建立起TestChecker项目后，通过TestChecker编译连接代码，生成可执行文件，在这个过程中，TestChecker会向程序源代码中涉及到控制流转移的语句处，插入一些标志语句（这个过程叫做“插装”）。在TestChecker中运行起被这个可执行文件，执行测试用例的时候，TestChecker会在后台运行。由于在程序代码中“插装”了标志语句，所以在程序的执行过程中，TestChecker能记录下程序中哪些分支走到了，哪些分支没有走到，进而统计出每个测试用例的覆盖率，以及多个测试用例覆盖率的总和。<o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">TestChecker的测试机理基本就是这样。</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P>
<H1 style="TEXT-ALIGN: justify"><A name=_Toc28148582><SPAN lang=EN-US style="FONT-FAMILY: 黑体">6 总结</SPAN></A><SPAN lang=EN-US style="FONT-FAMILY: 黑体"><o:p></o:p></SPAN></H1><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Logiscope</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的测试机理到此就介绍完了，象其它的计算机技术一样，理解、掌握</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">Logiscope</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的最好办法就是实际的使用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">Logiscope</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">去测试一些项目，好了，让我们开始吧。</SPAN><BR><BR><BR><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-15 20:39 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/15/953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>静态测试</title><link>http://www.cnitblog.com/qiuyangzh/archive/2005/07/14/952.html</link><dc:creator>qiuyangzh</dc:creator><author>qiuyangzh</author><pubDate>Thu, 14 Jul 2005 05:44:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuyangzh/archive/2005/07/14/952.html</guid><wfw:comment>http://www.cnitblog.com/qiuyangzh/comments/952.html</wfw:comment><comments>http://www.cnitblog.com/qiuyangzh/archive/2005/07/14/952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuyangzh/comments/commentRss/952.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuyangzh/services/trackbacks/952.html</trackback:ping><description><![CDATA[<P>（待整理...）所谓静态分析，就是我们不需要执行所测试的程序，而只是通过扫描程序正文，对程序的数据流和控制流等信息进行分析，找出系统的缺陷，得出测试报告。</P>
<P>为什么要进行静态分析呢？一个软件产品可能实现了所要求的功能，但如果它的内部结构组织的很复杂，很混乱，代码的编写也没有规范的话，这时软件中往往会隐藏一些不易被察觉的错误，这是其一。其次，即使这个软件基本满足了用户目前的要求，但到了日后对该产品进行维护升级工作的时候，会发现维护工作相当困难。所以，如果能对软件进行科学、细致的静态分析，使系统的设计符合模块化、结构化、面向对象的要求，使开发人员编写的代码符合规定的编码规范，就能够避免软件中大部分的错误，同时为日后的维护工作节约大量的人力、物力。这就是对软件进行静态分析的价值所在。</P>
<P>统计测试覆盖率就属于动态测试的范畴了。覆盖率对于分析测试用例对被测程序的覆盖情况，进而修改、增加测试用例，提高测试覆盖，保证测试质量，是很有用处的。<BR></P><img src ="http://www.cnitblog.com/qiuyangzh/aggbug/952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuyangzh/" target="_blank">qiuyangzh</a> 2005-07-14 13:44 <a href="http://www.cnitblog.com/qiuyangzh/archive/2005/07/14/952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>