Fork me on GitHub

敏捷开发DDD/TDD/Right-BICEP/CORRECT/SOLID相关理解与总结

敏捷开发

什么是敏捷开发?

​ 在以往传统的软件开发模式中,我们通常使用的都是一种瀑布式的开发流程。那我之前工作过的两家公司来举例子吧。之前的公司组织结构分为一个项目经理BA,产品经理PM,技术组长TL,开发人员DEV,测试人员QA,项目通常是项目经理和客户沟通好一整个产品之后,由产品经理画出设计稿,最后开发评审,着手开发,最后测试通过后运维部署上线。这样的产品需要在一开始就确定所有需求,等到开发结束之后,才能看到最终的效果。一旦开发的过程中有需求的改动而客户必须要求修改时,万一开发人员在设计的时候没有考虑周全,有可能一个很小的地方的改动就会引起大规模的代码重构!而在于敏捷开发中呢,项目成员会尽可能的将项目进行细分,基于DDD把一整块大的需求切分成很小的模块,开发人员每次在足够小的需求上进行迭代开发。这样的软件开发模式足以应对非常频繁的需求变更以及同时能够保证软件开发质量。敏捷开发中有一个敏捷宣言,它规定了项目开发过程中几个方向的优先级,如下:

高优先级 低优先级
个体与交互 流程与工具
客户协作 合同谈判
响应变化 遵循计划
可工作的软件 面面俱到的文档

为什么要使用敏捷开发这种模式?

​ 敏捷开发的核心就是在一个高度协作的环境下,不断的通过反馈来进行自我调整和完善。重点强调的是协作反馈,协作体现在团队与客户之间的协作,团队成员之间的协作。反馈则是在开发中的任何环节,包括代码质量、自动化测试、部署、项目进度、需求变更、客户验收等,而且反馈越快越好。有句土耳其谚语这么讲的:"不管你走了多远,错了就要重新返回",所以我们越快得到反馈,就能越早确认自己有没有走错路。如果没有错,我们会更加充满信心。反之,及时做出调整,让成本最小化。总之使用敏捷开发的软件开发模式,能够让我们少走弯路,应对多变的客户需求。

敏捷开发相关的开发、设计原则与测试规范

SOLID 原则

这个其实是设计模式的原则或者说其主要思想,一般国内互联网公司面试也都会遇到的问题

S(SRP

单一职责:一个类在任何时候都只应该完成某一种职责或者功能,不应该将复杂的功能都编写在同一个类中。当类的使用者在使用这个类的时候一看到这个类就会联想到对应的功能,而且软件的维护者不需要对一个类维护太多的功能。

O(OCP

开闭原则:一个类或者软件实体应该开放扩展,关闭修改。也就是说对扩展开放,对修改关闭。类的使用者在

L(LSP

里式替换:一个类的所有功能都能够替换其所有父类。或者说接口出现的地方实现类都能够出现并完成功能。一般来讲这一点对所有面向对象语言都适用。

I(ISP

接口隔离:每个接口不应该存在子类用不到却必须实现的方法。听起来和第一点单一职责有点像,但是这个是说的针对子类的实现关系,而单一职责说的是针对当前类或者软件。

D(DIP

依赖倒置:就是面向接口编程。一个模块依赖于另一个模块的抽象而不是其具体实现。这样的好处是可以实现多态,不同的子类的不同实现在运行期绑定。

最后还有个【最少知道(迪米特法则)】:

一个类对于自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将复杂的业务逻辑封装在被依赖类的内部,使暴露出的功能单一化。

Riht-BICEP原则[单元测试相关]

在以往的公司,自己的职位是后台开发,那平时工作中也都只是在做【后台开发】做的事情,对于测试的工作都留给测试人员去做,自己一概不知也没有做过相应的学习。现在来到一个敏捷开发团队,系统的进行测试也成为一个deve的工作职责。而在这一方面要学习的第一个测试的原则,就是Riht-BICEP原则。

Right: 结果是否正确

最简单的,查看是否是预期结果。

B:Boundary,边界检测是否正确

边界是单元测试中最需要考虑的地方,也是开发中最容易忽略和BUG最容易产生的地方。以下是需要考虑的几个边界条件:

  1. 空值
  2. 越界问题,如月份不大于12,小时不大于24,及其他需要考虑的越界问题
  3. 是否含有违反常理的字符,例如文件名中含有乱码或者特殊字符image-20191024172031586
  4. 格式错误。例如手机号违反设计常理、邮箱、护照证件号码等等
  5. 不应该出现重复的数组中出现了重复值
  6. 是否已经就位或者满足执行条件。例如在文件生成之前执行打印操作就是不满足的。

I:inverse,调整顺序是否正确

即交叉测试,用不同的方式或者顺序得出结果然后再比较。

C:cross-check:环形测试

一些功能需要在环形测试中去验证正确性,例如计算4的平方根,用两个计算结果相乘和4比较。实际点的例子比如在数据库中插入数据然后再query。

E:error-condition: 异常情况

在实际生产环境中,会出现很多测试或者开发中遇不到的异常情况,例如断网,硬盘爆满等,基于服务高可用的需求,考虑以下一些情况:

  1. 内存溢出
  2. 空间不足
  3. 时钟混乱
  4. 网络不可达

p:performance : 性能曲线

要考虑随着用户量的增加,服务性能是否会受到影响。

CORRECT

正确性测试

TDD-FIRST(TEST DRIVEN DEVELOPMENT)

测试驱动开发:用测试去驱动开发,在开发功能代码之前,先编写单元测试代码。是敏捷开发模式中的一种设计方法论。

DDD(Domain-Driven Design)

DDD(Domain-Driven Design 领域驱动设计)即对软件所涉及到的领域进行建模。其实本质上一开始是针对数据库的设计方式——将软件所用到的数据模型进行建模,细粒度的划分那个模块都需要哪些字段。但是也不全然对,更详细的参照一篇博客:

DDD 极简教程

陈年风楼 wechat
本不想放微信的,如果有转账的需求,请加我好友~哈哈