自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 如何面对黑天鹅与灰犀牛?ThoughtWorks技术雷达峰会给出答案

技术始终在变化,观点永远不会短缺,因而,对于趋势的判断至关重要。ThoughtWorks技术雷达正是这样一份关注前沿技术性变化的报告:对当前软件开发中发人深省的改变进行解读,并指出可应用于项目中的新兴实践。技术雷达旨在为全世界的技术开发者们提供切实有效的观点,它以我们的日常工作和经验为基础,不仅涉及到新技术大趋势,更有细致到类库和工具的推介和评论,从而更容易落地。ThoughtWorks每年都会出品两期技术雷达,2020年最新一期的技术雷达报告已经发布,远程办公协同、X也是软件、数据视角的成熟和扩展、.

2020-07-17 16:18:54 29

原创 为什么需要敏捷的7个问题

在一次敏捷课程上,有一些大量有意思的问题,例如 “通过敏捷会让项目开发进度更快吗?”。其中一些也是几年前我想问的,并带着这些问题加入 ThoughtWorks。终于经过各种海内外敏捷项目,在一线开发有了对敏捷更为深刻的认识,现在回过头来聊一聊这些问题。为什么要敏捷?敏捷作为一种软件开发方法,或者项目管理方法,很容易被说的玄乎。软件开发一定要敏捷才行吗?实际上很多项目是可以不采用敏捷开发方法的。在很多年前的电信、银行领域,银行的软件主要是给行内内部使用的。那个时候的软件开发采用瀑布模型,把软件开发过程划

2020-07-14 16:39:37 61

原创 为什么需要敏捷的7个问题

在一次敏捷课程上,有一些大量有意思的问题,例如 “通过敏捷会让项目开发进度更快吗?”。其中一些也是几年前我想问的,并带着这些问题加入 ThoughtWorks。终于经过各种海内外敏捷项目,在一线开发有了对敏捷更为深刻的认识,现在回过头来聊一聊这些问题。为什么要敏捷?敏捷作为一种软件开发方法,或者项目管理方法,很容易被说的玄乎。软件开发一定要敏捷才行吗?实际上很多项目是可以不采用敏捷开发方法的。在很多年前的电信、银行领域,银行的软件主要是给行内内部使用的。那个时候的软件开发采用瀑布模型,把软件开发过程划

2020-07-09 12:09:15 65

原创 FizzBuzz与写代码的“一万”个细节
原力计划

摘要:技术是由一万个细节组成的,哪怕一个这么简单的题目,也有如此多的点。我也不敢说自己是什么高手,起码写了许多年代码,也就把自己写代码的思维展示给大家,希望对有心人有所帮助。非初学者向,虽然题是个简单的题,但要求读者有一定的敏捷工程实践及DDD相关经验。FizzBuzz是一个经典的TDD入门题目,麻雀虽小,五脏……勉强算全吧。Stack Overflow创始人曾经在他的一本书里写到,“不要假设程序员都会写程序,招一个程序员来先写个FizzBuzz看看,结果可能会令你吃惊。”我当时不信,于是在一个.

2020-06-24 10:08:46 79

原创 iOS打包发布那些事儿
原力计划

摘要:一个iOS应用最终能在用户的设备上使用,是经过了开发 -> 打包 -> 发布 -> 下载安装过程的。为了更易于理解,以及避免从一开始就陷入细节,本文将逆序讲述整个过程。一、背景在iOS开发中,大概每个新手都被各种配置、证书、打包和发布等事情折腾过,我亦如此。教程一搜一大堆,照着教程1234也能做下来。但是在这个过程中,我会产生很多问号:为什么程序能在模拟器上运行,却无法在真机上运行?为什么不是每个人都能在本地打包?具备什么条件才能打包?为什么需要证书,描述文件?生.

2020-06-17 10:49:15 147

原创 一项改变游戏规则的技术 - Flutter

