LabVIEW评估代码复杂度
项目规划的主要任务之一是估计项目需要多长时间才能完成,需要多少开发人员以及项目将花费多少资金。准确的估算可减少项目落后于计划、超出预算和无法满足最终用户指定的要求的可能性。由于项目早期存在的不确定性,准确估算通常很困难。为了更准确地估计,经常使用称为代码复杂性指标的软件指标来帮助表示项目的大小并计算完成所需的时间。
如果需要一个代码复杂度指标来帮助提高在预算内按时交付LabVIEW项目的能力,可以使用LabVIEW节点数作为软件指标。
如果尝试将LabVIEW开发集成到需要更传统代码复杂度指标的项目估算流程中,NI发现LabVIEW节点和代码源行(SLOC)之间存在大致对应的关系。有关SLOC以及NI如何派生这种关系的更多信息,请参阅以下标题为传统的基于尺寸的代码复杂度指标和将LabVIEW节点转换为SLOC的部分。
LabVIEW中的代码复杂度指标
LabVIEW专业开发系统(PDS)中包含的VI计量工具可为LabVIEW代码提供测量。VI度量工具可以计算任何VI或VI层次结构中使用的LabVIEW节点数量。节点几乎是框图上的任何对象,包括功能、VI和结构,如循环和序列,但不包括标签和图形。节点类似于基于文本的语言中的语句、运算符、函数和子例程。与应用于基于文本的编程语言的许多传统软件指标一样,节点计数是基于大小的指标,可用于估计软件复杂性。
在LabVIEW PDS中,可以通过单击工具»高级»VI指标...来启动VI指标工具。VI指标工具还提供其他信息,例如全局和本地读写次数以及图表数量。下图显示了名为内存监视器的VI的VI指标窗口。在此示例中,VI指标显示整个VI层次结构中的节点总数,以及每个VI中的节点数。
改进LabVIEW估算
如果希望提高对LabVIEW项目所需的时间和要求的估计精度和可靠性,但不关心将复杂度指标转换为基于文本的等效指标,则只需选择一个具有代表性的LabVIEW指标。LabVIEW节点是NI推荐的软件指标。
然而,选择LabVIEW指标只是改善LabVIEW项目估算的第一步。要使此方法起作用,必须建立一个有关当前和先前项目的信息存储库。使用此历史信息,可以计算开发现有系统的各个组件所花费的时间,并将该信息与该组件中的节点数相关联。但是,在估计新项目所需的节点数之前,应首先执行以下几项操作。
1. 将新项目划分为子项目,以便与过去完成的任务进行比较。将项目缩减为子项目后,将更容易估计每个子项目所需的时间。
2. 在估计子项目完成所需的时间时,包括有关程序员经验水平的信息。虽然LabVIEW是一个高效的开发工具,但经验水平仍然影响个人生产力和代码效率。
3. 尽可能为LabVIEW代码实施一致的风格指南。如果不同的开发人员或组之间使用不同的开发方法,则应用基于大小的复杂性指标(如节点计数)可能会出现问题。
4. 查看代码以优化效率并鼓励可靠的设计。并非所有代码都以相同的质量水平创建,通常两个VI可以完成相同的任务,即使一个VI包含的节点比另一个少得多。
传统的基于大小的代码复杂性指标
对于基于文本的编程语言,一种流行的代码复杂性指标称为代码源代码行(SLOC)。SLOC用于描述代码的大小,可用于计算项目完成所需的时间和项目的成本,以及测量软件完成后的生产力。SLOC流行的一个原因是它相对容易计算;在C语言中,SLOC通常定义为以分号结尾的任何代码行(即不是注释或空白的人类编写的代码行)。许多供应商销售为任何给定源文件计算SLOC的工具。由于编程实践通常在组织内标准化,因此使用SLOC的公司通常会建立一个项目信息数据库,以提高其估计。
将LabVIEW节点转换为SLOC
图形编程显然对熟悉SLOC的项目估算器提出了挑战。可比较的LabVIEW代码复杂度指标(如节点数)必须转换为SLOC,以便LabVIEW开发,才能集成到许多公司中的项目估算实践中。
NI最近的两个软件开发项目涉及在LabVIEW和C语言中创建等等的软件。第一个项目是为LabVIEW和LabWindows/CVI(NIANSI-C开发环境)开发NIDAQmx API。在第二个项目中,NI为测试管理软件NI TestStand重新构建了LabVIEW和LabWindows/CVI操作界面。在完成两个项目后,NI将使用的LabVIEW节点数量与等效的CSLOC进行了比较,发现LabVIEW节点和SLOC之间大致存在对应关系。
但是,LabVIEW指标到SLOC的任何转换都是不精确的,因为基于大小的代码复杂度指标取决于所使用的编程语言。例如,高级语言编程语言(如C)中的语句可以提供比汇编语言等较低级别语言中的语句更多的功能。LabVIEW开发人员还具有不同的经验水平和编码风格,这会影响应用程序的开发,而且LabVIEW通常比其他开发环境高效更高,因此LabVIEW节点和SLOC之间的任何关联都成为近似值。
备用SLOC转换
如果担心公司的项目估算人员不理解LabVIEW节点的概念,那么一些LabVIEW开发人员还使用了另一种方法将LabVIEW代码复杂度度量转换为等效SLOC。在这种替代方法中,开发人员将磁盘上LabVIEW代码的大小与等效C对象文件的占用空间进行了比较。只要知道用于创建C对象文件的SLOC,就可以将LabVIEW代码转换为SLOC。在LabVIEW中,可以通过转到文件»VI属性»内存使用情况来查看VI的内存使用情况。
注意:内存使用情况功能不仅显示磁盘上LabVIEW代码的大小,还显示前面板和框图对象使用的内存以及VI中存储的数据。使用此方法将LabVIEW复杂度转换为等效SLOC,仅包含与代码关联的内存。
NI在软件开发期间未使用这种SLOC转换方法,目前无法提供关于从LabVIEW代码大小到等效SLOC的转换因子的指导。
虽然LabVIEW是一个图形化开发环境,但仍可以使用LabVIEW节点数等代码复杂度指标来评估完成过去项目所需的时间和精力,并帮助指导未来的开发。虽然单个LabVIEW节点与基于文本的代码行之间的关系并不完全相关,但NI通过对涉及等等LabVIEW和C代码的项目进行内部研究,发现了一个LabVIEW节点与一个SLOC的比率。为了改善项目估算结果,应跟踪多个项目的LabVIEW指标,将这些项目分解为更小的组件,并包括重要因素,例如个人开发人员编程经验和开发中的代码类型。
需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。