jmock作者撰写的有关模拟框架的优秀论文 。 本文写于18年前的2004年,但其中有许多构建可维护软件系统的技巧。


在这篇文章中,我将重点介绍本文中的关键思想,但建议您阅读本文,以获取有关模拟和编程实践的重要思想。

模拟对象是测试驱动开发的扩展。

当我们开始考虑首先编写测试时,模拟对象可能会很有用,因为这可以模拟仍未开发的零件。 认为是构建原型系统的更好方法。

模拟对象作为一种将测试与第三方库隔离的技术不太有趣。

这是关于模拟的常见误解,我已经使用模拟看到/编写了许多代码。 这确实是来自模拟框架作者的大开眼界的事实。

写作测试是设计活动

确实如此,但是作为工程师,我们花了很多时间放弃编写测试的最佳部分。 由测试驱动的设计还提供了有关实际问题的见解,并导致了
发明,因为开发人员必须认真考虑问题并避免过度设计

耦合与内聚

当我们开始接线测试时,它为我们做出的耦合和内聚决策提供了很好的思路。 好的软件将具有低耦合和高凝聚力。 这也导致任务的功能分解。

井设计系统的另一个好处是它没有Law_of_Demeter ,这是不经意间引入系统的常见问题之一。 许多微服务都遭受这种反模式的困扰。

需要驱动的发展

由于模拟需要显式的代码/设置,因此它来自测试用例的需求/需求。 您不必根据预测会在6个月后需要某些功能进行编码,因此可以专注于客户需求。 测试结果产生的所有接口都狭窄且适合目的。 这种类型的开发也称为自顶向下开发。

纸报价

“”” 我们发现,需求驱动的开发有助于我们专注于手头的需求并开发一致的对象。 “””

按组成编程

测试优先方法允许您考虑组件的可组合性,每件事都作为构造函数参数或方法参数传递。

一旦使用这样的设计原理构建系统,就很容易测试/更换系统的一部分。 模拟对象允许考虑可组合性,以便模拟系统的某些部分。

模拟测试变得太复杂

论文中的一项观察谈到了模拟测试的复杂性。 如果系统设计薄弱,那么模拟将变得困难而复杂。 它确实放大了问题,例如耦合,关注点分离。 我认为这是最好的使用模拟对象来获取设计反馈并像激励器一样使用它来使系统变得更好的方法。

不要在模拟中添加行为

根据论文,我们绝不应在存根中添加行为,以防万一您有被诱惑这样做的可能,这表明责任错位了。

如果您喜欢该职位,那么您可以在Twitter上关注我,以获取有关我撰写的随机内容的通知。

翻译自: https://www.javacodegeeks.com/2019/08/need-driven-software-development-using-mocks.html

使用Mocks进行需求驱动的软件开发相关推荐

  1. posman mocks_使用Mocks进行需求驱动的软件开发

    posman mocks jmock作者撰写的有关模拟框架的优秀论文 . 本文写于18年前的2004年,但其中有许多构建可维护软件系统的技巧. 在这篇文章中,我将重点介绍本文中的关键思想,但建议您阅读 ...

  2. 软件开发作为一种价值领域的研究

    免责声明 本文是我对软件开发本质的个人看法.这并不是要成为科学论文,因此,许多陈述是故意加粗和直接的,以使文章简短.我尽力根据自己的观察和可用的资料来介绍软件开发的性质,但是我不是商业理论家.科学哲学 ...

  3. 测试自动化金字塔在软件开发中是如何使用的?

    测试自动化金字塔,是一个指南,指导您进行什么类型的测试以及每种测试的数量.测试自动化金字塔有助于创建更高效的测试,并导致向客户发布更可靠的软件. 测试自动化金字塔的好处 测试自动化的大部分好处显而易见 ...

  4. 基本软件开发模型:瀑布模型、V型模型、迭代模型、增量模型、螺旋模型、大爆炸模型、敏捷模型、原型模型、W模型 特点分析与总结

    瀑布模型 在瀑布模型中,开发过程是线性的.任务和阶段按严格顺序一个接一个地完成.进度平稳地向下流动,就像瀑布上的水一样. 将软件生命周期划分为制定计划.需求分析.软件设计.程序编写.软件测试和运行维护 ...

  5. 软件开发中 前台、中台、后台英文_一个微服务业务系统的中台构建之路

    中台是近两年软件开发领域的热点话题,相关的文章也成为了各个技术社区和媒体争相报道的网红内容.作为企业支撑业务开发的核心系统,中台的重要性不言而喻,很多企业也开始尝试中台的构建和落地工作.Biz-UI ...

  6. 软件工程:传统软件工程 vs 敏捷软件开发

    转自我的博客园文章: http://www.cnblogs.com/katniss-smile/p/5982643.html 首先给出软件工程和敏捷软件开发的定义: 软件工程(Software Eng ...

  7. 面向对象的软件开发 (转)

    面向对象的软件开发 (转)[@more@] 面向对象的软件开发 Linda M. Northrop (本文转载自软件工程专家网www.21cmm.com,不代表gigix观点) 1 历史回顾 针对日趋 ...

  8. 大数据开发和软件开发哪个前景好?

    大数据开发和软件开发哪个前景好?大数据开发学习有难度,零基础入门要先学习Java语言打基础,然后进入大数据技术体系的学习,学习Hadoop.Spark.Storm等知识.软件开发工程师根据不同的学科从 ...

  9. 【软件工程】RUP与软件开发5大模型

    软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...

最新文章

  1. 算法--------删除重复元素,但保留两个
  2. python str转dict_在python中将str转换为dict
  3. LeetCode Algorithm 70. 爬楼梯
  4. php 数字加逗号,php数字满三位添加一逗号
  5. 前端学习(2585):vue-cli创建项目
  6. 数据流被污染?数据质量不高?蚂蚁金服数据资产管理平台了解一下
  7. 服务器 mysql iis 内存_windows服务器iis配置php和mysql环境图文教程
  8. linux-headers,如何升级linux-headers-generic?
  9. [Effective JavaScript 笔记]第61条:不要阻塞I/O事件队列
  10. 蓝彗星(差分+前缀和)
  11. 编译OpenJDK12:LNK2019 无法解析的外部符号sprintf
  12. 目录 1.1. Vue是什么??客户端mvc框架,,功能类似springmvc 1 1.2. Why?为什么使用它?? 1 1.3. 包括哪些组件与内部构成与原理 1 2. Howto 怎么使用 2
  13. Node进程管理工具—pm2
  14. Mysql孤儿文件_PostgreSQL中的孤儿文件(orphaned data files)
  15. 这几本值得你一看再看的程序员素养必备好书
  16. Java面试问题集锦
  17. python解压7z压缩包_python使用7z解压软件备份文件脚本分享
  18. Sketch中英文切换教程
  19. 如何同时使用内网(本地有线连接)和外网(WLAN无线连接)
  20. 安卓 微信公众号 默认不操作拦截回退失败

热门文章

  1. 2019.01.26【NOIP普及组】模拟赛C组总结
  2. 分布式锁的多种实现方式
  3. 认识JVM--第一篇-对象分配&回收算法
  4. java图片格式转化(例如jpg格式转化png)
  5. 服务器性能指标(一)——负载(Load)分析及问题排查
  6. 你必须了解Spring的生态
  7. 史上最全 BAT 大厂面试题整理
  8. 重要说明,粉丝必看【java人脸识别说明】
  9. java实现人脸识别源码【含测试效果图】——实体类(Users)
  10. Java 判断密码是否是大小写字母、数字、特殊字符中的至少三种