换个角度看契约测试

dc81bc19e07e4d88cef12052c2d3214f.gif

本文作者:付彪,Thoughtworks总监级质量分析咨询师,常年专注于软件测试与软件质量保障领域。精通经典测试理论、自动化测试设计与实施,以及通用型软件系统前后端的各种测试活动,在敏捷测试和微服务系统测试方面有非常丰富的实践经验。长期关注工程效能与新兴技术对传统软件测试的革新,坚持通过博客和开源软件助力行业和社区发展。

如今,契约测试在测试策略层面已经确确实实地被很多团队落地实践,无论是对工具的熟练层度、还是对引入契约测试的主观意愿,越来越多的团队在契约测试上都展现出了更高的使用水准。

最近,我接触到了两个不同项目的一些事情,它们都对契约测试有所涉及,但又都包含了一些很容易让人迷失的细节,所以想和大家一起分享。

生产者端的契约测试不是“写”出来的

在一次帮助项目上的开发同学评审契约测试代码的时候,我留意到开发同学多次描述“……在生产者端的实现是这么写的……” ,我顿时感到有些“好奇”,因为正常情况下,Pact在生产者端的契约测试不是写出来的,而是执行出来的(否则“消费者驱动的契约测试”的最终结果就只能是累死生产者团队)。于是我们进一步地对生产者端的契约测试代码进行了走读。

结果发现,开发同学通过注解的方式、使用Pact的state功能对契约文件中定义的每一个交互分别进行了对应响应的实现。这样就会出现“契约文件定义多少交互,生产者端就要写多少测试”的情况,显然,这不是一种最佳的契约测试实践方式。

我们先来回顾一下契约测试在生产者端的一般实践方式,如下图所示,Pact从Pact Broker拉取契约文件(或者直接读取本地的契约文件),然后从契约文件中提取交互中的请求发送给生产者服务,生产者服务根据请求返回对应的响应,Pact再将生产者返回的真实响应与契约文件中定义的期望响应进行对比,得出测试结果。在这一过程中,生产者端的契约测试有两个重要特征:

  • 生产者端只需要执行测试,而不需要写测试,测试案例都由Pact通过契约文件来触发执行;

  • 测试执行过程中,要求生产者服务一定要是尽量真实的服务;

这里的“真实”又体现在两个点上,其一,服务一定要是真正部署且运行的服务;其二,服务的代码一定(或尽量)要贴近真实产品的源码,避免包含或使用支持测试的辅助代码,即测试尽量保证非侵入性。29583e737d0469e01f1c9b7b4793f1be.png

而Pact提供的state方式,恰恰是一种侵入式的测试方式。通常来讲,当消费者端期望测试一些异常情况下的交互时,可以和生产者端协商使用state来支持测试,比如测试生产者服务出现Internal Server Error的情况,这些情况在正常的测试环境中很难稳定触发,不能支持测试的持续执行,所以才会使用state的方式来“模拟”。所以,作为一种侵入式的模拟测试手段,state方式在契约测试中一定要慎用。

那么,回过头来想一下,为什么开发同学会在生产者端的契约测试中地毯式地使用state呢?我想可能还是对契约测试的理解有些流于表面造成的。通常情况下,当我们说到“写测试”的时候,头脑中的步骤大概是这样的:

  1. 分析和思考测试点;

  2. 把测试案例写下来;

  3. 执行测试;

而在使用Pact进行消费者驱动的契约测试时,特别是在生产者端,“分析和思考测试点”的工作显然是不需要的,因为已经有契约文件这个现成的测试集合了,那么要做的就是“写测试案例”和“执行测试”。怎么写?对于生产者端的契约测试,Pact官网并没有给出多少写的步骤(因为确实在生产者端,通常情况下就不需要写测试),唯独要写的就是state的方式。由此,可能会误导一些开发同学以为生产者端的契约测试就是根据契约文件的定义使用state来遍地开花,实则不然。

生产者端的契约测试要使用Mock吗?

