首页> 中国专利> 一种计算机软件程序的代码统计工具及其实现方法

一种计算机软件程序的代码统计工具及其实现方法

摘要

本发明公开了一种计算机软件程序的代码统计工具,至少包括指定文件选定单元、代码行及总行数统计单元、排序单元、资料显示单元,关键在于它还包括:构造各类对话框的对话框创建单元,用于设置进度条参数的进度条设置单元,统计注释行并计算注释率的注释统计与计算单元,评估统计对象规范性的规范性评估单元,保存或显示统计结果的统计结果输出单元,使用该统计工具更便于对程序进行维护与管理。本发明同时还公开了一种统计方法。

著录项

  • 公开/公告号CN1395171A

    专利类型发明专利

  • 公开/公告日2003-02-05

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN01120029.4

  • 发明设计人 何秀平;

    申请日2001-07-06

  • 分类号G06F9/45;

  • 代理机构北京德琦专利代理有限公司;

  • 代理人张颖玲

  • 地址 518057 广东省深圳市科技园科发路华为用服大厦

  • 入库时间 2023-12-17 14:36:12

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-08-24

    未缴年费专利权终止 IPC(主分类):G06F9/45 授权公告日:20051221 终止日期:20150706 申请日:20010706

    专利权的终止

  • 2005-12-21

    授权

    授权

  • 2003-04-30

    实质审查的生效

    实质审查的生效

  • 2003-02-05

    公开

    公开

  • 2001-11-21

    实质审查的生效

    实质审查的生效

说明书

技术领域

本发明涉及程序代码的统计,特别是指一种可对程序代码作全面统计和评估的代码统计工具及其实现方法。

发明背景

目前,计算机软件的应用遍布各个领域,对人们的生活和学习起着极其重要的作用,于是,如何能更简单、方便、灵活地统计和管理计算机软件程序代码数据,成为软件编程人员以及管理人员最为关心的问题。在常用的WINDOWS环境下,一般的计算机软件工具,包括各类计算机程序编辑工具,如Visual C++ Studio,对程序文本行数及字符数都有统计计算。在这类工具中,通常是利用文本编辑器对文本换行符的识别、累加,达到对代码行数的统计;通过文本字符数的累加,达到对文件字节的统计。

但是,这些软件工具只能做到对程序代码行数与文件字节数的统计,而无法做到软件工程全面数据的统计,比如:对程序编写中注释行的统计,程序空白行的统计,统计数据的排序等等;没有对软件编写规范性的统计,比如:通过程序语法的分析,完成代码注释率的统计,并根据注释率判断程序的编写是否符合标准;没有一个及多个软件工程的全面代码行数的统计;也没有统计数据的输出接口,比如:以特定的窗口显示统计的详细资料,保存统计数据等等。如此,就使管理人员无法对某个计算机软件程序的编写有一个全面的了解,或是全局的概念,无法迅速地对该程序编写的规范性做出判断,进而也就无法准确的对该软件程序进行维护与管理。

发明内容

有鉴于此,本发明的主要目的在于提供一种计算机软件程序代码的统计工具,使其可以灵活的统计一个或多个同类或不同类型的程序代码,且能全面的统计指定程序的代码及注释的全部信息,进而做出程序规范性的评价,使程序员及管理人员更易维护与管理,为用户提供更多方便。

另外,本发明所采用的实现方法简单、灵活,且文件的保存与输出完全采用标准的格式,使得该统计工具可应用于各种软件编辑环境中。

一种计算机软件程序的代码统计工具,至少包括指定文件选定单元、代码行及总行数统计单元、排序单元、资料显示单元,它还包括:

对话框创建单元,用于构造主对话框、浏览对话框、保存对话框以及对话框中每项的下拉子对话框,并可在统计结束后改变主对话框的大小,增加统计结果详细资料显示框;

进度条设置单元,用于设置进度条长度、进度条步长以及进度条步长与文件数的对应关系;该进度条的设置是根据指定统计文件的数量计算得到的;

