代码的有效性问题 [原]

统计自从学习Java以来到目前为止你写过的总共有效代码行数(去除空行,注释行) 学了这么久的Java,想必大家可能对自己写的总的Java代码行数感兴趣。所以今天我和大家分享一下统计自从学习Java以来到目前为止你写过的总共有效代码行数(去除空行,注释行) 首先我们要从文件中找到*.java的文件,然后对文件进行读取,用正则表达式匹配出总行数、空行数还有注释行数,最后用总行数减去空行数和注释行数就行了。 代码的总行数就是统计换行符号(\n)出现的次数,空行数就是统计两个换行之间都是空白的或空白字符符号(正则表达式匹配任何空白字符:\s),注释行数就是统计两个换行之间是含有注释符号(/ 阅读详情

   刚参加工作的时候,老同志向我介绍了一个有效代码行的概念,这个概念对我的工作有一定的影响,介绍给大家,希望对大家的工作有一点帮助。
   有效代码行的概念是相对代码行的概念而言的,我们平时比较重视代码行的概念,代码行是指在编程中程序员编写的所有代码的行数。包括。空行,注解行,以及代码行。这里要注意的一个问题是,很多人由于编写不规范,会将多个代码行写在一行,这不但会使代码行的计算发生错误,而且对代码的调试也很不便。 
   例如
      if(a==1){b=1;}else{b=2;}
   应该编写为
      if(a == 1){
           b = 1;
      }else{
           b = 2;
      }
这样代码行应该为5行而不是1行

有效代码行是实现相同功能的最短代码行。举一个事例说明一下,有c语言实现打印从1 到10000所有的整数。比较极端里编程方法是:
      print1to10000(){
          printf("%d /n",1);
          printf("%d /n",2);
          .
          .
          printf("%d /n",10000);
      }
该程序代码行为10002行,但另外一个实现完全相同功能的代码是
      print1to10000(){
          int i;
          for(i=1; i <=10000; i++){
              printf("%d /n",10000);
          }
      }
代码行为5行。也就是说第一个程序的代码行是10002,但它的有效代码行为是5行

   这是一个比较极端的事例。也许有人会说没有人会去编写10002行代码的那样的傻瓜程序。的确是这样,在这个问题上没有人会这么编写,但在开发的过程中类似的问题总是层出不穷。以后我会举一些事例说明。
关于有效代码的行的另外一个问题是,有效代码行应该是实际运行系统中的代码行。而不是你在项目中编写的所有代码行。举一个例子。我在一个项目使用c语言开发,由于我对一些技术难点不了解,所以要编写一些代码做技术准备,(假设我编写了5000行),当所有的技术难点解决之后,我开始进行编码,编写的代码行为 4000行,那么我的有效代码行应该为多少呢?是4000行,这是因为我原来编写的5000行代码是做实验用的,而在我真正开发的系统中并没有使用到他们,所以它不是有效代码行。
    这个例子从一个侧面说明了为什么有人一个月可以编写1万到2万行代码,却不能完成开发任务的问题。原因很简单,他编写的是代码行,而不是有效代码行。所以我们现在不必因为听说某开发人员是个高产量的代码生产者就感到自卑。(提出一个问题,如果项目失败了,有效代码行应该是多少)。
    关于有效代码行另外一个使人惊讶的问题是-----一个正常的软件开发人员的每天的有效代码开发量是10行到15行(国外的统计),怎么样很少吧。但你只要仔细想想就会发现其中的奥秘了,这是一个开发组织开发一个项目的的平均值,之所以会这么少,是因为在统计的时候要算上所有的工作人员(调研人员,设计人员,编码人员,测试人员,维护人员,文挡编写人员等)以及所有的时间(从调研开始计算时间)。而不是单指编程人员的每天的工作量。如果你认为你每天编写10到15行代码就完成任务了那就大错而特错了,实际上你如果将你手头一个刚做完的项目做一下计算,恐怕有效代码行也就是这个数了。
    关于有效代码的一个有趣的问题是,不要单纯的谈论有效代码行的问题(后者说把它作为评价代码的唯一标准),有时候适当地降低有效代码行效果反而更好,举一个例子。我曾经有编写过程序是进行一个矩阵转换,如下所示。


1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
转换为

1 2 6 7 15 16 28 29
3 5 8 14 17 27 30 43
4 9 13 18 26 31 42 44
10 12 19 25 32 41 45 54
11 20 24 33 40 46 53 55
21 23 34 39 47 52 56 61
22 35 38 48 51 57 60 62
36 37 49 50 58 59 63 64

    我的一个同时编写一个64行的赋值语句,当时我看完了觉得他很笨,于是自己花了2个小时编写一个复杂的转化语句,大约是30,40 是行,当时挺得意的,可后来一想不对,我的有效代码行是少了,但存在几个问题:
    1效率低,由于存在判断语句和循环语句,效率肯定要低,而效率是这个程序要强调的一个条件。
    2调试麻烦,我的同事只用了10分钟就完成了工作,而我用了2个小时。唯一欣慰的是我的有效代码行少,而且容易扩展性(但扩展性在这里用不上)。所以我想这应该是一个糟糕的只强调有效代码行的例子。

    下面,我再补充一点关于10002行的代码问题,我做的比较多的是信息管理系统,一次我们的一个项目组做一个项目,该项目的特点是要对十几个专业数据库的数据进行管理。专业数据库之间没有相互联系。独立成为系统。操作主要是添加、删除、修改、查询、统计。各子系统除了数据项不同以外操作过程是比较相类似的。由于项目比较简单,就交给了一个新工作人员开发(需求是比较完善的)。他先实现了一个专业数据库系统,然后采用copy的方法在很短的时候实现了其他的系统(当然要做一些修改)。开发的速度很快。但到了测试的时候问题就来了。我们的测试人员只要在一处发现了问题,其他的系统必然存在相同的问题。如果他要修改一个错误,就要同时修改十几处相同的错误。编写过代码的同志们都知道做这种相同的重复性的编码是很烦人的。改了一阵他就受不了了,而且更可怕的是,他修改的地方仍然会发现新的错误。而一旦修
改又是十几地方需要同时修改,你说烦人不
    最后总算基本过关了。但他花费的时间和精力是很大的,而且对软件开发产生了畏惧心理,以后再也没有过code工作。从这个工作事例来说我们不难发现一些问题。
    1采用copy的方法编程在软件开发过程中是一种常见的现象,特别是对一些刚参加的软件开发人员和非软件专业的工作人员(我在12年的开发过程中发现的一个规律)。
    2采用这种开发方法虽然开始的速度会快一点,但实际上以后的维护工作是非常巨大的。
    3这种编程能够方法和10002行的编程方法从原理上来说是相同的。
    其实很多道理是很简单的,相同的问题,我也遇到过,我自己的工作300个表,每一个表要7个界面,也就是说要2100个界面,bs系统的界面开发是很浪费时间的一个人一天最好也就是一个界面,2100个界面估计要87个人月,所以如果采用copy的方法我就死到家了,后来我们采用了动态开发的方法只用了14个人月。而且系统维护起来很方便。(不论是修改界面还是新添加功能速度都很快)
    如何代码行的有效性,编程经验不多的确是很难编写有效的编码行。一个建议是,如果你完成了一个功能的开发,可以采用别的方法再次开发(当然是在不影响工作的情况下的)。我自己的开发经验是这样的,如果是第一次实现某个功能。实现了即可(满足系统要求),但要做第二次编码(或者叫迭代吧),将其中暴露的问题解决(诸如函数代码短过长,模块划分不合理,不好的变量名等问题),一般来说,第二次开发完成之后,代码是比较合理的,而且代码段会短很多。另外在算法上进行一些改进,只要不断总结进步会很快(别学狗熊掰棒子)。
    有效代码行的的问题的确比较复杂。原来的定义是:完成一个相同功能的最短代码行数。我自己扩充了几个附加条件:
    1必须在实际系统使用的代码。
    2有效代码行不是衡量一个代码好坏的唯一标准。
至于如何评价一个别人写的代码的有效代码行。我想需要考虑多个方面:
    1需求是否合理,不合理的需求只会增加代码行,不会增加有效代码行
    2框架是否合理。解决相同问题可以有不同的方法,方法的不同代码行的差别很大,但有效代码行应该是相同的
    3不同开发环境的有效代码行的差别很大,应该区别对待。
    4对基本的算法的实现应该进一步完善,获得最佳实现方法
    5积累开发数据(在开发过程发生开发的数据),获得一个基本检测数值(可惜我目前还没有发现关于这方面的资料)
    6系统自动生成的代码行不算有效代码行。
 

测试用例Passed和Failed有效性问题 上一篇关于测试用例设计的博文《设计测试用例的四条原则》中,介绍了设计测试用例的四条原则。本篇结合最近工作遇到的一个小插曲,介绍一下测试用例本身Passed和Failed的有效性问题。 阅读详情

相关推荐

POI删除Excel中数据有效性

读到这篇文章,请停下您Ctrl+c,Ctrl+v的脚步。因为这并不是真正的删除数据有效性,而是通过一种方式实现多次为某列设置数据有效性。我是真的百度没查到,Google没查到,官网也没找到关于使用POI删除数据有效性的方法。这里用到的思路是准备一个并没有设置过数据有效性的原始模板,每次修改数据有效性都复制这个模板,然后在新的模板上操作。 本文将致力于解决以下几个问...

小小本科生 4974

C++统计代码注释行数 & 有效代码行数 & 代码注释公共行 & 函数个数

问题来源,在14年的暑假的一次小项目当中遇到了一个这样的问题,要求统计C++代码的注释行数,有效代码行数,代码注释公共行数,以及函数个数。   下面稍微解释一下问题,   1)注释行数:指有注释的行,包括有代码和注释的公共行(如:3,4,15,22...)   2)有效代码行:指有代码的行,包括有代码和注释的公共行(如:1,4,11,15,25....)