还是在上述对生产者端的契约测试进行评审的过程中,我们发现生产者端的state之所以“很香”,一个非常重要的原因就是方便构造数据。我们上面提到,state的主要使用场景是模拟生产者服务出现异常情况的响应,异常情况都可以模拟,那正常情况的响应岂不更是顺手拈来。以SpringBoot的Controller、Service、Repository三层划分来说,既然能在Service层(甚至Controller层)使用Mock返回任意数据的响应,那何必还去调用依赖服务或者查询数据库然后组装真实数据返回呢?毕竟对测试来说,测试数据的准备和保障永远都是令人头痛的事情,这对契约测试来说也不例外。所以,在“真香定律”面前,state + Mock就成了生产者端执行契约测试的最佳组合......貌似。

这样的认知有一个看似无懈可击的“理论支撑”,那就是:“契约测试验证的只是生产者服务返回的数据结构(少量情况下可能也会校验数值),通俗来讲就是schema,既然只验证schema,那生产者服务内部的数据是Mock的还是E2E的,其实并不重要”。如此考量,可能也是对契约测试的认知流于片面所致。作为契约测试众多价值中的一种:验证生产者服务的履约能力,期望的一定是最真实的生产者服务,能够E2E就尽量E2E,能不使用Mock就尽量不使用Mock,只有这样,我们验证的履约能力才是最接近真实的履约能力。实施自动化测试的目的,不是让测试能永远顺利通过,而是让测试能永远体现出其应有的价值。

当然,理想很丰满,但现实却很骨感。在实践过程中,我们确实难免会遇到依赖服务不稳定、测试数据难以构造等问题。这种时候,我们首先应该考虑的是使用虚拟服务(比如wiremock)和测试数据库(比如testcontainers),而不是通过state在生产者服务内部添加Mock代码,因为前者在解决数据依赖的同时保证了生产者服务自身的完整性和真实性,而后者则是外科手术式的侵入式实现。而当虚拟服务和测试数据库都无法满足我们的需求时,比如就是需要构造Internal Server Error的情况,那么就大可使用state + Mock的组合了。

换个角度看契约测试

通常情况下:

  • 我们都是在服务之间讨论契约测试,典型的场景就是在微服务之间构建契约测试;

  • 契约测试要想发挥最大的价值,一定是在多(消费者)对一(生产者)的架构中;

然而,这两点也有例外。前段时间帮助另一个项目解析测试痛点时,就遇到了一个非常鲜明的案例。如下图所示,一个APP前端消费后端的API服务,甚至可以把后端的API服务理解为APP专属的BFF。对于这样的架构(其实这里都谈不上“架构”,仅仅算个调用关系罢了),通常我们是完全不用考虑做契约测试的,因为如此架构下的契约测试并不能带来多余UI E2E测试与API功能测试的任何价值。a3aa907f01b88ac5713f71fa78d490b3.png

然而,这个项目的痛点在于,在生产环境上要求可以同时共存不同版本的APP,BFF需要对历史版本的APP进行前向兼容。不同版本的APP在消费BFF时使用的接口定义可能不同,这就要求团队在每次更新BFF版本时,都要对所有历史版本的APP做回归测试,以避免出现接口不兼容的情况。显而易见,这个测试工作量是很大的,即使通过UI的E2E自动化测试来全回归,测试执行和维护的工作量也是远远超出了我们通常基于测试金字塔所期望的可控范畴。可如果我们换个视角来看待这个问题,如下图所示,将APP的不同版本视为各自不同的消费者服务,BFF还是那个唯一的生产者服务,那整个架构不就是我们前面提到的最经典的契约测试场景了吗?179b97829434e58d1caa9a2729f665be.png

所以,只要我们能够建立既往各版本APP与其当时版本BFF之间的完整契约测试,我们就能为BFF的后续迭代变更提供强有力的质量保障,从而避免了每次更新BFF都要回归测试各个历史版本APP的艰难挑战。

