zoukankan      html  css  js  c++  java
  • 怎么样做代码审查?

    近几天,算是掉进来一个巨大的焦油坑,我和另外三个同事备受折磨。现在三个有一个跑去装机器了,暂时不写代码,还有我和另外一个同事。

    其实代码复杂度不是很复杂,但是代码审查(简称CR)就是过不了,来来回回的改,若是去和较真CRer,貌似也理由也不是很充分,添加的CR评论多半是“我觉得”,“我认为”,CR代码的spell check和style check胜过代码的逻辑check。

    比如,你一个循环,可能多半人都会这么写:

    for(int i=0;i<100;i++)
    {
        ......
    }

    但是可能有些人会这么写

    复制代码
    // The max number is 100
    int maxNum=100;
    
    // Add some comments here
    for(int num=0;i<maxNum;i++)
    {
        .......
    }
    复制代码

    当然第二种方式看起来比第一种“优雅”,但是我认为第一种也不为过。

    现在没人关心这段代码能不能得到想要的结果,这个只能写code的人去心中有数了。

     可能有人会提到易读性,维护性,我想这个有时候有点小题大做了,代码足够简的情况下,如果还要掰扯个最优写法,吹毛求疵,不为过。

    如果写每一段代码都要考虑,这个是不是别人看会不会明白?会不会造成误解?是不是已经足够清晰?

    那这个就不是写代码,这个就是写文章了。

    我认为代码的易读性跟怎么写不太有关系,而是跟你整个框架的搭建,对行为的抽象精炼有关系。

    再举个例子:http://msdn.microsoft.com/en-us/library/ms243496(v=vs.110).aspx

    相信大家在写单元测试的时候广泛用到Assert,有这么一个方法。

    public static void AreEqual(
        Object expected,
        Object actual,
        string message
    )

    关于第三个message参数,msdn是这么定义的:

    messageType: System.String
    A message to display if the assertion fails. This message can be seen in the unit test results.

    说白了就是写一个信息,然后在断言失败的时候打印出来。

    但是注意,这虽然是一个message of error,但是msdn 没有将message定义为errormessage,errormsg等。也就是说没有给这个message定性,只是说在失败的时候打印一个message。

    其实你要是说写一个Assert.AreEqual("Bob", userName, message) 你会怎么写你的message。

    如果失败,他会打印出:

     Expected : "Bob"; Actual :"Boa", message

    先说我的想法,我是在message写明这个断言的作用,会写“Verify if the user name is 'Bob' or not”, 表明这个断言在验证什么。

    但是按照我们现在的写法,他需要写成“ Verify user name  ‘Bob’ fails.”, 区别在于我的是个不确定的语气,而规定是肯定句。

    其实有必要掰扯message怎么写吗?按照多数人来说,可能觉得微不足道。

    我其实两者怎么·写都可以接受,但是就因为我的这种写法,被谈话许久,其实最后的的结论就是看到第二种写法,第三者不用看code就知道哪里的功能错了。

    这个理由仍然不能让我信服,既然你能看到message,说明断言已经失败了,继而看到这个断言在验证什么也可以推知错误所在。

    最后我把messge给删除了,就光verify,不显示message,也不错吧。

    但是人在屋檐下,怎么着我都是能接受的,你让我怎么写我就怎么写,你制定出个rule出来,我follow就好了,不是吗?

    这就好比我不懂OO,我反OO难道我就不能写出好的code吗?不见得(我且认为满口OO的人,才是最不懂OO的人)

    =================================================================================

    代码如文章,现在几个人写一本书也不可能都文风一致。

    现在每天最头疼的,不是功能如何事先,而是纠结

    如何给一个变量起个名字,现在是能不用变量就不用变量,函数里套函数

    如何添加注释,现在是能不写就不写,写了 反倒多余

    代码空格对齐问题   哪里少了1个空格,哪里哪里要对齐。。。。。。

    新function能不写就不写,堆代码,写了有人会comment

    蛋疼的事情一大堆

    。。。。。。。。。。。。。。。。。。。。。。。。。。。

    新的代码怎么放置,添加一个文件如何命名,一个变量放在哪个文件里都需要请示。

    ====================================================================================

     关于代码风格,我认为只要不是堆砌,只要风格简洁,思维通顺,就为好的。而且你既然作为一个程序人员,基本的阅读别人代码的能力是必须的。

    好的代码能让人明白你的思维,你能明白你当时的设计思路。

    跟一同事飞总说了两句,说了句经典的:他们看不懂逻辑,所以就只能挑code style和format的错。

    啰嗦完毕,吃饭

    也请大家谈谈自己的意见,该怎么做CR经济又实惠?

    先谢谢大家

     
    分类: NotExact
  • 相关阅读:
    用Service充当Domain Object
    Scrum方法回顾
    为什么使用User Story Map
    前端状态管理之状态机
    项目进度管理注意事项
    单元测试遇到的最难的问题
    JS AMD模块的循环依赖
    jupyter notebook常用快捷键
    Jupyter-NoteBook-你应该知道的N个小技巧
    Python之配置日志的几种方式(logging模块)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2543258.html
Copyright © 2011-2022 走看看