qq_34042967的博客 4025

使用python绘制有效性前沿

python计算有效性前沿

tingyuanyuan的博客 4902

目录下代码行数统计小工具(python)

代码行数统计

qq_43858368的博客 455

代码行数统计与Code Review:如何高效结合?

本文旨在解决开发者在Code Review中常见的痛点:如何快速定位需要重点评审的代码区域?如何避免“大海捞针”式的低效评审?我们将聚焦“代码行数统计(LOC)”这一基础但关键的数据指标,揭示它与Code Review的内在联系,并提供可落地的结合方法。本文将按“概念→关系→工具→实战”的逻辑展开:首先用生活案例解释LOC与Code Review的核心;然后分析二者如何互补;接着通过Python代码演示LOC统计的实现;最后结合实际项目场景,教你如何用LOC数据优化评审流程。LOC统计。

软件工程实践的博客 930

测试创新——测试有效性

目录 一、为什么需要验证测试的有效性? 2、 测试有效性度量的方法有哪些? 3、 变异测试 4、如何往代码注入变异 5、变异与业务 6、 总结 一、为什么需要验证测试的有效性? 测试工作,从技术角度看,可以理解为是验证技术实现的有效性。 如果技术实现符合业务需求,则技术实现是有效的,否则技术实现是无效的,换句话说,就是通常意义上说的代码存在bug。 那么测试工作可以验证技术实现的有效性, 但是存在一种情况: 如果测试工作 有500+自动...

