关于盘点和总结的那点事儿

本月的功能在踉跄中勉强上线了,这个月有实验的味道,有摸索的代价,有分工和衔接上的问题,有技术储备方面的不足,有业务梳理方面的欠缺,也有我的能力和意识上的不足,梳理整个开发流程,目前存在的几大问题:

1、代码质量问题:

描述分析

1.性能层面css

  从综合维度看,代码质量好坏取决于开发人员总体的编程经验:好比操做系统,设计模式,数据结构和算法,网络原理,数据库,前端等等因素。前端

  就目前系统总体上看,性能可能会出现的地方,从优先级权重来排列,主要集中在:算法

  • 数据库优化技术偏弱。
    • 不看执行计划
    • 对索引的理解比较浅,没用好索引
    • SQL优化经验薄弱
    • 数据库查询和脚本问题。
      • 关联查询
      • 索引缺失
      • 请求频率
  • 减小请求次数。
    • 减小接口对数据库请求
    • 减小前端图片请求
    • 减小前端css/js请求
  • 善用缓存
    • 静态文件CDN缓存
    • 基础数据共享缓存
  • 内容压缩
    • 图片压缩
    • 请求文件压缩
    • 富文本内容压缩
  • 主站可能出现的高并发查询。
  • 网络带宽延迟。

  2.规范层面数据库

  • 命名随意性

  有些规范是能够文档化的。好比全局变量所有大写,局部变量驼峰命名,文件先后缀命名等等比较容易约定俗成;编程

  有些规范没法约定的。好比做业调度有些人命名jobs,有些人命名schedule。若是要想规范必须把业务考虑进来。若是只是想表达定时做业,属于技术术语job可能比较合适;若是是业务层面的任务调度可能schedule比较合适。也就是说若是碰到模棱两可的命名的时候,须要增长考虑因子,经过扩大“视野”来更精确的命名它。设计模式

  若是碰到一个问题始终不清楚要如何命名的时候,首先应该要检讨的是本身对业务熟悉不熟悉,对系统总体熟悉不熟悉。若是实在没法确认,最好请教和沟通,通常都能作好命名。说不定能发现一些本身无知的内容。缓存

  若是真的以为用名字没法描述清楚,言不尽意,模棱两可,那就增长代码注释。代码注释的前提是自解释,实在没法达意才去作注释,由于注释太多也是有成本的。安全

一致性优先,也就是说一致性是可读性的基础,不然数据库一种命名,业务代码一种命名就是错乱了。好比公司叫Company,可是业务命名叫Supplier,会员叫Member。这里会出现这种不一致的命名,主要缘由仍是对业务领域不清楚致使的。网络

  因此在底层命名很是关键,好比数据模型的表和字段的命名,若是底层命名错误,从上下往上只能将错就错,让人改也不是,不改也不是。数据结构

  总之,代码命名和给孩子取名字同样,其实都是须要慎之又慎,不可随意叫个阿猫阿狗什么的。这里有个原则就是要遵循:简单,可读,统一和优雅的原则,固然优雅是最高的要求。

  • 规范不是万能

  规范仅仅写个规范文档是很不够的,写好并持续完善规范文档只是万里长征第一步。只有规范文档,没有落地检查,文档也会变成一纸空文。

  定个原则是比较容易和简单的,若是细细追究,里面有不少坑。

  首先你们对简单,可读,统一的理解各不相同,最后生成的代码必然是千人前面,理论上须要对业务的深刻了解,须要有很好的英文功底,同时在总体上要作常常性的检查和复盘。

  可是引入代码审查又须要成本,假设一个月审查一次,那么对每一个成员编写的一个月的代码,从月初到月底进行一番梳理和纠正,没有1-2天是没法完成的。

  因此审查是有成本的,要不要审查呢?

  权衡利弊,必需要审查,并且要按照规范,引入严苛的代码审查机制,每月作一次代码规范和代码质量的检查和考核。

  为何要严苛来作代码审核呢?由于代码质量反应了咱们的产品质量,代码的好坏决定了将来运维的成本,技术债务的危害怎么形容都不为过,轻则系统局部异常,中等的会致使修改困难,严重的推翻重来。

  若是由于进度一时妥协,回头又忘记了修改,中间又出现人员变更,那么这份代码的后患是无穷的,由于没有规范的代码,对交接人来讲从心态上是本能反抗的,可是又不得不改,因而就一通乱改,能贴膏药就贴膏药,能运行就能够,管他规范不规范。这样致使的结果是对规范来讲,只能从不规范走向更加不规范,最后走向没法维护。

