代码评审

谷歌开源代码评审规范:好坏代码应该根据这些来判断

孤人 提交于 2019-12-13 13:20:45
谷歌开源了一套代码评审(Code Review)规范,它是谷歌一套通用的工程实战指南,几乎涵盖了所有编程语言与各种类型的项目,这个规范代表了谷歌长期发展以来最佳实战经验的集合,谷歌表示希望开源项目或其他组织能够从这套规范中受益。 代码评审,也称代码复查,如果一个团队正在使用任务分支工作流,那么在所有代码编写完成并通过自动化测试之后,在代码合并之前,就会启动代码评审。通常的目的是查找系统缺陷,保证软件总体质量和提高开发者自身水平,代码评审的所有工具和过程都是为了这个目的而构建的。代码评审对于敏捷团队来说的作用如下: 代码评审共享知识 通过代码评审可以更好的进行工作评估 代码评审能让你享受休假 通过代码评审指导新工程师 既然代码评审要进行众多的检查,那么找一个优秀的评审者就非常重要了。一般对于变更列表的不同部分,都会有不同的评审者进行细致的审查。当然如果是结对编程,且你的队友能进行高质量的代码评审,那么这样写的代码一般可以视为已经过评审了。此外,我们也可以进行面对面的评审,评审者会问开发者一些问题。 根据谷歌的项目描述,代码审核规范为两套独立文档组成,代表了两方面内容的最佳实践: 代码评审者的指南 CL 作者指南 在其中一些文档中使用了一些术语,如下: CL:表示“变更列表(changelist)”,意思是已经提交到版本控制或正在进行代码检查的一个独立的更改。其他组织通常称为“改变”或

软件测试面试五十道题

那年仲夏 提交于 2019-12-10 20:19:36
目录 1. 什么是软件测试?...................................................................................................................................... 3 2. 软件测试的目的?................................................................................................................................... 3 3. 软件测试的原则?................................................................................................................................... 3 4. 请分别阐述目前白盒测试和黑盒测试主要的测试用例设计方法?.................................................. 4 5. 什么是测试用例,什么是测试脚本,两者的关系是什么?...............................................

最近学到的Git知识,大厂的Git机制还是很方便的

*爱你&永不变心* 提交于 2019-12-10 02:40:46
本文首发于微信公众号:程序员乔戈里 转载请注明: https://blog.csdn.net/WantFlyDaCheng/article/details/102538508 一、两次的 git commit 到不是同一个远程分支 这里由于提交自己的代码第一次提交到A分支,第二次提交B分支,然后报错了, 这里报错以后,会提示一个百度自己内部的链接 ,你点击链接就可以照着提示去修改,可以说还是省了不少事,不用自己去google百度去解决,开发效率也提高不少 上面图片中有6e8713f is CR parent commit 这行提示,划重点,待会要用到。 解决过程 你当前的操作场景如下图,由于一次CR(评审)的多个commits不能push到不同的refs/for/[分支名](可能导致后续评审合入merge failed): >评审是啥意思,这里解释一下。本地开发的流程首先是从自己远程的分支A拉到本地,远程分支是master分支的一个clone,本地完成开发后,需要提交到自己的远程分支,提交以后必须由其它人评审代码(code reviewe),其它同事评审的时候主要找出不合规范和逻辑的地方,你需要修改完成以后,才能合入到你的远程分支A,然后再从你的远程分支A合到master上,这样就完成了代码入库。 本次合并我最终的目的是要合到B分支(第一次提交是A分支,第二次是B分支)

如何做好接口测试?【转载】

半腔热情 提交于 2019-12-10 02:21:34
sgbtmy:基于selenium的自动化框架开发,我主要是想问一下,你的框架除了前台的自动化,后台的数据的 测试 是否集成在你的测试框架中?    小刀: 你好,个人理解的你所说的后台的数据的测试是指的是对数据的校验,不知理解的是否正确,那么根据这个理解,我的解释是,在我们框架中,增加了很多的功能方法用来帮助进行自动化脚本的编写和结果校验,其中就包括后台数据校验方法,当我们的 测试用例 需要在后台进行数据校验的时候,调用这些数据校验方法即可。相当于是,前台页面操作的自动化是封装selenium的方法去操作页面,而对后台数据的校验是通过增加功能方法来实现的,可以理解为不同的两部分,但是在编写测试脚本的似乎,根据测试用例的设计,这两部分都可以拿过来使用。   不知道是否解答了你的疑问,如果没有,请你指出,谢谢你。 tjy688:你们做 接口测试 的流程一般是怎么样的?    小刀: 接口测试的流程其实和 功能测试 的流程类似,因为接口测试依赖的主要对象也是需求说明书,所以,最初的流程就是参与需求讨论,评审需求。   需求确定以后,开发会根据需求进行接口设计,会产出接口定义,在开发设计过程中,有能力的话,可以给出一些针对设计的建议,提高可测性,针对需求及设计,进行测试计划,测试设计,然后还需要和配管确定测试环境相关的事情。   在开发完成接口定义之后