说到这里,细心的同学可能会想,“UI的E2E自动化测试解决不了这个问题的根本原因是工作量太大,契约测试能够解决这个问题无非是因为测试维护和执行的工作量小而已,那么类似的,不用契约测试,而用API功能测试的方法,为各个版本的APP所消费的后端BFF版本建立各自的自动化API功能测试,是不是也能解决这个问题呢?” 答案是肯定的,建立多套自动化API功能测试确实可以解决相同的问题。那它和契约测试的区别又在哪里呢?答案就是没有区别。在这个场景下,当我们使用Pact进行契约测试时,其实质也是使用不同的契约文件触发了不同的版本的API测试。而当我们抛开Pact这个工具,使用类似RestAssured这样的工具来实现类似的“多套”API自动化测试时,我们达到的效果和使用Pact是几乎完全相同的。其实,当我们真的构建这种多套API功能测试时,我们所做的工作就是使用RestAssured对契约测试进行了实现。所以说,契约测试更重要的是一种思想,当我们剖析完问题的实质、确定可以使用契约测试来解决问题后,选择怎样的工具是可以非常灵活的。

以上即为我在最近工作中遇到的一些关于契约测试的真实思考,潦以叙之。当然,这里我没有对很多细节进行阐述,比如什么是契约测试、如何做契约测试、什么是虚拟服务等等,对于这些技术细节,感兴趣的朋友可以关注阅读我和秦五一、齐磊、雷辉三位资深Thoughtworker合著的《深度实践微服务测试》一书。e34af82c4d463baed60a0499ac946927.pngd4c1dfbe14be88003e0e286715744931.jpeg

《深度实践微服务测试》内容来源于4位作者服务多个大中型知名企业后总结的微服务测试方法论与实战经验,内容翔实、鲜见。全书涵盖测试策略、接口与界面自动化测试、契约测试、性能测试、微服务监控、服务虚拟化、混沌工程、安全测试。一本书破解当下测试工作的众多难题,可为微服务和分布式系统的质量保障提供一站式解决方案。b373a646044da67f5c3ee104e455654e.jpeg

读者对象

  • 对于有一定接口测试经验的测试人员,本书将能够很好地帮其构建整个微服务系统的测试知识体系。

  • 对于没有接触过后端服务测试的测试人员,比如做Web UI测试、手机App测试,以及桌面或者嵌入式应用测试的读者,本书同样能够帮助其上手微服务系统下的各项测试工作。

  • 对于把控整个微服务系统交付的项目组长、系统架构师,本书能帮助其从测试的角度建立对微服务系统质量保障的完整、全面认知。

专家推荐

  • 本书不局限于讨论微服务测试及其特有的测试实践,如契约测试、服务虚拟化等,而是扩展到微服务环境下的质量保障工作,包括混沌工程和安全测试等内容;本书既有系统性的阐述,也有具体的案例分析和实际的操作指导,对做好微服务测试很有帮助,推荐阅读。

    朱少民,同济大学特聘教授、QECon大会发起人、《全程软件测试》《敏捷测试》作者

  • 作为新时代的软件测试技术人员,你不管是从一开始就接触微服务架构,还是从原本的巨石架构或者分布式架构向微服务架构转型,都非常有必要深入学习微服务测试的方方面面。因此我们急需一本理论与实践相结合,尤其能够结合实际案例进行讲解的书,本书的出版填补了这一空白。

    通读全书可以让读者对企业级微服务测试有全面体系化的认识,可以说本书是软件测试人员躬身入局,系统掌握微服务测试体系的必读佳作。

    茹炳晟,畅销书《测试工程师全栈技术进阶与实践》作者

2589576ec3d6c9bc5680d5a545334978.jpeg

扫描二维码了解详情

388b23a6c358fd21448649e5a4b7ca66.gif

更多精彩回顾

书讯 |8月书讯(上) | 重磅新书来袭!

书讯 |8月书讯(下) | 重磅新书来袭!

资讯 |《Java核心技术》基于Java 17全面升级!

干货 |再见了Java8,Java17:我要取代你

干货 |市面上的大前端岗位到底是做什么的?

73539147f86d8381e5e070f4cb51aaf1.gif

7095fd3c0275495ecb611c2851d540a1.gif

点击阅读全文购买

相关推荐

什么是AB实验?能解决什么问题?终于有人讲明白了

