需要代码度量。最佳代码中 h 文件中的 LOC 与 cpp 文件中的 LOC 的比率

Code metric required. Ratio of LOCs in h-files to LOCs in cpp-files in optimal code

我可以估计一下,在给定 h 文件中的 LOC 数量的情况下,最佳代码(桌面应用程序)中的 C++ LOC 数量是多少?

背景: 我正在进行一项工作量估算和一项将 C++ 软件移植到 C# 的计划。

我的第一个想法是创建一个基于 LOC 的粗略估计,并使用移植到剩余 LOC 的 LOC 来跟踪过程。假设移植速度为 200LOCs/天,我得出 1.5 人年。如果我把这个数字给客户,我肯定拿不到合同。

仔细查看代码后发现,代码效率很低,使用了很多C&P代码,实现了自己的容器-类,等等。 所以 C++ 的 LOC-Number 似乎没有反映实现相同功能的努力。现在我的假设是,头文件应该更好地反映功能。

没有。 header 文件的大小是关联代码文件大小的一个非常糟糕的代理。 header 只显示 API 的入口点,它可以根据 API 的要求隐藏尽可能多的东西。

换句话说,声明单个函数的 header 仅表示该实现文件中有一个 public 函数。实现文件中可以只有一个函数,也可以有数百个。它们都不是更好,任何一种开发方法都没有错。这只是意味着您不能使用 headers 来估算工作量。

对于 100k SLOC 程序,使用 SLOC 作为衡量标准会有些牵强,因为您将花费更多时间进行测试而不是开发。如果您有权访问应用程序的功能文档,请考虑改用 function points。据我所知,它们是周围较少损坏的启发式算法之一。

就开发而言,不要忘记您可以从 C# 调用 C++ 代码,并且 C++/CX 可以集成 C#。如果您可以增量重写或多或少的独立组件,这可以减轻一些移植痛苦。

头文件可能不是指标。

头文件通常包含函数声明 -- 关于如何调用函数的接口或说明。

源文件中的函数可以是零条语句,也可以是数百行代码。不能通过查看函数声明来判断函数中的语句数或行数。

许多 LOC 计数器包括头文件和源文件。

与 objective 不同,但出于好奇,我曾经使用 cloc 检查我的 LOC,以了解处于中间(pre alpha)阶段的项目。它没有很好的记录,并且它的一些地方编码有点脏或没有很好的计划。

C++                             100           2545           3252          11680
C/C++ Header                    108           2847          12721           9077
C                                 4           1080            971           6298
CMake                            33            241            161           1037
Bourne Shell                      4             16              0            709
Python                            8             90             72            423
CSS                               1             63             21            422
PHP                               5             23             21            295
Javascript                        5             42             23            265
JSON                              4              0              0            183
XML                               1             11            171             72
make                              1             13              0             15
Bourne Again Shell                2             10              0             14

如您所见,header LOC 与源 LOC 之间的比率为 0.777。然而 average 不是一个好的衡量标准。但连同其他指标,例如评论线 可能会画出一些模糊的线来表示不同的参数和发展阶段。需要对众所周知的代码库进行更多研究才能得出好的启发式方法。

但是最后无论你采取什么措施,它都可以得出一个可能是错误的假设。