"A fast app is great, but a smooth app is even better."使用Flutter beta版上线了一个APP的故事2018年的11月底,我第一次打开Flutter的官网,想看看Flutter到底是什么;3个星期后,我们赶在Apple的App Store审核团队圣诞节休假前,提交了第一个使用Flutter开发的App。当然,是iOS和Android双端同时提交。我们使用Flutter开发的产品是一个图片feed流,作为一个模块嵌入到一个美颜相机里面。.

2020-06-10 11:56:21 52

原创 一项改变游戏规则的技术 - Flutter
原力计划

"A fast app is great, but a smooth app is even better."使用Flutter beta版上线了一个APP的故事2018年的11月底,我第一次打开Flutter的官网,想看看Flutter到底是什么;3个星期后,我们赶在Apple的App Store审核团队圣诞节休假前,提交了第一个使用Flutter开发的App。当然,是iOS和Android双端同时提交。我们使用Flutter开发的产品是一个图片feed流,作为一个模块嵌入到一个美颜相机里面。.

2020-06-10 10:30:12 58

原创 谁说区块链保护隐私的?

我们当然知道隐私保护很重要,但是我以为区块链技术其实是放大了隐私保护的需求,并没有有效地解决这个问题。隐私保护里面有多少是区块链技术的功劳,就看我们往区块链这个概念里塞多少东西了。思考这一年,我看过不少媒体的报道,基本言必谈区块链能力之一 ——隐私保护。作为区块链从业者,我一方面很好奇那些文字背后的严肃技术;一方面也很怀疑区块链在隐私保护方向的具体价值。我们当然知道隐私保护很重要,但是我以为区块链技术其实是放大了隐私保护的需求,它并没有有效地解决这个问题。这就好比,医生告诉我一个真理 —— 睡眠很重.

2020-06-08 17:29:15 231

原创 DevOps实施的五个关键点

DevOps正在被越来越多的企业认可和采用,它的原则和实践不但适用于创业公司,对大型软件企业或软件开发部门也同样适用,至少在当前阶段有广泛的适用性。面对一个IT创业公司或是传统的软件开发企业,如何开展DevOps转型工作呢?在实施DevOps之前,必须明确目标和思路、确定要解决的问题。一般而言,实施DevOps是为了加快研发流程,实现企业价值,增加企业在行业中的竞争力。DevOps解决的是一整套的流程和协作的问题,要以全局性的视角和系统化的思维来审视开发和运维过程中的问题,加快研发流程、打造高质量的、可靠

2020-06-05 18:07:10 131

原创 有态度的前沿技术解析,第22期技术雷达

​技术雷达是ThoughtWorks每半年发布一期的技术趋势报告,它不仅是一份持续的技术成熟度评估,其产生还源于ThoughtWorks另一个更大宏大的使命—IT革命。我们一直深信,IT行业从定位、价值、实践和技术都会发生巨大的变革。然而任何宏观的变革,都会有一些微小的信号,我们需要持续关注这些微小的改变,这也就是技术雷达的由来。技术雷达自2010年创办以来,已经走过10年、累计发布22期。它比那些我们能在市面上见到的其他技术行情和预测报告更加具体、更具可操作性,因为它不仅涉及到新技术大趋势,更有细致到类

2020-05-31 14:23:57 602

原创 新一代BDD框架Gauge+Taiko
原力计划

BDD是什么BDD,Behavior Driven Development,行为驱动开发。如果你不是很了解BDD,可以参考我四年前的一篇文章说起BDD,你会想到什么,其中介绍过BDD的理论和应用。我们可以这样来概括BDD:BDD采用统一的领域特定语言(DSL)来描述业务场景和用户行为,让团队各个不同角色对业务需求有一致认识,从而做到更有效的沟通和更高效的协作;BDD的目的不是自动化测试,但是BDD可以有效指导自动化测试,基于BDD的自动化测试相当于维护了一份需求活文档,对项目需求的维护和管理非常

2020-05-27 10:06:53 85

原创 种草Cypress和TestCafe,QA同学一定想了解的Web UI自动化测试工具
原力计划