导读:走向身边的AB实验。作者:木羊同学来源:大数据DT(ID:hzdashuju)“AB实验”是一个从统计学中借来的工具。我和大家一样,每次只要看到“统计学”这三个字,下意识就觉得这事和我没啥关系,然后手就忍不住想要点击下一条文章。不过且慢,开篇我说AB实验是一个从统计学中借来的工具,借来给谁用呢?给我们自己用。所以下面不会介绍太多的统计学知识,主要讲讲AB实验能和我们发生怎样的故事。01 什么...

华章IT官方博客 4499

【第115期】世界一流大学计算机专业,都在用哪些书当教材?

导读:转眼间离新学期开学又不远了。清华、北大、MIT、CMU、斯坦福的学霸们在新学期里要学什么?本文就带你盘点一下那些世界名校计算机专业采用的教材。不用多说,每本都是经典的烧脑技术书,建议配合防脱发产品一起食用。(要囤书的同学,一定要看到最后!)1深入理解计算机系统(原书第3版)作者:兰德尔 E.布莱恩特 大卫 R. 奥哈拉伦????卡内基-梅隆大学、北京大学、上海交大等国内外众多知名高校选用指定教材...

华章IT官方博客 3927

腾讯大数据总体架构图,对外公开!

导读:腾讯作为国内体量最大的互联网公司之一,业务涵盖用户日常生活的方方面面,面对如此巨大业务数据量,如果不能对数据进行专业化处理并高效有序地存、管、用,如果不能使数据产生应有的价值,那么数据资产将会成为数据垃圾,成为社会和企业的负担。大数据平台作为腾讯底层的基础设施之一,每天必须处理千万级规模的离线数据任务及十万亿级别的实时计算,否则无法满足业务每天数以亿计的数据分析计算的需求。本文主要介绍腾讯大...

华章IT官方博客 3706

API安全实战

一提起“信息安全”,不管是业内专家还是所谓的“吃瓜群众”,多半都会在脑海中浮现“网络安全”“Web安全”“软件安全”“数据安全”等常见的词汇。市面上绝大多数安全类书籍也多集中在这几个领域,而从API视角阐释信息安全的资料却凤毛麟角,也很少有人从软件系统之间“接口”的角度来分析和挖掘安全漏洞。API最初的应用基本都在本地系统之上。时至今日,API已经成为各类软件系统(尤其是大型Web系统)集成的一种...

华章IT官方博客 2993

Roblox、Epic Games和Meta,详解三巨头如何引爆元宇宙

导读:在元宇宙趋势确立的过程中,标志性公司的价值确立起到了重要支撑作用。元宇宙第一股Roblox、元宇宙游戏第一股Epic Games和元宇宙社区代表公司Facebook(已改名为Meta)这三家公司对于确立元宇宙趋势起到了重要推动作用,我们称它们是元宇宙先锋队并不为过。下面对三家公司分别做详细的介绍和分析。作者:周掌柜来源:大数据DT(ID:hzdashuju)01 Roblox与元宇宙▲Rob...

华章IT官方博客 1550

干货:23 个示例,吃透ES!