目录树遍历单元,用于根据指定目录,自动遍历以指定目录为树根的目录树,获得所有子目录中满足指定文件类型的文件;也就是说,一个软件工程的程序文件,无论它存在于多少子目录,无需单独指定路径,只需指定该软件工程的子目录,该统计工具自动遍历一个软件工程的所有子目录;

注释统计与计算单元,用于对统计对象中的注释行数进行统计,并根据注释行与总行数的比例计算出代码的注释率;所述统计对象为一个文件、或一个以上同类型文件、或一个以上不同类型的文件、或其组合;

规范性评估单元,根据注释率评估统计对象符合规范性的程度,并以规范性图标形式显示于统计结果详细资料显示框每行的行首;所述统计结果详细资料显示框中的列显示至少包括文件名、代码行数、注释行数、空行数、总行数和注释率,每列的首行设有列标题,通过鼠标点击列标题可按列进行快速排序,并按排序结果刷新详细资料显示框;每行代表一个文件,在行首设有规范性图标;所述的规范性图标可为“√”或“×”或

统计结果输出单元,用于保存或显示统计结果。

一种采用上述统计工具进行统计的方法,该方法至少包括以下的步骤:

a.系统同时创建一个代码统计线程和一个主进程,并创建主对话框;

b.当用户点击主对话框中的按钮时,判断是否为“浏览”钮,如果是,则显示浏览对话框,进入步骤c;如果不是,则判断是否为“统计”钮,如果是,则进入步骤d,否则,判断是否为“保存”钮,如果是,则显示保存对话框,进入步骤e,否则,判断是否为“详细资料”钮,如果是,则进入步骤f,否则,判断是否为“退出”钮,如果是,则退出系统,否则回步骤b;

c.选定统计对象的路径、名称和文件类型,并显示选定的统计对象资料,点击该对话框中“确定”钮,回到主对话框,进入步骤b;

d.首先根据已选定文件数计算并设定进度条参数;然后读取统计对象的文件名、文件类型,根据文件类型确定统计处理方法,最后读取每个文件的程序代码,调用代码统计线程,按照已确定的统计处理方法对代码行、注释行、空行、总行数以及注释率的进行统计,并在主对话框中显示统计结果,直到指定路径及所有子路径的全部指定统计对象统计结束后,退出代码统计线程,回步骤b;

e.首先将统计对象的代码统计数据总计、列标题以TXT的格式文本写入文件;然后将每个文件的代码行数、注释行数、空行数、总行数、注释率以及带有路径的文件名依次以TXT的格式文本写入文件,数据全部写入后,回到步骤b;

f.改变主对框的大小,同时打开统计结果详细资料显示框显示当前统计数据的详细资料。

步骤c还进一步包括:浏览框初始化时显示缺省路径、驱动器、当前文件及文件类型,当用户选定的驱动器、路径、当前文件及文件类型后,该统计工具根据选定数据刷新显示。

步骤c所述的统计对象为一个文件、或一个以上同类型文件、或一个以上不同类型的文件、或其组合。

步骤d所述的确定统计处理方法是在读取指定文件名,获得文件类型后,根据文件类型确定该类文件区分代码行和注释行的识别标识符。所述的显示统计结果,在统计过程中隐藏统计结果详细资料显示框,当统计完成时,自动弹出统计结果详细资料显示框。所述的进度条参数至少包括进度条的长度、进度条的步长以及步长与文件数的对应关系。

该步骤d中所述的进度条参数设定进一步包括以下步骤:

当预先设定的进度条默认值与所要统计的文件数量正好相等时,直接设定进度条的步长及每个步长对应的文件数;

当设定的进度条默认值大于所要统计的文件数量时,用文件数除以n值再与进度条长度相比,如果小于,则进度条长度等于文件数/n,然后进入步长设置步骤,如果大于,n值再加1,如果等于,则进入设置步长的步骤,其中,n值从2开始;

