首页 > 编程语言 >读C#代码整洁之道笔记07_代码评审和集成测试

读C#代码整洁之道笔记07_代码评审和集成测试

时间:2023-01-07 20:45:05浏览次数:35  
标签:4.1 07 4.3 4.2 C# 代码 模式 对象

1. 代码评审注意事项

1.1. 始终保持代码评审的意识

1.2. 保证代码构建成功

1.3. 确保所有的测试都是通过的

1.4. 注意YAGNI原则

1.5. 检查重复代码

1.6. 使用静态分析器

1.7. 在代码开发完成之后,进入QA部门进行测试之前执行

1.8. 小步提交是有效传递信息的方式

1.9. 少量的代码比大量的代码更容易评审

1.10. 需要审查的代码越多,越容易出现漏网之鱼

1.11. 在等待代码审查时,请不要再对代码进行任何更改

2. 代码评审人员技能和知识

2.1. 技术权威性

2.2. 具备良好的软技能

2.3. 不要过于挑剔

3. 评审内容

3.1. 应当仅限于开发人员更改并提交的代码

3.2. 公司编码规范与业务需求

3.3. 命名规则

3.3.1. 命名是否足够长,使人容易阅读和理解

3.3.2. 体现代码意图又足够短

3.3.3. 评审人必须能够读懂代码

3.4. 代码格式

3.5. 测试

3.5.1. 易于理解并涵盖尽可能多的用例

3.6. 性能和安全性

3.6.1. 是否存在性能瓶颈

3.6.2. 是否能够防范SQL注入或者拒绝服务(Denial-of-Service,DoS)攻击

3.6.3. 是否对数据进行了充分的验证以保证数据的清洁

3.6.4. 是否只有验证通过的数据才能存储在数据库中

3.6.5. 是否检查了用户界面、文档和错误消息中的拼写错误

3.6.6. 是否有魔法数字(magic number)或者硬编码的值

3.6.7. 配置数据是否正确

3.6.8. 是否有意外提交的密钥

3.7. 架构规范和设计模式

3.7.1. GoF设计模式

3.7.1.1. Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides

4. 设计模式

4.1. 创建型

4.1.1. 单例设计模式(singleton)

4.1.1.1. 确保在应用程序级别只会创建一个实例

4.1.2. 工厂方法设计模式(factory method)

4.1.2.1. 在不使用具体类的前提下创建对象

4.1.3. 抽象工厂设计模式(abstract factory)

4.1.3.1. 无须指定具体类而创建一组相关的或者依赖的对象

4.1.4. 原型设计模式(prototype)

4.1.4.1. 指定要创建的原型的类型来创建原型的副本

4.1.5. 建造者设计模式(builder)

4.1.5.1. 将对象的创建和对象的表示区分开

4.2. 结构型

4.2.1. 适配器模式

4.2.1.1. 令接口不兼容的类顺畅地协同工作

4.2.2. 桥接模式

4.2.2.1. 抽象和实现解耦以降低代码的耦合度

4.2.3. 组合模式

4.2.3.1. 将对象组合并使用统一的方式使用各个对象或对象的组合

4.2.4. 装饰器模式

4.2.4.1. 在保持接口一致性的同时动态地向对象添加新的功能

4.2.5. 外观模式

4.2.5.1. 简化庞大的或复杂的接口

4.2.6. 享元模式

4.2.6.1. 节省内存并在对象之间传递共享数据

4.2.7. 代理模式

4.2.7.1. 可以截获客户端和API之间的调用

4.3. 行为型

4.3.1. 职责链模式

4.3.1.1. 对象顺序组成一个流水线来处理传入的请求

4.3.2. 命令模式

4.3.2.1. 将对象某个时间点需要调用方法的所有信息封装起来

4.3.3. 解释器模式

4.3.3.1. 解释特定语法

4.3.4. 迭代器模式

4.3.4.1. 用于顺序访问聚合对象的每一个元素而无须暴露对象的内部表示

4.3.5. 中介者模式

4.3.5.1. 对象通过中介互相通信