我的E家 1758

3.10分层遍历二叉树-扩展问题

1.问题定义 给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号。 要求遍历输出的结果分别为图2,图3和图4,其中图3和图4是扩展问题。                                           图1

chhuach2005的专栏 1081

统计源代码行数及有效代码

统计源代码行数及有效代码,可以过滤注释行,可以自定义统计方式

【机组组合】基于Benders分解算法解决混合整数规划问题——机组组合问题(Matlab代码实现)

Benders分解算法由Jacques F. Benders在1962年提出,是一种用于求解混合整数规划问题(Mixed Integer Programming Problem, MIP)的有效方法。在MIP中,同时包含整数和连续变量,这使得问题的求解变得复杂。Benders分解算法通过引入复杂变量(complicating variables),并将这些变量固定,从而将原问题分解为相对容易解决的子问题。

yyds123yyds147的博客 77

统计代码的有效行数

开发常常要时行测试的代码覆盖率,要对每个人的代码行数进行统计

C#实战:手把手教你用SerialPort实现RS485 ModbusRTU通信(附完整代码)

本文详细介绍了如何使用C#的SerialPort类实现RS485 ModbusRTU通信,包括硬件准备、串口配置、数据收发核心逻辑及高级通信技巧。通过实战案例和完整代码,帮助开发者快速掌握工业级通信框架的构建方法,提升设备间通信的稳定性和效率。