落地解决:

  1.性能层面:

  • 任务分解和文档化

磨刀不负砍柴功,开发以前进行技术评估,识别出其中技术复杂度和难度,及早发现性能方面可能会产生的问题。

把评估的内容逐条分解罗列并作文档化,对容易的功能尽可能不要有心态上的藐视。

遇到没有把握的技术问题,及时的拿出来讨论,不要以为很差意思。

  • 数据库层面:
    • 经过我的持续学习和提升数据库优化技能:
      • 学会查看执行计划
      • 了解索引的底层原理
      • 深刻理解关联查询的底层原理
  • 主站须要生成静态页面进行缓存。
    • 增长页面静态缓存技术
    • 增长CDN技术
  • 多研究学习和参考别人写的代码,作好底层的技术沉淀,平时多练练内功。
  • 经过针对性内部培训来提升我的薄弱环节,让技术均衡发展,又各有特长。

  2.规范层面:

  • 编写规范的文档,并持续更新和完善
  • 严格遵循规范来写代码,若是规范当中没有的,须要适当讨论并作迭代规范。
  • 按照规范进行代码审查,每一个开发人员都参与其中,每隔两周轮流进行代码的检查和盘点。直到团队造成默契,能够在后期适当的减小审查频率。
    • 基本的规范审查并不难,好比命名,函数的长度等,只要遵循文档来作就能够了。
    • 难的是对没有接触过的技术应该如何作?好比单点登陆,路由规则等。
      • 参与前期的需求分析,若是没有则后期自行了解,好比以询问的方式进行了解。
      • 了解技术评估和技术原理。
      • 查看当事人的源代码。

2、测试发布问题

描述分析:

  • 周期:每月集中到最后一周进行测试和发布时间太紧迫,若是中间缺乏交互和确认,很难保证结果不偏离方向。
  • 人设:测试人员对业务和测试流程缺乏前置准备,包括业务的烂熟于心,测试工具和测试数据的知识储备,致使测试时候不知道如何测试,在原本时间不足的状况下,增长沟通成本。同时测试水平只停留在简单浅层的黑盒测试层面,对于深层次的问题,好比压力测试,DDos攻击,安全层面的每每就测试不到了。
  • 功能测试:测试力度远远不足。缘由有以下几种:
    • 边测试边修改边上线,修改速度不及测试速度,致使开发紊乱。
    • 前期测试重视不够,部分业务理解异常,等到测试出来,修改的周期可能会很长,这样其余积累下来的BUG处理起来就只能长时间等待了……
  • 集成测试
    • 功能分工致使的我的只测试和本身相关的功能,可是系统是一个总体,在测试边界处是须要双方集成测试的,好比Message的来往功能。

落地解决:

  • 周期:改进交付时间,每隔两周就交付测试,增长交付频率,尽早发现和解决问题。
  • 人设:
    • 增长测试人员May和Kaka的前期业务培训和接受业务熟练度的考核,减小测试的遗漏。
    • 增长对测试人员包括开发测试的测试技能培训,提高测试人员的测试水平。好比对测试人员来讲,须要学习产品经理的思惟和设计原理,增长测试人员的主动性,让测试人员能站在用户的角度来进行测试,而不是简单的鼠标点点。
    • 从心态上重视测试,测试是闭环的最后一个环节,缺一不可。对测试要有敬畏感,测试并非简单的点一点鼠标的问题,测试的水可深可浅。测试人员须要的是综合能力,测试技能怎么强调都是不为过的。
    • 编写测试用例文档。测试既要有心态上的重视,也要有可落地的操做方法,而测试用例文档能够很好的指导每一个测试人员进行统一测试,避免测试的遗漏和不足。
      • 文档内容涵盖测试的各个维度,该文档编写人员尽可能对产品的理解要达到设计人员的水平,对每一个角落的测试用例要尽量详尽。该测试用例模板必需要规范,用来指导开发和测试人员进行完整详尽的测试。
  • 开发人员内测:
    • 功能测试:执行交换角色测试
    • 集成测试:交换角色测试,负责人集中测试。