摘要:Cypress和TestCafe这两个工具相比于Selenium都更加的轻量级,且在不同的方面有了改进,比如安装更简单,增加了内置等待机制,调试更加方便等。Cypress、TestCafe、Puppeteer在技术雷达中被誉为后Selenium时代Web UI测试的三驾马车。一、初步印象谈起Web UI自动化测试,首先想到的肯定是Selenium了,毕竟Selenium是名噪一时的Web UI自动化测试工具。在一次QA Community的Catch Up上,大家聊起了最近火起来的Cypre.

2020-05-15 10:18:31 292

原创 条件型业务规则的抽象与实现——从Spring Profile得到的灵感
原力计划

摘要当我们更倾向于使用具体的场景沟通的时候,团队更不容易意识到需要从中寻找稳定的抽象。那么我们需要花费精力去改变用户的思维方式吗,如果需要又应该使用什么样的方式?又或者我们需要使用更抽象的方式来撰写用户故事吗?最近,有幸参与了一个平台型的项目,该平台支持多种类型的产品预订,并且对于不同的产品类型,支持不同的预订规则。开发团队想尽可能地将主流程实现得更通用,以便在将来更快速地支持新的产品类型...

2020-04-29 14:38:03 71

原创 Hacking,约不约!
原力计划

对于hacker来说,最有趣的事情莫过于破坏软件设计者的原有规则,重新建立属于自己的规则了。姑且不论这个行为是否合法或违规,单就技术本身而言,矛与盾、攻与防、破坏与重建的过程中,为了达到最终目的而衍生出来的奇妙技术,再配上天马行空的想像和创造足以 让人着迷不已。开篇尽管Linux内核开源,升级或替换内核十分方便,但仍有一些特殊场景,需要在不替换内核的前提下给内核“动手术”。考虑如下两种场景...

2020-04-23 10:26:39 65

原创 一个黑客的自白书
原力计划

我摊牌了,其实我是一名黑客,这是我的自白书。我将坦白当我准备入侵一个目标时,我是如何收集信息并入侵的。最重要的是,我会给你们一些有用的忠告。我是如何收集信息的当我有了一个目标,我就需要开始对目标进行信息收集。信息收集阶段很重要,因为目标一般对我来说都是黑盒子,我需要进行大量的信息收集才能知道这个系统的运行原理,以及哪里有漏洞可以利用。收集信息一般分为以下几种类别,咳咳,划重点了,必考的,...

2020-04-22 16:48:53 192

原创 GraphQL 测试实践
原力计划

我们很熟悉以REST实现的API,可以用任何能够发出http 请求的库或者工具来测试REST API。去年随着GraphQL在全球风靡,它也出现在了最近两期的ThoughtWorks技术雷达中,当我们面对新的GraphQL APi时,QA应如何应对? 知彼知己,方能百战百胜,下面让我们首先来看看什么是GraphQL,它和传统的REST API又有什么不同?什么是GraphQL ?Graph ...

2020-04-22 11:51:46 189

原创 异步函数的两个视角

我们来一起看一下两个程序员之间的故事。以下示例代码是用Scala写的,不过本文所讲的话题并不仅限于Scala,任何有Future/Promise支持的语言都是适用的。下面这个wiki页面罗列了各个有Future/Promise支持的语言,已经涵盖了大多数的常用语言。Future与promise实现列表我是异步函数的编写者我写了两个异步函数,来提供给其他程序员同事使用。type Call...

2020-04-21 16:02:58 68

原创 后端开发实践系列之四——简单可用的CQRS编码实践
原力计划

本文只讲了一件事情:软件模型中存在读模型和写模型之分,CQRS便为此而生。20多年前,Bertrand Meyer在他的《Object-Oriented Software Construction》一书中提出了CQS(Command Query Seperation,命令查询分离)的概念,指出:Every method should either be a command that perf...

2020-04-21 10:32:46 66

原创 Apache HBase内核深度剖析