当设定的进度条默认值小于所要统计的文件数量时,用文件数乘以n值再与进度条长度相比,如果大于,则进度条长度等于文件数*(n-1),然后进入步长设置步骤,如果大于,n值再加1,如果等于,则进入设置步长的步骤,其中n值从2开始。

所述的统计结构详细资料显示框中的列显示至少包括文件名、代码行数、注释行数、空行数、总行数和注释率;每行代表一个文件,在行首设有规范性图标。

由上述分析可以看出,本发明的计算机软件程序代码统计工具及其方法可在WINDOWS环境下对计算机软件程序的代码数据进行统计,完成一个及多个软件工程代码行数、注释行数、程序空白行数、编写注释率的统计,完成统计数据的快速排序及统计数据的输出,其具有以下的优点和特点:

1)在对话框的设计上,在统计过程中隐藏统计结果详细资料的显示,而在统计结束后自动弹出统计结果显示对话框,以显示统计结果的详细资料,也可以在统计过程完成后点击“详细资料>>”钮,将统计结果显示窗口隐藏或弹出。本发明中的详细统计结果是以图表形式显示,并可在图表中按列排序,如此更便于用户对统计结果的全面了解,更方便、更灵活。

2)在指定文件类型时,可同时指定确认的某个文件名或泛指某类文件名,或指定某个目录,用户的选择更多样化、更方便。在指定目录时,只需指定统计对象的根目录,根目录的子目录及多级子目录可自动读出,使用户在指定目录时更简单、方便。

3)进度条长度、进度条图元步长以及步长与文件数的对应关系的设定全部是随着统计文件数量大小而变化,使得文件统计进度的显示更准确、直观。

4)本发明的方法不仅可以统计代码行数和总行数,还可以统计注释行数、空行数,并通过计算注释行与总行数的比例,得到注释率的结果,进而可通过注释率判断该统计对象的编程规范性如何,并在每个文件的前面以图标的形式显示出该文件符合规范性的程度,使用起来更直观、更一目了然。

5)统计结果具有快速排序。该排序由鼠标点击主对话框中详细资料列表的列标题而发起,多次点击列标题,即可根据点击的奇偶次来确定升降排序。当点击文件名列标题时,按文件名字符串大小排序,当选中其它列时,按数值大小进行排序。排序时以一行作为一组数据,行中点中的某列作为关键词,排序时按关键词排序,刷新显示时以一组数据为单元重新显示所有数据。排序操作在缓冲区中进行,完成排序后再显示到主对话框的表格中。

6)本发明的方法可支持多种类型文件的统计,更方便;且本发明的统计结果采用标准的数据格式输出显示或保存为文件,可以由任意的编辑工具读出并处理,适合在多种工具软件中应用,应用范围更广。

7)在主对话框中设有“退出”钮,统计过程中可通过按“退出”钮终止统计工作,以确保做大型软件工程的统计时,用户可选择取消统计。

附图说明

图1为本发明中简单主对话框的示意图;

图2为本发明中完整主对话框的示意图;

图3为本发明中浏览指定统计对象对话框的示意图;

图4为本发明中统计数据保存对话框的示意图;

图5为本发明系统总体结构示意图;

图6为本发明中设定统计对象的流程图;

图7为本发明中通过对话框指定统计对象的流程图;

图8为本发明中确定统计对象源程序文件名列表的流程图;

图9为本发明中确定进度条长度的流程图;

图10为本发明中统计指定对象源程序代码的流程图;

图11为本发明以C程序为例的分析统计流程图;

图12为本发明中用表格显示统计详细资料的流程图。

具体实施方式

下面结合附图及具体实施例对本发明再作进一步详细的说明。