weixin_29207533的博客 255

代码的有效性问题

代码的有效性问题    刚参加工作的时候,老同志向我介绍了一个有效代码行的概念,这个概念对我的工作有一定的影响,介绍给大家,希望对大家的工作有一点帮助。     有效代码行的概念是相对代码行的概念而言的,我们平时比较重视代码行的概念,代码行是指在编程中程序员编写的所有代码的行数。包括。空行,注解行,以及代码行。这里要注意的一个问题是,很多人由于编写不规范,会将多个代码行写在一行,这

可克技术 4052

Qt+VS集成高德红外相机SDK与OpenCV的采图实践

本文详细介绍了在Qt和Visual Studio环境中集成高德红外相机SDK与OpenCV的完整实践方案。涵盖环境配置、SDK初始化、图像采集与处理、多线程优化等关键技术点,重点解决了高德红外相机数据转换、温度信息提取和Qt界面显示优化等核心问题,为红外图像处理应用开发提供可靠参考。

palm99的专栏 645

NXP Cortex-M系列MCU用户代码有效性验证问题

用Jflash烧写程序时提示错误:Your program data does not contain a valid checksum. Without a valid checksum your application will not run. 查阅手册: 参考:校验和自动填充实现方法

weixin_43680485的博客 1236

易盾滑块的js逆向分析

基于易盾的滑块验证码进行逆向分析,最种实现全系列的验证码逆向,包括滑块、点选、推理拼图等多种类型。

shanf7921的博客 3万+

OpenClaw入门必装Skills(附使用场景)

很多同学安装了OpenClaw后,但却不会使用,就相当于你只是拥有了一副强大的躯干,却没有给它装上能够灵活执行任务的“手脚”和负责思考决策的“大脑插件”——Skills。没有这些核心能力的支撑,OpenClaw只是一个“空壳”,无法真正应用到实际业务场景中,更谈不上提升效率或解决复杂问题。所以,安装只是第一步,要真正让OpenClaw“活”起来,为我们所用,就需要给OpenClaw安装各种Skills,这个过程就是养虾的过程。

十二测试录 3225

7个主流LLM在代码翻译任务中的有效性评估

人工智能 (AI) 融入编程生态系统彻底改变了该领域,并在代码翻译方面取得了特别重大的进展。本文的目的是讨论一系列先前的研究,并分析直接从这些基础研究中获得的结果。需要强调的是,这里提出的结论不仅限于这些发现的简单汇编;它们代表了从引用的研究中提取的数据与作者进行的原始研究之间的融合。这种方法产生了丰富的综合,将现有知识与新观点相结合,并为人工智能辅助代码翻译领域做出了重大贡献。对于这项研究,选择了在代码转换任务中表现出更大潜力的大型语言模型 (LLM)。

新缸中之脑 1903

项目管理知识体系(PMBOK)中的质量规划详解