摘要前面一篇文章介绍了Kafka的具体内容,今天讲述一下HBase相关的知识。首先HBase作为大数据发展初期伴随Google三大论文问世的一个组件,在今天依旧被广泛的应用,今天我们来仔细的分析一下HBase的内部原理,了解一下HBase的具体内幕,以便在工作中更好使用它。以下内容涉及到的源码基于HBase 的Master分支编译出的最新的3.0.0版本。HBase相关算法与数据结构基础知...

2020-04-09 18:52:00 55

原创 异地情侣如何安全地传递情书 — 哈希时间锁定机制剖析

在探索学习区块链扩容方面的技术时,了解到跨链是区块链二层扩容的重要部分,而实现跨链的技术主要有:公证人技术、中继/侧链技术、哈希时间锁定技术。接下来,我们将在这篇文章中详细介绍哈希时间锁定技术的原理及实现等。故事从前有一对分隔异地的情侣,他们用写信互诉衷肠,不过他们担心邮递员会偷窥信中的情话。男主想到了一个好点子,他让邮递员将一个盒子投递给女主,盒子里放着一把打开的锁,女主心领神会,写好书信,...

2020-04-01 17:18:51 163

原创 Apache Kafka内核深度剖析

摘要目前来说市面上可以选择的消息队列非常多,像activemq,rabbitmq,zeromq已经被大多数人耳熟能详,特别像activemq早期应用在企业中的总线通信,基本作为企业级IT设施解决方案中不可或缺的一部分。目前来说Kafka已经非常稳定,并且逐步应用更加广泛,已经算不得新生事物,但是不可否认Kafka一枝独秀如同雨后春笋,非常耀眼,今天我们仔细分解一下Kafka,了解一下它的内幕。...

2020-04-01 12:28:31 138

原创 使用DDD指导业务设计的一点思考

领域驱动设计(DDD) 是 Eric Evans 提出的一种软件设计方法和思想,主要解决业务系统的设计和建模。DDD 有大量难以理解的概念,尤其是翻译的原因,某些词汇非常生涩,例如:模型、限界上下文、聚合、实体、值对象等。实际上 DDD 的概念和逻辑本身并不复杂,很多概念和名词是为了解决一些特定的问题才引入的,并和面向对象思想兼容,可以说 DDD 也是面向对象思想中的一个子集。如果遵从奥卡姆剃刀...

2020-03-23 18:39:11 75

原创 ThoughtWorks的敏捷测试

起因我的同事肖然在 《ThoughtWorks的敏捷开发》一文中介绍了ThoughtWorks敏捷开发的全貌,并在其中简单介绍了ThoughtWorks是怎么做质量内建和敏捷测试的。我作为一名加入ThoughtWorks已经7年的QA,想更为详细的介绍一下这些内容,希望能帮助业界中仍对于敏捷测试有疑虑和困惑的团队建立起自己的敏捷测试体系和实践,从而帮助团队更好的实施敏捷软件开发。在目前的软件开...

2020-03-13 17:05:03 142

原创 大团队精益敏捷转型实践

精益敏捷转型听起来很容易,但做起来很难,很多组织在数字化转型的过程的早期,一到两个团队作为试点团队进行敏捷转型,都能获得不错的转型效果。随着转型的持续推进,涉及到越来越多的团队转型,这时就会暴露出早期没有发现的一些问题。我们经常说量变引起质变,如何保证组织转型过程中,大团队从传统的瀑布式开发转变到精益敏捷模式的开发呢?今天我们不谈理论,不谈框架(SAFe,LeSS),我想从一个实操的方面来剖析一些...

2020-03-12 16:24:24 115

原创 机器学习下的持续交付

文/Danilo Sato、Arif Wider、Christoph Windheuser译/白发川、沈建军、王登宇机器学习在行业中的应用变得越来越流行,然而相对于传统软件开发,例如Web服务或者Mobile应用来说,这类程序的开发、部署和持续改进也变得更加的复杂。它们的功能改变通常由以下三个维度驱动:代码本身的修改模型的修改数据的改变这类程序的表现行为通常是非常复杂、难以预测...

2020-03-09 17:54:54 129

原创 一个输入框你要做一周?

