静态代码分析报告(通用2篇)
我们知道,PHP读取MYSQL动态显示,在访问量大的情况下,会有很多性能问题,如果租用别人的虚拟主机,则会因为CPU消耗过多而被限制CPU,导致网页无法访问。我这里给出一个PHP动态生成HTML的方法,可以极大降低服务器CPU负荷。
首先设置.htaccess文件,将动态调用的参数转换为静态的HTML的URL地址,例如将在post目录下的文件,转发到根目录的wp-post.php文件中,加入的语句类似:
RewriteRule ^post/([a-z0-9-]+.html)$ wp-post.php?$1$2
然后修改wp-post.php文件,在文件的开头加入以下PHP代码:
ob_start();
$qstring = isset($_SERVER[”QUERY_STRING“]) ? $_SERVER[”QUERY_STRING“] : ”“;
define(”HTML_FILE“, $_SERVER[”DOCUMENT_ROOT“].”/post/“.$qstring);
if (file_exists(HTML_FILE))
{
$lcft = filemtime(HTML_FILE);
if (($lcft + 3600) >time()) //判断上次生成HTML文件是否超过1小时,若没有才直接输出文件内容
{
echo(file_get_contents(HTML_FILE));
exit(0);
}
}
之后是现有的PHP的代码,然后在当前代码的最后面加上如下的PHP代码:
define(”HTMLMETA“,”“);
$buffer = ob_get_flush();
$fp = fopen(HTML_FILE, ”w");
if ($fp)
{
fwrite($fp, $buffer.HTMLMETA);
fclose($fp);
}
好了,然后查看你的静态HTML页面,如果页面尾部出现了注释行,说明已经成功的创建了静态HTML文件,
这个方法的一个应用就是我先前写的那个“WordPress年度博客统计插件”,这个统计插件由于查询十多次数据库,很多人访问的时候会有很大性能问题,使用我介绍的这种动态生成HTML技术后,一天就查询一次,生成一次统计排行,完美解决了查询数据库的性能问题。
1977年,McCall等提出从产品运行、产品修订、产品变迁三方面考量软件质量模型[1]。1978年,Boehm等提出了定量评价软件质量的概念,给出了60个度量公式,并首次提出分层结构的软件质量模型[2,3]。ISO于1991年发布ISO9126标准,提出了高层软件需求质量评价准则、中层软件设计质量评价准则、低层软件代码质量度量评价准则的3层质量模型[4]。我国在GB/T 16260.1和GJB 5236定义了软件的内外部质量模型,将软件质量划分为功能性、可靠性、易用性、效率、可维护性和可移植性六个特性,每个特性又进一步细分为若干子特性。外部度量是通过测试、运行和观察可执行的软件,由该软件所占系统行为的测度而导出;内部度量指通过对中间产品静态属性的测量来预测软件外部质量特性[5]。根据产品的业务目标和评价者的要求,选择质量度量的基础也不同,用户一般根据使用软件的结果,发行方一般根据功能性、可靠性、易用性、效率等外部度量准则,开发人员一般根据内部度量准则。文献[6]对现有软件质量模型进行了系统的总结。
代码是软件的中间产品,代码静态质量度量的是软件内部属性,通过它可以预测软件的外部质量测度。需要指出的是,软件开发过程中产品质量的定量评价还比较困难[7],主要是因为软件内部属性在外部质量测度上的作用是由经验决定的,并且依赖于软件的使用环境,度量模型及参数并不惟一,要根据行业特点进行选择,而国内这方面的工作很少,文献[8]提出了一种度量元标准值的计算方法。
1 雷达软件静态质量评价现状
雷达软件按技术特点划分成若干配置项:雷控软件、发射控保软件、接收软件、信号处理软件、数据处理软件、综合显示软件,还可能包括伺服控制软件、波束控制软件、反干扰软件、微波通信软件等。其具有运行平台多样、对实时性稳定性要求高的特点,通常采用C和C++语言进行开发,代码中既有面向过程的又有面向对象的。现在雷达软件代码静态质量分析一般是先使用静态分析工具进行分析,然后查看关心的度量元,没有对代码的静态质量进行系统地分析。而且商用代码静态分析工具只是通过函数、类和系统各自的度量元来计算其质量准则,并没有考虑成员函数对类、类对系统质量准则的影响。雷达软件代码静态质量的关注点通常集中在函数层面,对系统和类较少关注,而这两个层面的静态质量也是需要关注的。
本文以现有代码静态质量模型为基础,根据实际测评过程中关注的要点对其进行调整,并考虑了质量准则值在不同度量范围之间的传递关系,提出了一种计算软件代码静态质量的方法,它可以方便地计算出被评软件代码的静态质量,具有定义清晰、层次关系合理、度量元获取方便的特点。
2 雷达软件代码静态质量模型
新方法采用的是符合GB/T16260规定的软件质量三层模型,分为质量特性、准则和度量元三个层次,按照GB/T16260的描述,软件静态质量主要反映软件的可维护性,准则层包括可分析性、可修改性、稳定性和可测试性四个准则,根据工作需要,度量元选取以商用代码质量分析工具提供的度量元为基础,辅以人工统计的度量元,度量范围分为系统域、类域和函数域。
质量特性中的可维护性是指软件对已完成的部分进行调整需要多大的努力。质量准则中的可分析性是指软件便于发现失效或定位要修改位置的能力;可修改性是指软件便于修改或完善的能力;稳定性是指软件修改不会导致意外结果引发风险的能力;可测试性是指软件便于验证的能力。
2.1 新方法的计算原理
系统域、类域、函数域的复合准则值由自身所含度量元计算的准则值和子域传递准则值构成,权重分别为w1、w2,设每个成员函数的准则值对所属类准则值的影响权重相同,每个类准则值对所属系统准则值的影响权重相同。计算公式如下
式(1)中:ΩA,ΩC,ΩM分别表示系统域、类域、函数域度量元的合理范围,若度量元在规定范围内,则对应的度量元值为1,若在范围外,则对应的度量元值为0。ASMk为系统的第k个度量元取值,CSMik表示类i的第k个度量元取值,MSMijk表示类i的成员函数ij的第k个度量元取值。A表示系统域度量元个数,C表示类域度量元个数,M表示类域度量元个数。
式(2)中:ASC表示归一化的系统域准则值,CSCi表示归一化的类i的类域准则值,MSCij表示归一化的类i成员函数ij的函数域准则值。
式(3)中:CSCCi表示归一化的类i的类域复合准则值,bi表示类i中成员函数的个数。
式(4)中:ASCC表示归一化的系统域复合准则值,n表示系统中类的个数。
2.2 系统域度量模型
系统域选取了A1~A14共14个度量元,见表1,主要从类和成员函数的总体特点进行度量[9,10]。每个质量准则值选5个对其影响最大的度量元计算得到,见图1。系统域复合准则值等于自身准则值和类域传递准则值的加权和。
2.3 类域度量模型
类域选取了C1~C12共12个度量元,见表2,从类自身编码的特点和类与类之间的关系进行度量。每个质量准则值选5个对其影响最大的度量元计算得到,具体见图2。类域复合准则值等于类自身准则值和函数域传递准则值的加权和。
2.4 函数域度量模型
函数域选择了M1~M16共16个度量元,见表3,从函数自身编码的特点和函数之间的相互调用进行度量。每个质量准则值选5个对其影响最大的度量元计算得到,见图3。
3 试验验证
以某型雷达数据处理软件的代码作为评价对象,从中选取了12个类共89个函数,进行度量试验。以类1为例,类1共有5个成员函数,表4中包含了每个函数的函数域度量元统计值和根据图3所示的函数质量模型得到的每个函数的函数域准则值。
类1的类域度量元统计值如表5所示:
根据式(2)和图2计算得到类1的自身准则值,根据式(3)计算得到类1的复合准则值,在复合准则值的构成中自身度量元计算得到的准则值所占的比重w1=50%,子域传递准则值所占的比重w2=50%。结果如表6所示:
表7中记录了被评软件中所含的12个类的类域复合准则值。
从表7中可以看到,被评软件中12个类的复合质量准则值都超过了0.6分,达到了及格水平。总体上看,类的可修改性和稳定性较好,可分析性和可测试性相对较差,原因是被测软件成员函数与圈复杂度相关的度量元普遍超标。
下面是实验结果的玫瑰图,图4(a)、图5(a)和图6(a)是系统域、类域和函数域自身度量元的玫瑰图。图中正多边形的边界表示度量元合理范围的上下边界,不规则多边形是实测的度量元,*形点表示度量元在规定范围内,o形点表示度量元在规定范围外,A1~A14对应表1中系统域的14个度量元,C1~C12对应表2中类域的12个度量元,M1~M16对应表3中函数域的16个度量元。图4(b)、图5(b)和图6(b)分别是系统域、类域和函数域的准则值玫瑰图,图中正菱形表示准则值满分时的边界,浅色实线表示自身度量元计算得到的准则值,深色实线表示复合准则值,标注值为复合准则值。
由图4(a)中可以看到,被评软件在14个系统域度量元中有3个超标,分别为:A7重载函数所占比例、A10未被使用函数所占的比例、A13基本圈复杂度超标比例,说明系统中重载函数的比例较低,未使用函数的比例较高,基本圈复杂超标比例较高。根据图1所示的系统域质量准则模型,系统的可修改性、稳定性和可测试性受到小幅影响,在图4(b)中可以看到影响的程度,图4(b)中还可以看到复合后的系统域准则值与系统域自身度量元计算得到的准则值基本吻合。
由图5(a)中可以看到,被评类在12个类域度量元中有4个超标,分别为:C5成员函数基本圈复杂度均值、C6成员函数基本圈复杂度超标比例、C7成员函数圈复杂度与基本圈复杂度乘积的均值、C8成员函数圈复杂度与基本圈复杂度乘积的超标比例。根据图2所示的类域质量准则模型,被测类的可分析性、可修改、稳定性、可测试性均受到影响,其中可分析性和可测试性受影响较大,在图5(b)中可以看到受影响的程度,图5(b)中还可以看到复合后的准则值与类域自身度量元计算得到的准则值基本吻合。
由图6(a)中可以看到,被评函数在16个函数域度量元中有6个超标,分别为:M9出口语句条数、M11圈复杂度、M12基本圈复杂度、M13圈复杂度与基本圈复杂度的乘积、M14控制结构最大嵌套层数、M15可执行路径数。根据图3所示的函数域质量准则模型,函数的可分析性、可修改性、稳定性、可测试性都受到较大影响,其中可测试性受影响的程度最大,在图6(b)中可以看到这一结果。
4 结束语
目前雷达软件代码静态质量度量中存在度量手段单一,度量方法不能满足实际需要的问题。针对这些问题,本文提出了新的代码静态质量度量方法,采用通用的软件质量三层模型,划分了系统域、类域、函数域三个度量范围,考虑了质量准则从子域向父域的传递,并使用玫瑰图将代码静态质量直观地表达出来,试验结果表明该方法能够有效地对软件代码静态质量进行度量,帮助开发人员和管理人员了解代码的结构状态,有针对性的提高软件编码质量。需要指出的是,如何选取代码的静态度量元表示质量准则还没有定论,本文所提的质量模型主要参考了商业软件以及平时的工作经验,如何通过较为严谨的证明说明所选度量元的合理性可作为后期的研究内容。
摘要:通过软件静态质量分析可以定量评价软件代码的质量。文章通过对软件代码静态质量度量模型的研究,考虑质量准则在不同度量范围间的传递,结合雷达软件代码质量的关注点,提出雷达软件静态质量度量方法,以量化数据表示代码的质量水平,并以玫瑰图的形式表示出来。试验结果表明,新的度量方法能够有效地对软件静态质量进行度量,为设计师了解软件代码质量水平提供了客观依据,减少了软件质量评估中的主观性。
关键词:软件静态质量,度量方法,玫瑰图
参考文献
[1]Mccall J,Richards P,Walters G.Factors in software quali-ty[R].Technical report CDRL A003,US Rome air devel-opment centre,1977.
[2]Boehm B W,Brown J R,Kaspar H.Characteristics of soft-ware quality(TRW serious of software technology)[M].New York:Elsevier science Ltd,1978.
[3]Boehm B W,Brown J R.Quantitative evaluation of soft-ware quality[C]//ICSE′76Proceedings of the 2nd interna-tional conference on software engineering.University ofCalifornia:IEEE Computer society,1976:592-605.
[4]ISO/IEC 9126 1 2001.Software engineering Productquality Part 1:Quality model[S].
[5]GB/T 16260 1 2006.软件工程产品质量第1部分质量模型[S].
[6]吴坚,吴刚.软件质量模型的研究[J].计算机工程与科学,2006,28(6):125-130.
[7]何新贵.软件测试技术综述[J].中国计量学院学报,2008,19(3):187-193.
[8]孙梦璘,宋晓秋,巢翌.软件程序代码质量度量技术研究[J].计算机工程与设计,2006,27(2):325-327.
[9]Telelogic A B.Telelogic Tau Logiscope Audit C++Ref-erence Manual(Revision 6.5)[R].London,2008.
【静态代码分析报告】推荐阅读:
静态学校网站设计报告09-07
传感器实验报告--光纤传感器静态实验09-07
如何描写静态景物10-20
静态展策划书11-21
代码设计体验实验报告10-15
静态网页设计知识点06-22
线路设备静态检查管理办法(试行)09-09
struts2源代码分析11-17
Linux操作系统的权限代码分析06-29
机构信用代码05-30