4.3.6. 备忘录模式

4.3.6.1. 捕获并存储对象的状态

4.3.7. 观察者模式

4.3.7.1. 观察对象,并在被观察对象的状态发生改变时通知观察者

4.3.8. 状态模式

4.3.8.1. 在状态变化时更改对象行为

4.3.9. 策略模式

4.3.9.1. 定义了一类可更换的封装算法

4.3.10. 模板方法

4.3.10.1. 定义了可以在子类中重写的算法及算法中的步骤

4.3.11. 访问者模式

4.3.11.1. 可以在现有的一组对象中添加新的操作而无须更改这些对象

5. 端到端(End-to-end,E2E)系统测试

5.1. 集成测试

5.2. 工厂方法模式

5.2.1. 当类无法确认应该实例化何种类型时

5.2.2. 当子类必须指明需要实例化的对象类型时

5.2.3. 当类控制其对象的实例化时

5.3. 依赖注入(Dependency Injection,DI)

5.3.1. 将代码的行为与依赖项分离而产生低耦合的代码

5.3.2. 构造器注入

5.3.3. 属性/setter注入

5.3.4. 方法注入

5.4. 模块化

5.4.1. 测试模块之间的交互以确保模块之间能够按照预期协同工作

标签:4.1,07,4.3,4.2,C#,代码,模式,对象
From: https://www.cnblogs.com/lying7/p/17033511.html

相关文章

  • @Cacheable使用在MyBatis的Mapper接口上
    背景使用Caffeine本地缓存,外加@Cacheable注解,想把这个注解加到mapper上,并且把参数id做key的时候,发现参数拿不到。这样是拿不到的@Cacheable(value="xxCache",key="......
  • 2022USACO-DEC-Silver
    题目链接T1.BarnTreeT2.CircularBarnT3.RangeReconstructionT1下面均以\(1\)为根来进行分析。算法思路:首先,定义一个数组dis表示当前子树的干草数和与应有的干草......
  • Redis查询之RediSearch和RedisJSON讲解
    目录1Redis查询1.1RedisMod介绍1.2安装Redis1.3RediSearch+RedisJSON安装1.3.1下载安装1.3.2修改配置1.4RedisJSON操作1.4.1基本操作1.4.1.1保存操作JSON.SET1.4.......
  • Object.keys()的默认排序
    constobj={'name':'张三','3':'ccc','a':'000','2':'222','1':'aaa'};Object.keys(obj);console.log(obj)["1","2","3","......
  • docker 安装rabbitmq
    1、firewall-cmd--zone=public--add-port=5672/tcp--add-port=15672/tcp--permanent&&firewall-cmd--reloadfirewall-cmd--list-portsmkdir-p/root/cloud/ra......
  • E - Don't Isolate Elements -- ATCODER
    E-Don'tIsolateElementshttps://atcoder.jp/contests/abc283/tasks/abc283_e 思路 参考https://www.cnblogs.com/cilinmengye/p/17008799.html ......
  • 2022CSP-J线上游记
    写在前面安徽CSP取消了……去年CSP考炸的我本来想今年一雪前耻(bushi),结果……T1第一题大毒瘤!首先观察数据可以分类如下两种情况:\(a=1\)直接输出\(1\),return0\(a......
  • CF1007A 题解
    题目传送门题目分析贪心水题。首先将原数组从小往大排序,然后不难想到一个简单但会超时的思路,即对每个位置,向后找到一个比自己大的数进行搭配。然后是一个简单的小优化,......
  • 1.7 vp Codeforces Round #839 (Div. 3)
    A-A+B?题意:给出两个0~9的数字和一个加号。要求输出数字相加的和思路:用字符串输入,第一位和第三位相加减去两个字符0即为数字和。voidsolve(){ strings; cin>>s;......
  • Isaac Sim 机器人仿真器介绍、安装与 Docker [1]
    前言与参考此文书写于:January6,2023,更新于January6,2023;可能会随着时间的变化此教程会有过时概念哦IsaacSim相关参考链接:官方文档地址官方dockerimage镜......