如果PO说这是个很小的改动,你不要信他一次有争议的估点在某次迭代会议上,PO希望交付这样一个“简单”功能:在应用中,用户可以输入自己的地址,这样我们可以定期邮寄一些宣传册给用户。按照PO的描述,这只是一个很简单的文本输入框,用户填写地址之后,地址信息随着其他个人信息一起存到数据库即可。PO甚至在白板上画了一个不太规则的长方形作为示意,然后满怀期望的将目光投向了你 — 一个做事情还算靠谱的...

2020-01-19 17:40:51 382

原创 日志中的用户隐私安全

摘要:对于敏捷团队,安全卡应该提到比业务卡更高的优先级,同样需要放在backlog里面进行track,需要kick off、deskcheck,需要一个正经的流程或者仪式感强化成员的意识:安全卡和业务卡、Bug卡都是项目交付中的一等公民。与“中国人愿意用隐私交换便利性”的心态完全不同,欧美国家在个人隐私保护方面明显走得更早也更远一些。在2018年5月GDPR发布前后的一段时间里,保护个人隐...

2020-01-16 10:49:49 5661

原创 一页纸测试策略

2020-01-13 17:02:47 90

原创 黑盒项目之历史原因

摘要:很多团队在习惯性的说出“历史原因”的时候,更多的是一种为了掩盖团队当前对这样的做的原因一无所知的说辞。因为项目运行过久,团队成员的更迭,很多项目上存在的问题或者说现状,对于现在的团队成员而言,俨然成了一个黑盒子。当你听到团队聊当前现状的原因里包括诸如“因为过去”,“以前就是这样”之类的字眼的时候,就要开始警惕了。一个团队常常会过度依赖项目开始的时候制定下来的规矩,认为遵守了这些就代...

2020-01-03 18:32:42 46

原创 全球技术宏观趋势——云、机器学习与其他

《技术雷达》是一份技术趋势快照,来自我们最近在软件行业的最新发现。以下是本期的一些重点内容:为争霸主,云产品还未成熟就已入市之前我写过一篇文章,其中提到云已成为当今业界的主导基础设施和架构模式,而且各大云供应商都在争夺市场份额,争取抢占先机。在我看来,这就导致他们在一些功能和服务远为真正成熟之前,就急于将产品推向市场。在过去,我们经常看到这种模式,企业软件供应商会宣称自己的产品拥有比竞争对...

2019-12-11 17:53:55 63

原创 修复缺陷的正确姿势

如果给我一个小时来修复一个缺陷,我会花50分钟来写测试,用剩下的10分钟来改代码—— 本来是一句模仿爱因斯坦的名言,结果发现爱因斯坦并没有说过……你确定这是个缺陷吗?下午2点,你喝下了一杯拿铁,它可以保证你在接下来的几个小时内保持清醒。突然,一位QA同事急匆匆的走了过来,从他的表情你就看出来事情不妙。果然,他告诉你SIT环境有个重大缺陷,如果不及时修复,好几个测试流程都不能进行。没错,你...

2019-11-07 14:31:48 141

原创 机器学习在干什么?

摘要机器学习是让计算机从较多的数据中提取出有用的信息,最后拥有决策判别的能力,那么在研究这件事之前,先放一张图片来做一个总结:当我第一次看到这个图的时候,就被吸引了,因为这么简单的6个小框框就诠释出了数据分析,机器学习,以及知识和信息的本质,那就是:数据经过处理和加工,变成了信息。信息之间产生了联系,形成了知识。通过现有知识,发现了一些知识之间的新关系,于是形成了洞见。把一系列洞见...

2019-10-18 16:57:45 83

原创 后端开发实践系列之四——简单可用的CQRS编码实践

本文只讲了一件事情:软件模型中存在读模型和写模型之分,CQRS便为此而生。20多年前,Bertrand Meyer在他的《Object-Oriented Software Construction》一书中提出了CQS(Command Query Seperation,命令查询分离)的概念,指出:Every method should either be a command that perf...