3、开发效率问题

描述分析:

  1.业务层面

  • 业务理解不透彻致使的代码BUG,好比Message系统模块,收发人员流程没法打通;
  • 对数据库模型理解误差致使的功能BUG,例子同上;
  • 开发任务分工和配合不足;
  • 开发交付频率不足,致使的过程脱节和问题集中积压,最后处理缓慢和延迟;

  2.技术层面

  • 前端技术积累薄弱,遇到复杂一点的前端作起来比较耗时;
  • 技术复杂度预估不足,致使的开发延迟。
  • 分工致使的集成薄弱,好比集成测试,需求和开发沟通成本。

落地解决:

  1.业务层面

  • 业务培训:产品需求文档须要提早发布预热,培训后须要作业务复述,复杂的须要作详细的设计文档,直到产品经理以为正确后再进行开发设计。
  • 对于复杂功能的业务,采用专题会议的方式,反复讨论,进行头脑风暴,把业务掰开揉碎讲清楚,直到当事人能复述经过为止。针对个别复杂的业务,好比公共询盘功能,须要出详细的需求文档。

  2.技术层面

  • 前端技术难点:自研解决,实在没法解决再去考虑外包和招聘。
  • 开发前须要作任务分解,识别出技术复杂度,对没有把握的技术要及早提出疑问,经过团队的力量拿出合理的解决方案。
  • 功能层面,进行角色互换测试。好比Arvin测试Ive的Message模块,Ive测试Arvin的机械表单模块。

4、开发意识问题:

如下从三个方面总结一下成员开发过程当中的意识问题。

  • 树立严谨心态

  对开发来讲,各个环节要持有严谨和一丝不苟的态度,树立简单并不简单的意识。对于完成的功能,若是时间上容许,须要反复回头检查可能出现的问题,不要满目乐观,或者以为某个功能很简单,要站在可能出现问题的立场上来看待正常的功能。由于咱们要打造的是产品,而不是项目,不是小孩过家家的功能。

  • 重构意识

  好的代码是不断重构出来的,由于业务和需求是不断叠加的,不可能写出一成不变的代码。当业务倍增,需求变革的时候,再好的代码都会出现生锈,腐蚀和坏味道。因此在不忙的时候,须要常常性的整理本身的代码。

重构解决的是长远的质量和可维护,可扩展的根本问题。技术债务,若是不及时解决,随着时间的推动和人员变更,后续花费的成本会逐渐叠加甚至没法解决,比如盖房子,在有问题的基础上盖房子,盖得越高危险越大,到了晚期可能就只能推倒重建。

  • 重视讨论

  三个臭皮匠胜过诸葛亮,技术越讨论越进步,业务越讨论越明白。对于模棱两可或者彻底不懂的问题,尽可能多请教和讨论。

  讨论的印象是最深入的,对我的的成长和帮助也是最大的。好比对Vue的学习和上手,对数据库脚本的编写,对ES的学习和讨论等等……

  树立不懂不丢人,不懂装懂才丢人的意识。不要忌讳或者很差意思讨论。

  讨论讲究效率和默契。要集中时间,充分准备。 有些开发人员常常问些没头没脑的问题,既没有背景铺垫,也没有上下文,而后想一出一个问题,频繁的打断别人的思路而不自知。这种沟通是很浪费时间和成本的。

相关文章
相关标签/搜索