如图1、图2所示,本发明是通过对话框完成人机信息的交互,只要选择主对话框中所设置的相应的按钮,就可以完成用户所需的操作。在计算机软件程序源代码统计的主对话框中,是以文本方式显示指定的要统计的对象,包括指定对象的路径及源程序文件类型。通过图形进度条显示指定对象代码当前的统计进度;在主对话框中以文本方式显示指定对象统计结果的总体数据,如:图中进度条上方的“总计”;通过图形列表显示统计结果的详细数据,并通过对主话框尺寸的改变,在统计结束后自动显示统计结果的详细数据。在主对话框上设置“浏览”、“统计”、“保存”、“详细资料”、“退出”等按钮,通过这些按钮来完成对任务的执行;可以通过对详细数据列表不同的图形图示,如:“√”“×”,来判断该软件程序编写的规范性;通过对详细数据列表的表头操作,完成按指定列数据进行升、降快速排序,比如:按文件名的字母顺序、按代码行或注释行或总行数或注释率的大小排序。

参见图3所示,在浏览对话框中,通过导航树完成软件工程及源程序对象的可视化指定,通过列表多选项完成一个工程中部分源程序对象的可视化指定。在统计对象的指定中,由于显示出来的文件路径、文件类型以及文件名都是合法有效的,从而保证了指定路径与文件类型、路径与文件名、路径与多个文件名的合法性。

图4所示为文件保存时的对话框,通过另存为对话框指定保存统计数据文件的文件名。该文件保存有对指定程序代码的全部详细的统计数据,其统计数据是在TXT文件中以TAB形式对齐保存的,因此可被任何数据库软件调用编辑。

如图5所示,图5为本发明方法的总体结构示意图。系统首先建立一主进程及一代码统计线程,在主进程中,以WINDOWS消息机制触发命令执行,实时响应用户操作,完成浏览、统计、显示、排序、保存、退出等功能。系统以线程机制,实现指定对象源程序代码的后台统计,完成源程序代码行数、注释行数、空行数、注释率等的统计。

一般被统计的源代码对象存储在计算机硬盘、软盘以及网络设备上,在这里全部作为驱动器对待,通过读取驱动器以及逻辑盘上的目录树,通过对文件类型以及目录或文件的选定,完成对要统计对象的指定。

如图6所示,统计对象的指定流程包括以下的步骤:

a.首先创建一浏览对话框,其中至少包括选定逻辑驱动器、选定当前路径、设定文件类型以及选定当前文件的几个显示框;

b.然后,创建逻辑驱动器的下拉列表框,读取并显示所有的逻辑驱动器供用户选择,由用户设定当前逻辑驱动器;

c.在当前路径下方创建目录树的列表框,读取当前目录树并以图形方式显示当前目录导航树供用户选择;

d.在文件类型处创建文件类型的下拉列表框,便于用户设置文件类型;

e.创建文件名列表框,按文件类型读取当前目录下的所有文件,并以文件列表方式显示出所有文件名供用户选择。

如此,即可通过可视化的人机交互,完成统计对象的指定。

如图7所示,当系统启动时,首先将WINDOWS当前路径读出,作为缺省的统计对象,然后再通过浏览对话框指定新的统计对象,其具体的实现过程是这样的:

a.在浏览对话框中选定逻辑驱动器,选定逻辑驱动器时,使用递归算法读取该逻辑驱动器的所有目录,按目录树结构以图形方式刷新目录树列表框。

b.在目录树列表框中,通过鼠标操作可展开当前目录并显示当前目录的下一级目录,当选中某一目录时根据当前文件类型,在文件列表框中显示所有满足条件的文件,并刷新上次该列表框中的内容,如果不选,则使用默认目录或默认文件。

c.在文件类型下拉列表框中选中文件类型,根据文件类型刷新当前目录下的文件显示,如果不选择文件类型,则使用默认文件类型。

d.指定统计对象以WINDOWS消息发起操作,指定统计对象有两种方式完成,指定一个目录时,表示统计该目录及以下所有子目录满足文件类型的源程序代码,此时系统完成一个及多个软件工程的代码统计;当指定一个或多个文件时,表示只统计指定的源程序文件。确定指定对象时,将指定的目录名或文件名保存到缓冲区中,在统计代码时根据缓冲区中的内容分析要统计的对象。