如何做好接口测试?

坚强是说给别人听的谎言 提交于 2019-12-10 02:12:21
sgbtmy:基于selenium的自动化框架开发,我主要是想问一下,你的框架除了前台的自动化,后台的数据的 测试 是否集成在你的测试框架中?    小刀: 你好,个人理解的你所说的后台的数据的测试是指的是对数据的校验,不知理解的是否正确,那么根据这个理解,我的解释是,在我们框架中,增加了很多的功能方法用来帮助进行自动化脚本的编写和结果校验,其中就包括后台数据校验方法,当我们的 测试用例 需要在后台进行数据校验的时候,调用这些数据校验方法即可。相当于是,前台页面操作的自动化是封装selenium的方法去操作页面,而对后台数据的校验是通过增加功能方法来实现的,可以理解为不同的两部分,但是在编写测试脚本的似乎,根据测试用例的设计,这两部分都可以拿过来使用。   不知道是否解答了你的疑问,如果没有,请你指出,谢谢你。   tjy688:你们做 接口测试 的流程一般是怎么样的?    小刀: 接口测试的流程其实和 功能测试 的流程类似,因为接口测试依赖的主要对象也是需求说明书,所以,最初的流程就是参与需求讨论,评审需求。   需求确定以后,开发会根据需求进行接口设计,会产出接口定义,在开发设计过程中,有能力的话,可以给出一些针对设计的建议,提高可测性,针对需求及设计,进行测试计划,测试设计,然后还需要和配管确定测试环境相关的事情。   在开发完成接口定义之后

如何说明白代码评审

廉价感情. 提交于 2019-12-09 00:29:28
最近小组内代码review,遇到很多同事都讲不清楚需求的实现方案。 大概有以下几种表现: 上来不说需求,直接说代码实现。台下一头雾水,根本不知道设计方案是否合理。 描述完需求后,又直接看代码,看表结构,没有交代流程。 比较简单的算法,描述的特别绕,让人听不懂。被别人指出后,觉得这东西这么简单,你们为什么听不懂,还很委屈。 直接说术语,不给解释。还有自己造术语不给解释的,更混乱的是「复用」已有的术语,让大家理解都不同。 那么程序员如何把技术方案讲清楚呢?下面从实用的角度教大家一些小技巧,在短时间内具备讲清楚的能力。 一、要先交代需求背景 为什么要做这个需求,对于实现的要求是什么,产品经理提了哪些边界条件。没有银弹,一个技术方案的好坏与实现要求息息相关,是不能脱钩的。例如,一个接口访问质量统计系统,可以接受一天跑一次脚本生成数据。但是为用户提供服务的消费明细,肯定要能实时展示,并且不能出错。 在评审中,消耗时间比较多的,就是台下的听众问被评审人需求背景。还有台下的人给出了某个建议,然后被被评审人否定,说有个产品的要求我刚才没说。这时对提出建议的人来说,是很伤的。 交代好背景并对齐,是评审技术方案和代码review的基础,否则别人不知道你后面的是否合理,甚至不知道你到底在做什么。技术方案评审就无从谈起了。 二、介绍技术方案整体架构 背景知识说完后,说你的做法。要先总后分

0-1背包问题分析及代码实现