你是否遇到过这些场景?软件上线后用户投诉“功能漏洞多”,团队连夜返工;装修完的房子墙面开裂,施工方和业主互相推诿;新研发的手机电池续航不达标,被迫延迟发布。这些问题的根源,往往是项目启动时没有做好质量规划。本文聚焦PMBOK中“质量规划”(Plan Quality Management)过程,覆盖其核心概念、操作步骤、工具技术与实战应用,适用于IT、建筑、制造等各类项目场景。

项目管理的博客 1118

Session的线程安全问题及有效性问题

1、线程安全问题 Session接口的相关实现由Tomcat容器提供,本身保证线程安全。但Session中保存的对象,其线程安全当然要由开发者保证。线程安全问题隐蔽、偶发,出了问题不好定位修正,一定要注意线程安全问题。通常,通过如下代码创建或者取得Session引用: HttpSession session = request.getSession(true);                ...

山不转的博客 2930

基于Matlab生成并可视化多架飞机轨迹仿真(附源码)

这使我们可以轻松地对直线和恒定转弯进行建模,并具有额外的自由度,可以在直线段和曲线段之间平滑过渡。同样,空气中的物体会经历重力的影响,遵循抛物线(二次)路径。需要更多的航点来适应这些变化,但是轨迹的其余部分需要更少的点。第三个轨迹,如下所示,代表了一架速度更高的飞机。它由两个恒定的转弯组成,飞机在第二个转弯的中间减速。一旦知道(并设置了)物体穿过空间的物理路径,物体的速度作为行进距离的函数就通过三次埃尔米特插值来确定。在此示例中,学习了内部使用的插值符背后的概念,并展示了如何使用少量航点重现场景。

珞瑜的博客 5464

YOLOv13改进策略【小目标改进】| Shape-NWD:融合改进,结合Shape-IoU和NWD 更好地适应小目标特性

Bw−wgt2h−hgt2weight2Bweight2w−wgt​2h−hgt​2​其中weight2weight = 2weight2。

Limiiiing的博客 588

【质量】如何评估测试用例的有效性

一、定义 测试用例有两个比较关键的部分: 调用被测代码:例如RuleService.getLastRuleByClientId(ClientId) 进行结果Check:例如AssertEqual(OrderId,“ABCD1234”) 希望一组测试用例不仅能够“触发被测代码的各种分支”,还能够做好结果校验 当业务代码出现问题的时候,测试用例可以发现这个问题,认为这一组测试用例是有效的 当业务代码出现问题的时候,测试用例没能发现这个问题,认为这一组测试用例是无效的 对测试用例有效性的理论建模是: 测试

sysu_lluozh 3316

基于STM32设计的老人摔倒检测报警系统【升级版】(235)

在 `235 基于STM32设计的老人摔倒检测报警系统(OneNet+MQTT)` 项目基础上增加了心率、血氧、体温测量3个功能。

1511

KEIL生成的bin文件如何通过代码有效性检测?

说明本文的示例是基于LPC1768 项目中使用的是NXP的MCU,在实现IAP的过程中,发现生成的bin文件不能通过代码有效性检测。 然后在"大三巴科技" 博客里面看到了一篇文章中介绍了该问题的解决方法: “ 利用ElfDwT.exe先把axf格式的进行修正,让后再把axf 转换成bin 使用方法如下: keil-project-options for tar

佐佐沐 4678

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

phpSpreadSheet 设置数据有效性

phpSpreadSheet 设置数据有效性 近期项目有数据批量导入导出的需求,研究了几天,最后被数据有效性难住了,导出的数据如果过多,数据有效性识别不了,则自动给删除了,查了很多资料,最后得出的解决方案是再创建一个sheet2,将要设置数据有效性的数据导出在sheet2表中,然后在sheet1表中将sheet2表中的数据读出来,完美解决~~~ 上代码 $spreadsheet = new Spreadsheet(); $worksheet = $spreadsheet->getA

weixin_42027503的博客 1198

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 读书,买书,阅读资料的方法 [原] ..
下一篇: 动态生成技术 [原]
bbbian
博客等级 码龄26年 90粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值