LabVIEW评估代码复杂度

简介: LabVIEW评估代码复杂度

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中的节点数。


9885461618acbf102cd2d654fbad2525.png


改进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的内存使用情况。


2f9bf3d796302273fa83815dce2c601d.png



注意:内存使用情况功能不仅显示磁盘上LabVIEW代码的大小,还显示前面板和框图对象使用的内存以及VI中存储的数据。使用此方法将LabVIEW复杂度转换为等效SLOC,仅包含与代码关联的内存。


NI在软件开发期间未使用这种SLOC转换方法,目前无法提供关于从LabVIEW代码大小到等效SLOC的转换因子的指导。


虽然LabVIEW是一个图形化开发环境,但仍可以使用LabVIEW节点数等代码复杂度指标来评估完成过去项目所需的时间和精力,并帮助指导未来的开发。虽然单个LabVIEW节点与基于文本的代码行之间的关系并不完全相关,但NI通过对涉及等等LabVIEW和C代码的项目进行内部研究,发现了一个LabVIEW节点与一个SLOC的比率。为了改善项目估算结果,应跟踪多个项目的LabVIEW指标,将这些项目分解为更小的组件,并包括重要因素,例如个人开发人员编程经验和开发中的代码类型。


需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。

相关文章
|
存储 算法 开发工具
文档管理软件版本控制算法的代码例子
提供一个基本的示例,展示如何使用Python中的字典数据结构来模拟一个简单的版本控制系统。
536 0
|
3月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
63 4
|
5月前
|
UED
如何评估LabVIEW需求中功能的必要性和可行性
如何评估LabVIEW需求中功能的必要性和可行性
32 2
如何评估LabVIEW需求中功能的必要性和可行性
|
5月前
|
监控 网络协议 安全
由于楼层自动化系统的复杂性和多样性,很难给出一个通用的Python代码示例,因为每个系统可能使用不同的硬件、通信协议和软件接口。
由于楼层自动化系统的复杂性和多样性,很难给出一个通用的Python代码示例,因为每个系统可能使用不同的硬件、通信协议和软件接口。
|
数据采集 机器学习/深度学习 监控
文档管理系统的未来:决策树算法的性能评估与优化
决策树算法在文档管理系统中的应用主要是用于识别用户的操作行为,例如鼠标点击、键盘输入等。在实际应用中,决策树算法的性能表现受到多个因素的影响,包括数据集的大小、特征数量、树的深度等。
210 0
|
机器学习/深度学习 算法 Windows
算法的复杂性分析
算法的复杂性分析
333 0
算法的复杂性分析
|
测试技术
正交试验测试用例设计及工具推荐
在科研和生产实践中,人们往往要做许多次实验来进行某项研究。实验条件一般包括很多因素,当因素的值不同时,实验的结果也不一样。如果想把每个因素的每个值都要实验一遍,总实验数就等于各因素的值的个数的乘积,而这个数往往很大,超过了可接受的成本。 例如,假设某个实验由A,B,C,D四个因素,每个因素都有10个不同的取值,那么如果想把每个因素都考虑到,我们需要做 10*10*10*10=10000次实验。 为了减少实验数目,我们必须选出那些最有代表性的例子。于是,就要用到了正交表法(Orthogonal Array Testing Strategy)。
347 0
正交试验测试用例设计及工具推荐
|
算法 小程序
软件复杂性表现,如何计算?
软件复杂性度量的参数很多,主要有: • 规模,即总共的指令数,或源程序行数。 • 难度,通常由程序中出现的操作数的数目所决定的量来表示。 • 结构,通常用于程序结构有关的度量来表示。 • 智能度,即算法的难易程度。
283 0
|
存储 缓存 分布式计算
深入分析软件复杂度
深入分析软件复杂度
深入分析软件复杂度
|
算法
使用贝叶斯统计来进行更好更直观的A/B测试
使用贝叶斯统计来进行更好更直观的A/B测试
239 0
使用贝叶斯统计来进行更好更直观的A/B测试