2019-10-18 14:26:55 52

原创 标准化技术下的软件开发

聊到集成测试、单元测试等测试分类,我想大多数人都有类似困惑或讨论,集成测试和 E2E 测试到底有啥区别。甚至还有一些系统测试、配置项测试等概念,不但让我们这种非 QA 专业的人弄不清楚,在和我们的 QA 同学讨论时也很难得到清晰的结论。家里有一台古董级别的笔记本,掌托和键盘几乎已经被磨花了,一天突然想检查下有没有特别的资料然后好处理掉它。一份测试相关的国标文档(GB/T 15532-2008)吸...

2019-09-27 11:21:31 29

原创 你真的需要那么多报表吗?

数据利用之现状-报表迷宫企业对于数据的重视程度越来越高,很多业务部门也深刻意识到了数据的重要性,希望通过数据挖掘出动态变化着的、复杂的、跨越多渠道的、内外部集成的业务现象背后的逻辑,从而来指导决策和运营。如何让业务人员更体系化,更高效快速的利用数据,对业务产生可度量的价值,则成为了困扰很多业务和数据分析人员的问题。在很多企业,我们看到了一些存在于数据利用方面的普遍问题:企业不知该如何合...

2019-09-20 11:56:33 143

原创 架构杂谈:737 MAX8 启示录

什么是架构?老规矩,引用 wiki:软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。请在脑子里先记下两个关键词:整体和抽象。本文将给你一些更深入的理解。架构值多少钱?737 MAX8 事故是前一阵儿的大事件,那么,它跟架构有什么关系呢?上图是传统的 737,下图则是 737 MAX8,可以看出,新的发动机更加短粗。从 1967 年 737-100...

2019-09-18 11:20:41 45

原创 为复杂混沌的微服务生产环境设计韧性系统

太长不读版即使每一个微服务都在测试部门的QA环境上通过了测试,当将其一个个部署到生产环境后,也必然会发生故障。不能以通过测试部门的QA测试为目标,而应该为生产环境的韧性而设计。当使用鱼骨根因分析法、因果回路图或者麦肯锡MECE分析法进行分析时,要小心不要用错场景,掉进复杂混沌世界的深渊。面对复杂混沌的生产环境,应该本着“不信有好事”的原则来进行“明哲保身”式的软件设计,并在生产环境中利用...

2019-09-12 15:41:51 57

原创 真正的敏捷工作流 —— GitHub flow

7991 年,随着极限编程(Extreme programming)方法论的提出,持续集成(Continuous integration)也随之成为一项标准化的敏捷实践,被逐步应用于各类软件的开发流程中。9102 年的今天,持续集成的概念已经在软件开发领域生根发芽,广泛应用于不同平台及设备的项目开发,极大提升了项目迭代速度,降低了维护成本。不过,作为“敏捷”的固有属性,持续集成也并不仅限于特定...

2019-09-06 10:44:08 156

原创 微服务分布式一致性模式

微服务拆分后遇到的一个麻烦是分布后的一致性问题。单体架构的业务处理和数据都在一个进程里面,一致性保障很成熟,开发人员基本上不用关心。当把业务系统拆分到不同进程时,就遇到了技术性一致性问题。这带来了纠结,我们希望有一颗银弹,一把解决问题。但由于分布式一致性在(CAP)理论上没有完美的解决方案,我们所能选择的方案是在特定业务场景下的选择。我们这里讨论的分布是指业务逻辑上做了拆分导致的分布,而不是数据...

2019-09-04 11:20:12 65

原创 使用Domain-Driven创建Hypermedia API

在现实世界中我们会遇到各种各样的复杂场景,没有一种API设计方式可以应对所有的场景。区别于”Consumer-Driven Contract”,本文将描述另外一种设计API的方式:Domain-Driven API。这不是API设计的标准方法,但是也许他可以给你灵感,帮助你设计出更具有表达力的API。POST /api/customerPOST /api/customer/orderPUT ...

2019-08-28 14:21:43 145

提示
确定要删除当前文章?
取消 删除