编码消耗率CCR,“上帝代码”,反射,简洁代码

在前文( (32条消息) 陈旧语法密度之六——用Map消灭if-else if-else,“上帝代码”_陈勇的博客 - Scrum 敏捷开发培训咨询,绩效管理,团队管理,《火星人敏捷开发手册》-优快云博客)中,笔者曾经提到一些实现每功能点所需代码行数的数据。时过境迁,现在重新修订一下当年的数据。

修订的主要信息源是2016年Capers Johns的《软件工程通史》发布的国际数据,以及笔者近年来咨询过的企业的真实团队数据。值得欣喜的是,所有数据均有大幅度改善。

功能点定义

这里所说的功能点是一种国际标准,它大致定义是:

功能点FP = 接口数 * 5.4 * 应用类型调整因子。

接口数大致等同于swagger ui中的接口数量,故可以自动获取。

5.4是历史原因造成的一个常数。

“应用类型调整因子”是众多调整因子中起决定性作用的一个。大致可以取值为:

OA类=1.0,多个应用集成=1.2,图表=1.3,一般金融=1.8,通信软件=1.9,嵌入式=2.0

其他未提及的应用可通过对比找到大致数值。

同一类型的应用尽管会有所不同,但从大数定理的角度看,其软件的复杂程度相当。实际上上述调整因子的数值本身就来自业界统计数据,也会随着业界的变化而变化。

编码消耗率CCR

编码消耗率表明了完成相同功能(包括正常和异常功能)所需的逻辑代码行数,其定义为:

编码消耗率CCR = 逻辑代码行数LLOC / 功能点数 FP。

CCR是Code Consuming Rate的缩写,此概念在国内几乎无人提及,但在国外的研究较多。究其原因,很大程度上是国外要通过CCR来研究不同语言语法、框架的设计与演进,对代码简洁性的影响,从而设计出下一版本的语言语法(甚至一种新语言)。

注意CCR不是一个通用的名词,国外的众多研究者并未为其命名(或虽命名但未流传),这个名字是笔者自己起的。

编码消耗率越低,则代码的精美程度越高。一半代码几乎意味着:一半的打字时间,一半的工作量,一半的缺陷,远低于一半的维护工作量。

此外,逻辑行而非物理行的定义中包括了对自然语言的尊重,所以将两行代码合并到一行,或将所有变量名都改成一个字母这些奇葩方法,并无助于降低CCR。删除错误处理代码以降低CCR也是不可行的,因为CCR是实现“相同功能”所需的代码行数。

上帝代码

指理想的,多一个字符则多,少一个字符则少的代码。

多数人都不相信存在上帝代码,这是因为多数人的代码距离上帝代码非常遥远。如果不长途旅行,人类就意识不到地球是圆的(东西方向旅行足够远会发现时差,南北方向则会发现气温甚季节变化,实际上最早计算出地球直径的就是古罗马时期一位去过埃及南部的旅行者);不发明望远镜,人类也意识不到地球乃至太阳不是宇宙中心。

在充分使用面向对象、设计模式等方法时,高手的代码与上帝代码“

CCR(Charnes - Cooper - Rhodes)模型是数据包络分析(DEA)中的经典模型,用于评估决策单元(DMU)的相对有效性。以下是一个使用Matlab实现CCR模型分析的示例代码: ```matlab % 输入数据 % 假设有n个决策单元,m个输入指标,s个输出指标 % X是输入矩阵,每列代表一个决策单元的输入值 % Y是输出矩阵,每列代表一个决策单元的输出值 X = [1 2 3; 4 5 6]; % 示例输入矩阵 Y = [7 8 9; 10 11 12]; % 示例输出矩阵 [n, m] = size(X); % 获取决策单元数量n和输入指标数量m s = size(Y, 1); % 获取输出指标数量s % 初始化效率值向量 efficiency = zeros(n, 1); % 对每个决策单元进行CCR分析 for k = 1:n % 定义线性规划问题 f = [zeros(m, 1); -1]; % 目标函数系数 A = [X' -Y(:,k)']; % 不等式约束系数矩阵 b = zeros(n, 1); % 不等式约束右侧向量 Aeq = [Y(:,k)' zeros(1, m)]; % 等式约束系数矩阵 beq = 1; % 等式约束右侧向量 lb = zeros(m + 1, 1); % 变量下界 ub = []; % 变量上界 % 求解线性规划问题 [x, fval] = linprog(f, A, b, Aeq, beq, lb, ub); % 计算效率值 efficiency(k) = -fval; end % 输出每个决策单元的效率值 disp('每个决策单元的CCR效率值:'); disp(efficiency); ``` ### 代码解释 1. **数据输入**:`X` 是输入矩阵,每列代表一个决策单元的输入值;`Y` 是输出矩阵,每列代表一个决策单元的输出值。 2. **循环分析**:对每个决策单元进行CCR分析,通过线性规划求解其效率值。 3. **线性规划问题定义**:目标是最大化效率值,同时满足输入输出的约束条件。 4. **求解线性规划**:使用 `linprog` 函数求解线性规划问题。 5. **输出结果**:输出每个决策单元的CCR效率值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值