以往的文件统计一般只能指定单独文件或一类文件,而本发明中对统计文件的指定是任意的,可以是一个或多个文件;也可以是整个目录,该目录中文件类型不限,且可进一步包括若干子目录。用户可选择指定路径、指定文件、指定多个文件、指定几类文件等多种方式自由组合,使用起来更灵活、更方便。

如图8所示,确定统计对象源程序文件名列表时,先要从文件类型缓冲区中将确指文件名和泛指文件名区分开,所谓泛指文件名是指带有星号(*)等特殊字符的文件名。分开后,分别存放于文件名列表缓冲区及文件类型扩展名缓冲区中。当从指定目录及所有子目录中读取符合指定文件类型的所有文件名时,将其添加存放到文件名列表缓冲区中。如此,当用户选定某个目录或某类文件时,即可从文件名列表缓冲区中读出相应的文件,显示于文件名列表对话框中。

在主对话框中包含一个可显示统计进度的进度条,它的长短代表已统计文件的多少、比例。如何设计该进度条的长度,以使其与所统计文件的数量成比例,如图9所示。图9为定制进度条对象的具体流程,至少包括三步:首先,设定进度条长度的缺省默认值和最大值;其次,根据所要统计文件的数量计算进度条的实际长度;最后设置进度条的单元步长以及单元步长对应的文件数目。

在计算进度条的实际长度时,分三种情况:当设定的进度条默认值与所要统计的文件数量正好相等时,直接设定进度条的步长及每个步长对应的文件数;当设定的进度条默认值大于所要统计的文件数量时,用文件数除以n值再与进度条长度相比,如果小于,则进度条长度等于文件数/n,然后进入步长设置步骤,如果大于,n值再加1,如果等于,则进入设置步长的步骤,其中n值从2开始;当设定的进度条默认值小于所要统计的文件数量时,用文件数乘以n值再与进度条长度相比,如果大于,则进度条长度等于文件数*(n-1),然后进入步长设置步骤,如果大于,n值再加1,如果等于,则进入设置步长的步骤,其中n值从2开始。

在对不同类型的文件处理上,首先确定文件类型,然后按文件类型使用不同的统计算法,其具体处理过程如图10所示:

a.先从文件名列表缓冲区中取出所选的文件名,并在主对话框文本显示栏中显示出当前处理文件及其文件类型;

b.根据文件类型判断该文件是哪一种文件,读取代码行并按不同文件类型进行处理,直到所有代码都处理完毕;

c.记录该文件的总行数、代码行数、注释行数、空行数、注释率;

d.每个选定文件均按步骤b和c进行处理,直到处理完所有文件,然后累计记录所有文件的总行数、代码行数、注释行数、空行数、注释率,再根据文件数设置进度条的长度、步长及步长与文件数的对应关系;

e.在主对话框文本显示栏显示出已统计文件的总行数、代码行数、注释行数、空行数、注释率,并发送显示统计详细资料的消息。

在对文件进行统计时,是将指定对象文件名按目录树读入缓冲队列,然后以线程的方式从缓冲队列中逐个读取文件分析,按各类编程语法分析统计代码行数、注释行数、空行数以及代码注释率等等,一般以“退出”按钮终止统计工作。

在源程序编码中,每一行都是由ASCII字符组成,不同的字符组成不同的语法。在一行中可能全是程序代码,也可能全是注释字符,同时也可能是部分代码部分注释;在一行中既有程序代码又有注释字符时,它们的位置是任意变化的,注释字符可以在代码的前面、后面、中间;同时,在一行中还可能有多段注释,也可能存在一段注释有多行。但在任何程序中,注释部分都会以特殊的标识符与编码部分区分开,以C程序为例,无论注释在代码行中如何变化,其全部通过注释标识符“/**/”或“//”来识别注释的起始和终止的位置,不用考虑该注释与代码的位置关系,或该注释占用几行。

