提高团队代码质量

近期看到一篇博客。大致的意思就是网管将原本混乱不堪的交换机整理整齐了,起初交换机是图2那样的,由于越来用的人越多,操作的人越来越多。终于成为了图1那个样子。这不禁让我想到了项目中的代码。原先在刚上线的时候谈不上是完美的,但它总归是整齐的。可是由于中间人员流动,bug改动等等原因吧,终于的结果就是代码一团糟。为什么会出现这种情况呢?

          

图1                                            图2

权限(权利)

拿交换机来说,当自己的网络不通畅的时候自己能够随便进出机房对交换机进行操作,插拔自己的网线的时候仅仅要能让自己的网络通常,那么网线乱一些那又有什么关系呢?第一个人是这样想的同一时候也是这样做的,紧接着第二个、第三个……久而久之就成了图1的样子,混乱不堪。

同理代码也是一个道理。自己须要实现一个功能,在原来代码的基础上进行改动,仅仅要自己的功能好使代码之间的耦合大一些又有什么关系呢?刚入职的第一个新人是这么想的也是这么做的紧接着第二个、第三个……久而久之仓库中的代码就变成了如今的这个样子。慘不忍睹。

没有权限的人能够操作本不该操作的东西,终于一定会一团糟。由于的人们在自己焦头烂额的时候才顾不上会不会影响他人,尽快将自己手头的棘手的问题解决掉才是重中之重。

对于权限管理最经典的一句话就是:权限越低犯错的机会就越少

所以新人直接提交代码到代码库是欠妥的。

责任

出现这种情况是由于大家仅仅关心自己的一亩三分地。“各扫自家门前雪。休管他人瓦上霜”是每一个人的不变信念,问题是“他人”并非别人,是自己人。他人“瓦上霜”事实上就是以后自己的“门前雪”。

事实上责任这个词就是自私的放大版。胸怀有多宽广责任就有多重大。

记得读过一篇关于代码质量的文章,当中说到一个理论叫破窗理论:一个房子假设窗户破了,没有人去修补,隔不久。其他的窗户也会莫名其妙地被人打破。一面墙。假设出现一些涂鸦没有被清洗掉。非常快的,墙上就布满了乱七八糟、不堪入目的东西;一个非常干净的地方,人们不好意思丢垃圾。可是一旦地上有垃圾出现之后。人就会毫不犹豫地抛,丝毫不觉惭愧。

非常多情况下代码晦涩难懂并非一下子就变成这个样子的。冰冻三尺非一日之寒。

从第一个不负责任的人開始代码变得越来越难以维护。假设在提交代码之前有人(几个人)去review要提交的代码,相信出现故障的可能性就大大减小。试想自己的代码是要被全世界程序猿读的,相信你会提高自己的代码质量。

行动

发生了这种事情,终于是要解决的,假设希望永远不发生这种事情。这是一种理想状态,仅仅有说前面的工作我们尽可能的做好来减少这种事情出现的概率。

可是。一旦发现了问题还是须要解决的。并且是立马解决。否则错误会随着时间的推移解决成本也就越来越大。不要借口说如今没时间,等有时间了怎样怎样吧。如今没时间以后更没时间,由于以后仅仅会比方今更忙。

(什么?项目紧没时间,那么请跳槽,对于一个没有规划急功近利的公司是须要被社会淘汰的,所以你的不离职就是在姑息整个软件行业的不良风气)

Review初期是能够避免非常多低级错误的,可是到了后期就流于形式了,由于一直负责review的负责人已经疲惫了。

况且非常多严重的bug并非review就能发现的,Review仅仅能找出显而易见的错误。

所以,

第一、负责review代码的人决不能固定,并且一份代码能够多人review

第二、不放过不论什么一个Bug,尤其是由于改动或者新用例带来的bug。这些bug后面就藏着不整洁的代码,须要整个团队耐心的将其挖掘出来解决掉。


 

都说高质量的代码须要高水平的开发人成员,事实上高质量的代码,需要的是关怀开发商

版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/zfyouxi/p/4621776.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webrender 查看是否开启_想要体验极致顺滑的网页加载体验?手动开启Firefox WebRender渲染引擎...

昨天我们提到火狐浏览器最新稳定版Mozilla Firefox v67 版将面向部分用户开启WebRender渲染引擎测试。据火狐浏览器团队介绍当用户开启新的渲染引擎后 , 网页加载帧率能够从现有的 20FPS 直接提升到 60FPS。不过新的渲染引擎本身并不是用于加快网页的加载速度,而是…

NOIP201307货车运输

试题描述A 国有n座城市,编号从1到n,城市之间有m条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有q辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。输入第一行有两个用一…

knime如何连接mysql_knime怎么连接MySQL?

首先判断一下网络是否通:如果在局域网相同网段内那网络是通的,不同网段间需要看是否有做隔离,如果没有隔离,那就也是通的。测试方法可以用telnet 数据库IP 数据库端口号的方式探测一下 例如 telnet 192.168. 1.124 3306创建用户&a…

Asp.net Vnext IValueProvider

概述 本文已经同步到《Asp.net Vnext 系列教程 》中] IValueProvider 根据ValueProvider获取数据&#xff0c;在对数据进行绑定 代码实现 private class CustomValueProvider : IValueProvider{//判断否具有指定的前缀public Task<bool> ContainsPrefixAsync(string pref…

ECNUOJ 2615 会议安排

会议安排 Time Limit:1000MS Memory Limit:65536KBTotal Submit:451 Accepted:102 Description 科研人员与相关领域的国内外同行进行适时的接触与充分的交流&#xff0c;对于促进提高他们的科研业务水平&#xff0c;并及时掌握科研动态是十分必要而且重要的。ECNU为了走在科技…