为了说明Elasticsearch的不同查询类型,我们将搜索一个图书文档集合,其中有以下字段:标题、作者、摘要、发布日期和评论数量。但首先,让我们创建一个新的索引,并使用批量API索引一些文档:PUT /bookdb_index { "settings": { "number_of_shards": 1 }}POST /bookdb_index/book/_bulk { "inde...

华章IT官方博客 1187

SaaS 定位:赢得市场

‍‍一.什么是产品定位通常我们讲定位时,可能涵盖 3 种意思。坐标,当前所处的位置。方向,指想要去的地方。声明,对定位的具体描述。在定位前加上“产品”,也有其 3 种意思。该产品在不同维度中(例如价格和市场、对象和业务等)的市场位置。确定该产品的发展方向,以及如何发展。对该产品定位的文字描述和解释。二.为什么做 SaaS 定位概念弄清楚后,我们来看看为什么要做 SaaS 产品的定位。2.1 认...

华章IT官方博客 1170

数据、算法、场景:工程化的“三驾马车”

作者:陆兴海 彭华盛编著来源:大数据DT(ID:hzdashuju)人们对新事物的认知过程总是螺旋式迭代演进的,对于智能运维也是如此,智能运维是运维发展的方向,而且是一个长期的过程—从经验主义到数据驱动,再回归到业务驱动的过程。从2016年对于Gartner的概念的理解,到之后每一年不断的探索与实践,到2020年,在笔者参加的智能运维国家标准编写组会议上,行业内达成了高度的、更加面向现实的共识:...

华章IT官方博客 1581

【第114期】五大经典风控系统全面解读

什么是风控系统?系统是由多个相互联系的元素组成、能完成特定功能的整体。风控系统是系统的一种,除了具备系统的三个特征之外,还具有两个特征:一是计算机系统,包含软件、硬件、数据。二是服务于风控业务,在风控领域使用。风控系统的分类风控系统分为在线系统和离线系统。在线系统:即产生真实业务结果,如审批系统;离线系统:不产生真实业务结果,主要作用是展示和分析,如BI系统,建模平台。典...

华章IT官方博客 4144

云计算的发展现状及未来

作者:阿里云智能-全球技术服务部来源:大数据DT(ID:hzdashuju)01 云计算的发展现状1. 云计算市场的马太效应云计算已走过十几个年头,从异军突起到百花齐放再到巨头崛起,云计算市场同样出现了马太效应。当前的云计算市场有以下几个比较明显的态势。聚类分化:由于云计算是一个规模性业务场景,只有达到一定规模后,边际成本才会出现,所以近年来,云计算出现了有趣的变化。一方...

华章IT官方博客 5853

OLAP:实现高效BI分析的必备技术

“每个做大数据的同学,都应该听过OLAP或者实践过。”什么是OLAP多维分析,它究竟有啥作用,如今都有哪些流行的技术解决方案来实现?今天我们详细聊一聊。文中部分内容参考了朱凯老师的《ClickHouse原理解析》,感兴趣的朋友可以买来读一读。01—BI系统的演进在聊OLAP之前,我们先把时间拉长,聊聊BI系统。(1)传统BI系统上个世纪,IT技术迅猛发展,主要特征就是线...

华章IT官方博客 1242

10000 字的 pandas 核心操作知识大全!

工作中最近常用到pandas做数据处理和分析,特意总结了以下常用内容。内容较多,建议收藏。引入依赖#导入模块importpymysqlimportpandasaspdimportnumpyasnpimporttime#数据库fromsqlalchemyimportcreate_engine#可视化importmatplot...

华章IT官方博客 1065

企业数据治理面临的 6 大挑战!

来源:谈数据,作者:石秀峰全文共3825个字,建议阅读8分钟数据作为数字经济时代新型生产要素,是企业的重要资产,也是赋能企业数字化转型的基石。在向着数字化快速迈进的同时,当前企业数据治理都面临着各种挑战和不足。企业越大,需要和产生的数据也就越多,数据越多,意味着就越需要定制适合自己企业的有效的、正式的数据质量策略。对企业而言,不同的行业、不同的业务特点,不同的信息...

华章IT官方博客 1141

你必须要掌握的大数据计算技术,都在这了

导读:分布式的并行计算框架,从数据处理时效角度可以分为离线的批处理框架和实时的流处理框架。当前最流行的批处理框架是Spark,流处理框架是Flink。01离线批处理这里所说的批处理指的是大数据离线分布式批处理技术,专用于应对那些一次计算需要输入大量历史数据,并且对实时性要求不高的场景。目前常用的开源批处理组件有MapReduce和Spark,两者都是基于MapReduce...

华章IT官方博客 2459

终于有人把AB实验讲明白了

导读:近几年AB实验的曝光度越来越高。AB实验并不是近几年才有的,从推荐系统诞生开始,AB实验就扮演着重要的角色。本文主要介绍AB实验的基本概念,包括AB实验和在线AB实验的定义以及AB实验的常见类型。作者:刘玉凤来源:大数据DT(ID:hzdashuju)01 AB实验的定义AB实验又称为受控实验(Controlled Experiment)或者对照实验。AB实验的概念...

华章IT官方博客 1529

看了无数篇文章,终于有人把大前端讲清楚了

近几年,大前端一直是行业热点。相较于单一端工程师,大前端工程师具有更大的职业广度。本文将带领读者快速了解大前端的生态、人才需求,帮助读者从整体掌握行业需求与个人发展路线。1.大前端能做什么有人把前端+移动端称为大前端,也有人把前端+服务端称为大前端,或者把“前端+移动端+后端”称为大前端,后来又出现了全栈工程师的概念,以及所谓的泛前端概念。我们不争论具体哪个概念或者定义是...

华章IT官方博客 7864

【第113期】分布式事务处理方案大 PK!

首先先说一个大原则:分布式事务能不用就不要用,毕竟这个用起来还是有一些麻烦的。当然,不用和不会用可是两码事。1. 分布式事务基础理论学习分布式事务,有一些基础理论需要我们先来了解下。1.1 本地事务本地事务是指将多条语句作为一个整体进行操作的功能,通过数据库事务可以确保该事务范围内的所有操作都可以全部成功或者全部失败,如果事务失败,那么效果就和没有执行这些SQL一样,不会...

华章IT官方博客 1053

逆流而上:计算机专业图书破圈营销,这个直播间做到了

你在直播间买过东西吗?是生活日用?还是零食饮料?或者是实体店优惠券?7月27日晚7点到10点,一场顺时而生却又处处“反其道而行之”的直播间打破了“直播带货”和“专业知识”的壁垒,将计算机专业图书带入直播当中,并在直播现场与众多知名计算机领域KOL连麦互动,交流分享经验。这是一场怎样的直播,这场直播背后又有哪些故事呢?| 一次叫好叫座的分享,一场事先张扬的直播“Java学习...

华章IT官方博客 1396

Jenkins 也宣布弃用 Java 8

出品 | OSC开源社区(ID:oschina2013)继Java 之父 James Gosling 先前称,开发者应尽快弃用 JDK 8,可以选择 JDK 17 LTS,因为后者在各个方面都带来了巨大的改进。开源 Devops 工具 Jenkins 宣布:从 6 月 28 日发布的 Jenkins 2.357 和即将发布的 9 月 LTS 版本开始,Jenkins 最低...

华章IT官方博客 1188

对话知道创宇丨如何守住内容安全生命线?

信息安全主要包括以下五方面的内容,即需保证信息的保密性、真实性、完整性、未授权拷贝和所寄生系统的安全性。信息安全本身包括的范围很大,其中包括如何防范商业企业机密泄露、防范青少年对不良信息的浏览、个人信息的泄露等。网络环境下的信息安全体系是保证信息安全的关键,包括计算机安全操作系统、各种安全协议、安全机制(数字签名、消息认证、数据加密等),直至安全系统,如UniNAC、DL...

华章IT官方博客 1087

《前端跨界开发指南》重磅来袭!

谨以此书献给相信“努力有用”的你by 大史不说话《 前端跨界开发指南:JavaScript工具库原理解析与实战》先做个自我介绍我是大史不说话,是一名前端工程师,一个相信“努力有用”的、不太聪明的、行动力还可以的程序员。曾经因为一篇《10000小时后,我从外包走进了字节跳动》而出圈,被朋友们戏称为“万时大佬”????。我2017年走进前端领域,2018年开始技术写作。为什么写这本...

华章IT官方博客 1327

李三红:Java版本升级需要纳入到可持续性维度

嘉宾 |李三红 撰稿 |云昭 审校 |千山如果从1992年Oka(Java的前身)算起,Java已经走过了30年的道路。作为公认的革新性的编程语言,Java怀揣着James Gosling,Patrick Naughton,Chris Warth,Ed Frank和Mike Sheridan的“可移植”、“跨平台”的初衷,在Bill Joy,Arth...

华章IT官方博客 372

Apache ShenYu毕业成为Apache顶级项目!

Apache ShenYu官宣毕业2022 年 7 月 28 日,全球最大的开源软件基金会 Apache 软件基金会发布博客,宣布 ShenYu 正式毕业,成为 Apache 顶级项目(TLP)。以上内容引用:https://blogs.apache.org/foundation/entry/the-apache-software-foundation-announces...

华章IT官方博客 547

超全!腾讯数据科学家深度长文讲透AB实验

导读:在数字化时代的大背景下,在数据驱动的产品增长理论和实践中,AB实验起的作用越来越重要。越来越多的岗位需要产品、运营、数据等职位候选人掌握AB实验相关的知识。作者:刘玉凤来源:华章计算机(hzbook_jsj)本文首先介绍AB实验的基本概念和原理,然后介绍AB实验的3个基本要素—实验参与单元、实验控制参数、实验指标,以及对于这3个基本要素的要求,之后介绍AB实验的2个...

华章IT官方博客 1705

8月书讯(下) | 人工智能、机器人、网络安全不可多得的好书上市!

豆瓣评分9.4、GitHub标星1.57万的“蒲公英书”《神经网络与深度学习》的实践篇8月重磅上市!机器学习、情感分析、对偶学习、智能无线机器人、网络安全等领域不可多得的好书,本本值得入手!参与文末赠书活动,好书就要抢先读。— 新书速览—1、《神经网络与深度学习:案例与实践》2、《机器学习Python版》3、《机器学习:从基础理论到典型算法(原书第2版)》4、《情感分析...

华章IT官方博客 1289

图解 3 种主流企业架构模式(建议收藏!)

导读:数字化转型的重要举措之一就是构建数字平台,实现对客户、员工、供应商及生态合作伙伴等的连接,为业务的发展提供坚实的基础。在UVCA时代,对于企业架构的诉求是既要保障业务的稳定运行,也要能够快速适应需求的变化。所以在规划数字平台时要积极引入业界成功的架构模式,达成解耦、服务化等目标。作者:新华三技术有限公司来源:大数据DT(ID:hzdashuju)业界主流的架构模式包...

华章IT官方博客 1373

市面上的大前端岗位到底是做什么的?

市面上的大前端岗位到底是做什么的?大前端这个词出现了不是一天两天了,但是这个岗位到底是做什么的,到目前也是仁者见仁智者见智,今天小编就带大家解开这个岗位的神秘面纱。其实对于所谓的【大前端】技术,市面上常见的有两种说法:一种是关于跨端技术,如Flutter、RN、小程序的集合称之为大前端。另一种是关于开发人员所具备的素质,把工程师同时具备前端+移动端的研发能力称之为大前端。...

华章IT官方博客 1238

华为数字化转型规划“三阶十二步法”

作者:华为公司企业架构与变革管理部来源:华夏基石e洞察(ID:chnstonewx)数字化转型是企业的必答题,企业必须自己主导自身的数字化转型,支撑主营业务成功。那么,怎样才能更好地帮助主营业务成功,又应该从哪里开始转型工作呢?这就涉及企业的数字化转型规划。我们说数字化转型是一项复杂的系统工程,而规划就是这项系统工程的顶层设计。一个好的规划应该对准业务战略,既能描绘出企业...

华章IT官方博客 2761

7行代码让B站崩溃3小时,竟因“一个诡计多端的0”

鱼羊 丰色 发自 凹非寺来源:量子位 | 公众号 QbitAI一个小小字符“0”,竟引得B站全面崩溃。不知你是否还记得那一夜,B站“大楼停电”、“服务器爆炸”、“程序员删库跑路”的彻夜狂欢。(手动狗头)时隔一年,背后“真凶”现在终于被阿B披露出来——没想到吧,就是这么简单几行代码,直接干趴B站两三个小时,搞得B站程序员彻夜无眠头发狂掉。你可能会问,这不就是个普普通通用来求...

华章IT官方博客 560

豆瓣评分9.4,邱锡鹏教授蒲公英书姊妹篇《神经网络与深度学习:案例与实践》重磅来袭

“我不能创造的东西,我就不理解( What I cannot create, I do not understand).”这是诺贝尔物理奖获得者理查德 ·费恩曼( Richard Feynman)在他办公室黑板上留下的一句话。深度学习的学习中也是如此,只有通过实践才能更深入地理解理论。蒲公英书《神经网络与深度学习》主要阐述了神经网络与深度学习技术的基本原理和方法。很多读者...

华章IT官方博客 2024
上一篇: Apache ShenYu毕业成为Apache顶级项目!
下一篇: 《前端跨界开发指南》重磅来袭!
hzbooks
hzbooks 企业官方账号 企业官方账号
博客等级 码龄19年 2400粉丝 · 969原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值