仍以C程序为例,对于标识符“/**/”,它总是成对出现,在“/*”与“*/”之间的任何字符都是注释内容。对于标识符“//”,它总是出现在注释的最前面,一行中在它后面的内容都是注释内容。当两类标识符出现重叠时,要看具体哪一个在前面,取最前面的一个即可。

空行不作为程序代码,也不作为注释行,它不参加注释率的计算,因为在统计中它是无用的。总行数是代码行数加注释行数;注释率是注释行数占总行数的比率,它与字符数不相关。当一行中出现多段注释时,注释行数计算为一行。

图11所示为具体对一行C程序的统计,当读到一行程序代码时,首先判断该行长度是否为零,如果是,说明该行为空行,则空行加1。如果不是,则先查找该行前面有无配对的“/*”和“*/”,如果有,则注释行加1,且同时查看在“/*”的前面或“*/”的后面有无字符串,如果有代码行也要加1;如果行中没有“/**/”,则再查找行中有无“//”,如果有,则注释行加1,且同时查看在“//”的前面有无字符串,如果有代码行也要加1;否则,代码行加1。如果行中同时存在“//”和配对的“/**/”,注释行只加一次。

图2完整主对话框中的详细统计资料可用一个二维表格描述,行就是指定对象的文件,列就是指定对象的统计结果的总行数、代码行数、注释行数、空行数、注释率、以及编程规范情况。该表格的显示过程如图12所示包括以下的步骤:

a.先在主对话框中创建列表控件,设置列表控件属性,所谓属性是指:行首是否有图标、列宽、列标题等信息;

b.然后通过修剪对话框外形来改变对话框尺寸,可将对话框的一部分隐藏掉;

c.通过注释率分析编程的规范性,然后用不同的规范性示意图标“√”“×”等图形符号来描述代码注释率是否达到了规定的比率要求,该图标设置在每行的行首,一般“√”表示完全规范,“×”表示不规范,表示部分规范;

d.在列表中按列显示:文件名、代码行数、注释行数、空行数、总行数以及注释率,每行代表一个文件,一行一行地显示直到完成所有文件的显示。

该表格保存时,是通过保存对话框,如图4所示,在任意路径下获取已有的文件或新建文件,保存相应的统计结果数据。文件以TXT格式的文本文件保存,任意数据库工具软件都可以读出并进行处理。在输出文件的前几行,首先写入统计对象代码统计数据总计、列标题等,从第4行开始写入某个文件的统计数据。写入文件中的数据与顺序和主对话框看到的完全一样,文件名是带全部路径名的文件名。如表一所示。总计:2813行,代码:2412行,注释:401行,空行:319行,注释率:14%代码行数  注释行数  空行数  总行数    注释率(%)         文件名

479      34       48       513       6      D:\mytool\frow\Browse.cpp

56       24       12       80        30     D:\mytool\frow\Browse.h

552      43       36       595       7      D:\mytool\frow\CountThread.cpp

57       31       16       88        35     D:\mytool\frow\CountThread.h

48       36       16       84        42     D:\mytool\frow\frow.cpp

27       22       14       49        44     D:\mytool\frow\frow.h

255      66       65       321       20     D:\mytool\frow\frow.rc

85       33       21       118       27     D:\mytool\frow\frowDlg.cpp

32       23       11       55        41     D:\mytool\frow\frowDlg.h

657      32       49       689       4      D:\mytool\frow\PCCOunt.cpp

87       35       17       122       28     D:\mytool\frow\PCCOunt.h

1     3     3    4      75    D:\mytool\frow\StdAfx.cpp

16    13    9    29     44    D:\mytool\frow\StdAfx.h

60    6     2    66     9     D:\mytool\frow\resource.h

           表一  文件保存的数据格式

本发明作为一种全新的代码统计方法在实际环境中应用时,可利用统计结果对编程人员的工作量、编程规范性等指标进行评估。其统计的对象不仅针对C文件,还可以统计BAT文件、INI文件、VHD文件。

总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号