拼团php开发逻辑思维罗振宇_2019罗胖罗振宇跨年演讲手动整理稿,看了两遍

2019罗胖罗振宇跨年演讲看了两遍&#xff0c;手动整理文档1.岁月不饶人&#xff0c;我们也没饶了岁月2.你有你的计划&#xff0c;原来这个世界另有计划&#xff0c;既然这个世界另有计划&#xff0c;我们就得重做计划3.做事的人和不做事的人4.宏观是我们必须忍受的&#xff0c;…

今夜的硬件之旅

6脚继电器&#xff1a; 汇科继电器HK4100F-DC6V-SHG ①3A触点切换能力 ②具有一组常开&#xff0c;一组转换触点形式 ③超小型&#xff0c;标准印刷制版引出脚 ④有塑封型 Outline&#xff08;L*W*H&#xff09;外形尺寸&#xff1a;15.510.511.8 Contact Date触电形式&#…

mp3 pcm java_Java mp3文件转pcm文件

Java mp3文件转pcm文件package cn.zpy.util;import java.io.File;import java.io.IOException;import javax.sound.sampled.AudioFileFormat;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;imp…

Material design 色彩

八月已过去&#xff0c;九月刚来到~暑假已过去~九月上学季~~又迎来了一个桂花飘香的季节&#xff0c;你是否有了新的目标和计划~~所以在九月初始给大家带来一个全新的东西&#xff08;ps&#xff1a;对于我来说是全新的东西&#xff09;——Material Design~~九月让我们一起好好…

内存查看工具RAMMAP说明

参考 Technet Process Private: 分配给单一Process专用的内存 Mapped File: 用来储放档案内容快取(Cache)的内存空间 Shared Memory: 标注给多个Process共用的内存分页(Page&#xff0c;内存管理单位) Page Table: 用来描述虚拟内存位址的分页表(裡面是一笔一笔的PTE&…

php接口和java接口_java和php接口的区别是什么

java和php接口的区别是&#xff1a;1、php接口中的抽象方法只能是public的&#xff0c;默认也是public权限&#xff1b;2、java中私有方法使用private修饰&#xff0c;供接口中的默认方法或者静态方法调用。【相关学习推荐&#xff1a;php编程(视频)】php:规范&#xff1a;接口…

java hql多条件查询_使用hql语句怎样实现多条件查询

展开全部这里只写了DAO和业务62616964757a686964616fe59b9ee7ad9431333264623331逻辑组件、ACTION的具体实现类&#xff0c;PO和和接口自己应该会写吧&#xff0c;HQL采用的是结合SQL的那种写法&#xff0c;增删改查全在里面了&#xff0c;修改下马上就能跑了&#xff0c;不清楚…

闪回数据库

Flashbacking a database means going back to a previous database state.闪回数据库到之前数据库的状态The Flashback Database feature provides a way to quickly revert entire Oracle database to the state it was in at a past point in time. 闪回数据库特性提供了一种…

java.net.unknown_android -------- java.net.UnknownServiceException

最近升级了Android的API版本时 &#xff0c;导致我的网络请求失败了&#xff0c;出现了这个错误 java.net.UnknownServiceException&#xff0c;这个错误&#xff0c;我在网上查到这个主要是由于&#xff0c;我们的OkHttp3会默认使用密文传输&#xff0c;而我们的代码中使用Htt…

Visual Studio下Qt调用IDL

一&#xff0e;简单介绍&#xff1a; 1.ActiveQt包含QAxContainer和QAxServer组件。 1) QAxContainer允许使用COM对象&#xff0c;并且可以将ActiveX控件嵌入到Qt程序中去。 QAxContainer是有三个类组成的。分别是&#xff1a; QAxObject封装了COM对象 QAxWidget封装了ActiveX控…

安装java过程_Java的安装过程

记录一下自己在Windowns下安装java的过程打开网址后要先登录&#xff0c;如果没有号就先注册&#xff0c;然后才能下载step1&#xff1a;下载JDK(1)将鼠标指向download&#xff0c;会出现如下界面:(2)点击左上角PopularDownloads下的 Java for Developers进入如下界面&#xff…

dockerfile源码安装mysql_docker容器详解五: dockerfile实现tomcat环境以及源码安装mysql...

tomcat上一节讲到了dockerfile的基础&#xff0c;这一次咱们来作一个小的练习首先要了解tomcat安装的整个过程首先搭建 jdk环境&#xff1a;下载jdk包&#xff0c;解压以后添加环境变量而后搭建tomcat&#xff1a;下载tomcat包&#xff0c;解压&#xff0c;修改配置文件到一个工…

SQL server 2008数据库的备份与还原、分离(转)

一、SQL数据库的备份&#xff1a; 1、依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 数据库&#xff1a;Dsideal_school_db既是我们需要备份的学籍数据库 图&#xff08;1&#xff09; 2、选择要备份的数据库“Dsideal_school_d…

Java做一个动画效果音量调节_设计与实现一个 ISoundable 接口,该接口具有发声功能、还能调节音量大小...

[java]代码库package experiment6;public interface ISoundable {public void increaseVolume();public void decreaseVolume();public void stopSound();public void playSound();}package experiment6;public class Radio implements ISoundable {public void increaseVolume…

人人都有极客精神

http://www.jisuanke.com/minicourse/59/438 人人公司是一家极为鼓励极客精神的公司&#xff0c;当有重要的项目需要上线但又时间太紧&#xff0c;甚至需要当天上线的时候&#xff0c;往往会挂起海盗旗开启电子日期显示&#xff0c;让大家可以在对时间有更明确的感知的情况下&a…