公司培训lesson 1-代码质量
课堂讲义
- 代码质量五大原则
- 编码规范
- 命名规范。学会合理科学的命名类名、方法名、变量名。命名宗旨:简洁明了,见名只意;了解常用单词缩写
- 注释。是否写根据所处工作环境的需要而决定。将以源代码写成以“注释”的说明类文档为目标
- 缩进。团队应该统一缩进格式。注意Windows平台与Linux平台的编码差异,最好以空格来代替Tab
- 页宽。代码最好的呈现方式是以“块”状呈现。编码规范里往往会要求设置IDE页宽,一行内的代码量不要超过所设置的页宽,超出部分换行切向右对齐
- 不同修饰符,常、静态变量,普通变量的排序方式
- 代码重复
- 实际开发中应避免为了图方便,简单而对某些代码进行粗暴的CTRL C + CTRL V
- 当项目庞大时如何避免对重复代码遗漏,可借助IDE所提供的一些自动检查来规避
- 当出现重复代码时,多想想面向对象原则(抽象,封装,多态)的特性,通过 这些特性去修改重复代码
- 做好团队沟通,避免个团队成员重复的“造轮子”
- 测试代码覆盖率
- 测试代码覆盖率的作用往往是生成某种形式上的报告类文件提供给某种特定人员的产物
- 在项目进度紧张的情况下,快速有效的对有"隐患"代码进行检查,活用main方法做到增量开发
- 后期需对测试报告类进行补全验证
- 了解TDD测试驱动开发
- 依赖项分析
- 代码复杂度
- 不管多复杂的业务,多复杂的算法都应尽最大努力使他们简洁化
- 逻辑逆推,减少逻辑判断嵌套
- 复杂的逻辑条件主动抽象
- 掌握switch与if else的差异化
- 减少循环嵌套,主动将嵌套循环抽象
- 掌握各种循环while,while do , do while ,for , for each,stream等的差异化
- 避免出现大量无营养含量代码,如各种get/set,通过设计模式,反射等手段来解决此类问题
- 编码规范
- 如何提高代码质量
- 结对编程
- 如何有效的结对编程
- 在项目组中尝试与另一团队成员开展结对编程的工作方式
- coding review
- 能够做到代码在“脱手(如提交至版本库)”之前进行自我的codeing review
- 如何有效的在团队中进行coding review
- 在项目组中尝试对每日的有效代码进行coding review
- 开源代码
- 代码质量最好的学习途径,如jdk,spring源代码
- 临摹,模拟源代码的编写方式
- 不断审视,解读这类源代码的编写思维
- 工具运用
- 了解代码检查工具类,如findbug,QAplug,PMD等
- 定期通过这类辅助工具对代码进行检查
- 最大程度的独立解决辅助工具标记出的问题源
- 责任
- 代码质量从侧面意义反应出该开发人员是否对公司,同事,自己称职、负责
- 以上均为方法论,而最根本的核心在于开发人员的工作态度,工作责任心
- 培养自己的工作责任心,势必会在代码质量这块进步
- 结对编程
我的笔记:
代码质量影响因素
- 编码规范
命名、注释(代码就是最好的注释,注意命名和复杂度)、缩进(统一Tab或四个空格)、页宽(成块的整洁的代码)。
代码重复
测试
测试覆盖率、增量开发(在main方法中测试不确定的代码)、TDD(优:bug少,缺:时间消耗多)。
- 代码依赖项
- 代码复杂度
面向过程 -> 抽象重构、if/for不能嵌套超过两层、逻辑太多的地方抽象成方法、减少方法参数、逆推(比如先写false部分)、封装不变,抽象变量。
- 效率
先功能后重构、结合业务场景考虑效率。不要怕暴露问题(结对编程)、项目进度(十分钟以上求助他人)。
如何提高代码质量
- 结对编程
- 代码review
- 开源代码(JDK、Spring)
- 工具运用(findBug等)
- 责任心(你写的代码是给别人看的)
课后作业
需求:某公司人力资源部需对已有薪资体系进行改造。现急需一份员工薪资计算程序导入“员工出勤报表”后生成“员工薪资报表”,具体已知项如下:
- 某公司工种分为干部员工,基层员工两种;
- 干部员工薪资基数为1.68 , 基层员工薪资基数为1.1;
- 薪资计算公式:基本工资/22 × 实际到岗工作日 × 薪资基数 - 社保金额;(忽略个人所得税)
- 社保金额计算公式 :基本工资 × 8% + 基本工资×1% + 基本工资×2%
- 员工签约薪资表
工号 |
员工姓名 |
基本薪资 |
工种 |
1 |
马云 |
8888 |
干部 |
2 |
马化腾 |
8888 |
干部 |
3 |
任正非 |
8600 |
干部 |
4 |
刘亦菲 |
3500 |
基层 |
5 |
沈腾 |
5800 |
基层 |
6 |
刘谋 |
6000 |
基层 |
7 |
陈意涵 |
4000 |
基层 |
8 |
林志玲 |
7000 |
干部 |
9 |
孙红雷 |
7500 |
基层 |
- 员工1月出勤报表
工号 |
出勤天数 |
1 |
10.5 |
2 |
12 |
3 |
20 |
4 |
22 |
5 |
21 |
6 |
18 |
7 |
22 |
8 |
20 |
9 |
21.5 |
- 员工薪资报表格式
工号 |
姓名 |
实际出勤天数 |
当月薪资 |
社保扣款 |
其他扣款 |
实际薪资 |
附上作业代码,欢迎指正:
公司培训lesson 1-代码质量的更多相关文章
- (转)提高代码质量---one
1. 摘要 这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣. 在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao ...
- CODING DevOps 线下沙龙回顾一:DevOps 代码质量实战
11 月 22 日,由 CODING 主办的 DevOps 技术沙龙系列「质量」专场在上海圆满结束.在活动现场,四位来自腾讯等知名企业的技术大咖们分享了研发质量与效能的实战经验,与观众们共同探讨如何采 ...
- ESLint 检查代码质量
利用 ESLint 检查代码质量 其实很早的时候就想尝试 ESLint 了,但是很多次都是玩了一下就觉得这东西巨复杂,一执行检查就是满屏的error,简直是不堪入目,遂放弃.直到某天终于下定决心深入看 ...
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
提高Java代码质量的Eclipse插件之Checkstyle的使用详解 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代 ...
- 提高Java代码质量的Eclipse插件之Checkstyle的使用具体解释
CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发者遵守某些编码规范的工具.它可以自己主动化代码规范检查过程.从而使得开发者从这项重要可是枯燥的任务中解脱出来. Ch ...
- 如何保障Go语言基础代码质量?
为什么要谈这个topic? 实践中,质量保障体系的建设,主要针对两个目标: 一是不断提高目标业务测试覆盖率,保障面向客户的产品质量:二就是尽可能的提高人效,增强迭代效率.而构建全链路质量卡点就是整个体 ...
- 为公司架构一套高质量的 Vue UI 组件库
有没有曾遇过,产品要我们实现一个功能,但是 iview 或者 elementui 不支持,我们然后义正言辞的说,不好意思,组件库不支持,没法做到. 有没有曾和设计师争论得面红耳赤,其实也是因为组件库暂 ...
- 还不会用FindBugs?你的代码质量很可能令人堪忧
前言 项目中代码质量,往往需要比较有经验的程序员的审查来保证.但是随着项目越来越大,代码审查会变得越来越复杂,需要耗费越来越多的人力.而且程序员的经验和精力都是有限的,能审查出问题必定有限.而在对代码 ...
- [代码质量] 代码质量管控 -- 复杂度检测 (JavaScript)
转载自: https://juejin.im/post/59bb8b546fb9a00a4247532e 背景 代码的复杂度是评估一个项目的重要标准之一.较低的复杂度既能减少项目的维护成本,又能避免一 ...
随机推荐
- CMS收集器和G1收集器
CMS收集器 CMS收集器是一种以获取最短回收停顿时间为目标的收集器.基于"标记-清除"算法实现,它的运作过程如下: 初始标记 并发标记 重新标记 并发清除 初始标记.从新标记这两 ...
- [osgearth]oe学习的一些经验(别人的)
参考:http://bbs.osgchina.org/forum.php?mod=viewthread&tid=5484&extra=page%3D1&_dsign=70b15 ...
- Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD 第12章总结。
10.测试文件上传 作者推荐的Paperclip,官方维护组已经不推荐使用deprecated. 推荐使用rails自带的 ActiveStorage. Active Storage: 推进文件上传到 ...
- 缓存cache(5.2新:redis): gem faker (6600✨) 命令行工具curl(系统内置,可在git上看到文档)
⚠️本章节记录缓存的一些方法的用法案例,配合这篇博客一起阅读:https://i.cnblogs.com/EditPosts.aspx?postid=8776632 前置种子 https://git ...
- git 重写历史
重写最后一次提交的commit git commit --amend 修改多个历史 git rebase -i HEAD~3 命令执行后结果如下: pick f7f3f6d changed my na ...
- Pave the Parallelepiped CodeForces - 1007B (计数)
大意: 给定A,B,C, 求有多少个三元组$(a,b,c)$, 满足$a \le b \le c$, 且以若干个$(a,b,c)$为三边的长方体能填满边长(A,B,C)的长方体. 暴力枚举出$A,B, ...
- JS 取出DataGrid 列
var dt = document.all.<%= dgList.ClientID %>//找到你的grid在客户端的table for(var i = 1; i < dt.rows ...
- 解决IE8地址栏没有下拉
装了IE8,但是地址栏没有下拉,下载下面的文件,把两个文件都复制到 系统盘windows/system32,然后cmd下分别执行 regsvr32 chsbrkr.dll regsvr32 chtbr ...
- 表单验证jq.validate.js
源代码--demo Validate:function(){ var me=this; var $form = $('#form'); //添加自定义方法: 同时验证手机和座机电话 jQuery ...
- Jmeter-线程组执行顺序控制
线程组按顺序来执行,大概思路, 1.需要控制线程组内的操作在满足某一条件才执行,那么就需要使用if或者while: 2.要使用if或者while都需要一个变量,而这个变量要在两个或多个线程组内使用,那 ...