拈花ヽ惹草 提交于 2019-12-08 11:30:59
感觉文章开头需要说明哈为啥子要写这个文章,没错就是又被笔试给虐了,做完爱奇艺的笔试,体会最深的一句话就是出来混总是要还的,还记得研一的时候,算法老师在讲台上讲的口干舌燥,我在台下手机刷的飞快,还记得算法老师说这道题可能会考,还记得算法只考了60+(捂脸),别说都大学了,成绩能够及格就万岁,等你找工作上传成绩单时,就等着肠子悔青吧,哦对了,评审学业奖金的时候肠子也会悔青(我的8000块啊(大哭以及歇斯底里状))。 好了废话少说,先上几个链接 [ http://www.cnblogs.com/daoluanxiaozi/archive/2012/05/06/2486105.html] [ http://jingyan.baidu.com/article/3ea51489fbdaa152e61bba38.html] [ http://blog.sina.com.cn/s/blog_8cf6e8d90100zldn.html] 这几个链接都分析的不错 对于背包问题,总的来时就是,将包的容量化小,将物体个数化少,然后再逐渐增大,先解决局部的问题,然后扩大到整体局部。 #include<iostream> using namespace std ; int ZeroOneBackPack( int *Weight, int *Value, int **total, int n, int v)

如何提高程序员的生产率 (2)

走远了吗. 提交于 2019-12-06 18:50:47
版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/252 来源:腾云阁 https://www.qcloud.com/community 接上篇 如何提高程序员的生产率 (1) 三. 开发过程 沟通 软件通常都需要经过很多人和很多次的沟通才能生产出来,但是沟通本身又往往会影响软件的开发速度。这是一段很矛盾的关系。好的沟通方法能降低开发中因为信息不透明导致的开发资源浪费,而又尽量减少沟通所占用的精力。 1. 需求沟通 在任何一个软件产品中,如何应对需求的变更,都是至关重要的。需求一直是软件工作得以成功或者失败的最重要因素。软件开发中很多技术和方法都是围绕着需求来设计的。 需求的沟通是需求工作的第一个环节。首先沟通的对象必须是经过挑选的,以免添加不必要的需求混乱。最佳的需求沟通是和用户或者用户代表。但是他们往往他们缺乏必要的计算机知识。而程序员却很少有丰富的需求领域的知识。这个鸿沟需要双方共同去弥补,最重要的做法是,不要光靠口说。 程序员应该认真研究需求领域的知识,仔细查看涉及的单据、原型产品、现有工作流程等,而且必须用笔记录下来,之后再去整理问题,逐条咨询用户。在仔细了解情况之前,不宜开始设计整体程序结构。 当你有一定了解之后,程序员就可以动手开发一个快速的原型,如果没有足够资源

教你如何提高 PHP 代码的质量

半城伤御伤魂 提交于 2019-12-06 16:51:31
说实话,在代码质量方面,PHP 的压力非常大。通过阅读本系列文章,您将了解如何提高 PHP 代码的质量。 我们可以将此归咎于许多原因,但这肯定不仅仅是因为 PHP 生态系统缺乏适当的测试工具。在本文中,我想向您展示一个简单的设置,用于项目的基本质量测试。 我不会详述任何特定的工具,而是专注于设定测试环境。 本文中有一个演示代码可以在 GitHub 上找到: https://github.com/mkosiedowski/php-testing-demo 如果你对这篇文章中的例子有任何问题,可以参考。 1 必备条件 我假设您熟悉 PHP 7.1 语法,您可以使用 Composer 和 PSR-4 来进行自动加载和 PSR-1&PSR-2 的编码标准。在我的示例中,vendor 的二进制文件被安装到 ./bin 目录。 2 构建工具 我们将使用一些不同的测试工具,所以最好有一些能用一个脚本来运行它们的东西。 PHING 为我们提供了解决此问题的绝佳解决方案。 PHing 与 Apache Ant 相似,可以使用 XML 配置轻松自动执行任务。 我们可以通过运行以下命令来安装它: 复制代码 $ php composer.phar require --dev phing/phing 然后,在项目的根目录中创建一些基本的 build.xml 文件。 <?xml version="1.0"

2016年总结-JAVA程序员

故事扮演 提交于 2019-12-06 11:48:47
一、技术积累 (1)代码规范 1.1.1、通常的模块分布:一般如果你要实现一个web应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集(你调用他的接口,他依赖你的接口),这样下来,整个公司有很多个模块,怎么做到很好的联系。回到刚刚的模块分布,你的一个web应用,应当需要分成三个模块:core模块、service模块、web模块。web模块就是展示到页面,后台代码而言主要就controller层了,其他逻辑基本都放在core了,service模块就是一些接口类和参数dto等等,接口的实现类在core模块。这样下来,web模块只需要依赖service模块,同样的其他系统依赖你的接口也仅仅是依赖service模块,然后利用远程调用方式消费你的接口服务。 1.1.2、代码层级结构:针对后台服务项目,一般分为对外接口层、service层、Dao层。Dao层就是与数据库交接的接口层,service层主要调用Dao或者外部系统的接口,复杂的逻辑基本都放在service层;一些方法需要提供给其他模块调用的时候,就封装在对外接口层,只有对外接口层是暴露。这里说的只是层级结构,还有与层级结构无关的,也是需要归类的,比如对外部系统接口方法封装的我们放在一个目录下面,一些常量和工具类等我们放在common目录下面。当然还有其他考虑,尽量让整个模块有层次感,代码才不会太乱