精华内容
下载资源
问答
  • [精选]会计理论契约关系与管理层会计行为.pptx
  • 为协调服装企业渠道间的利益关系,结合零售利益冲突成因,从利润最大化角度出发,依据需求服从均匀分布,分析批发价格契约与转运契约条件下,合作方式与订货量的变化对品牌企业、加盟商及零售整体的库存量、缺货量及利润...
  • 针对双边道德风险下正式外包契约无法有效激励双方共同努力这一问题,运用委托代理理论设计了非 正式的服务外包关系契约,分析了关系契约对双方共同努力的激励作用.研究表明:对任意折现率,实施关系契约的客户收益与 ...
  • 如何管理新生代员工以最大化其人力资本的价值一直是困扰实践界的问题。 然而,对于新生代员工的心理契约与工作满意度之间关系的... 研究结论有利于从心理契约的角度全面理解心理契约理论,提高新生代员工的工作满意度。
  • 与传统模型相比,利用委托-代理理论,建立可观测变量,设计了一个比较完备的契约模型,可以激励风险投资家努力工作,有利于保护投资者利益。该契约还将风险投资者的收益与风险投资家的收益联系起来,在契约完备性较...
  • 但是,婚姻契约理论无法解释最近半个世纪以来婚姻关系的发展。夫妻赡养义务、夫妻性自主权等法律关系已经相继突破了传统婚姻契约理论的框架制约,从而促使我们反省婚姻的本质到底是什么。从终极意义上来说,人类的婚姻...
  • 比特币与社会契约

    万次阅读 2019-05-14 09:42:23
    比特币是一个新兴的社会与经济制度,与我们现有的制度截然不同。...正是这样的一个理论框架使我意识到,比特币其实是一套社会契约理论。 首先,法定货币是社会契约的结果:人民赋予国家货币供应及货币重要...

    比特币是一个新兴的社会与经济制度,与我们现有的制度截然不同。因此对于比特币,在赋予其真正的经济价值之前,我们需要持怀疑态度,提出各种疑问。当然,有些疑问只能交给时间(或者 Lindy,正如 Popper 所说的那样)去解答,但这并不意味着我们不能提出相关理论来猜想答案。正是这样的一个理论框架使我意识到,比特币其实是一套社会契约理论。

    首先,法定货币是社会契约的结果:人民赋予国家货币供应及货币重要用途的控制权。反过来,国家利用这种权力来管理经济,重新分配财富和打击犯罪。但许多人并没有意识到比特币也是通过社会契约来实现的。

    社会契约理论能解答一些基本问题:为什么会有比特币? 谁决定了它的属性? 现在是谁在控制它? 比特币存在致命性 bug 吗?

    社会契约理论

    社会契约理论始于一个思维实验:先假设人们最初生活在一个充满暴力的令人无法忍受的 自然状态 下,在改善现状的需求驱使下,人们团结一起,同意赋予 Leviathan(“利维坦”)政府权力来保护他们。一旦赋予政府制定法律,执行法律和保护人民免遭暴力的权力,人民就得舍弃一部分自由(例如偷窃,谋杀等等)。

    但这一理论并不仅仅适用于人民与国家之间的关系。我们也可以将相同的思维实验应用于经济领域。如果大部分人不满足于物物交换的经济模式,他们可以集体约定使用货币,信贷或其他方式来提高交易质量。

    货币或信贷的产生是潜移默化的。每个人都会思考他们想获得什么样的结果以及如何实现该结果。 如果一个社会中大部分人想要的结果是相同的,我们可以将这个结果称为“谢林点”或社会契约。

    货币作为一种社会契约

    纵观历史,控制货币的政府以各种方式滥用权力:他们没收账户,禁止某些人或团体进行交易,还无节制地印制钞票导致通货膨胀,有时甚至是恶性通货膨胀。

    每当政府严重滥用权力时,人们就会对“赋予该政府权力”的社会契约失去信任,回归到只保留部分功能(拥有共同的交换媒介,价值储存和记账单位)而不赋予政府滥用权力的契约:商品货币(校注:商品货币是法定货币以外的另一种货币类型,在政府的保证之外货币本身也有其市场价值,如金、银等等)。

    然而,新商品货币契约的问题在于它同样不稳定。以黄金标准为例,由于实体黄金不方便分割、移动和储存,人们马上想到了用纸币代表黄金进行交易,这样就不需要搬动实体黄金了。但正是因为纸币容易生产,所以必须要有一个值得信赖的中心机构来监督纸币的供应。而到了这一步,政府只需将纸币的价值与其锚定的商品(即金子)价值分开,就能轻而易举地再次确立法定货币。

    这告诉了我们:当你正处于一个糟糕的境地或者你想改变时,你可以同意采用新的社会契约,但由此产生的社会契约也就如眼见一般强大。如果没有一个稳定的机构来执行它,契约还是会因为失去人们的信任而崩溃。

    比特币的规则

    中本聪创造比特币,不是创造了一种新的社会契约,而是做了一件别的事——他利用技术解决了过去在执行方面存在的许多问题,以一种更新颖有效的方式执行以前的契约,并制定了以下规则

    • 只有代币所有者才能通过签名使用代币(抗没收)
    • 任何人都可以在无需审核的情况下交易并存储比特币(抗审查)
    • 有且只有 2100 万个比特币,这些比特币会按预期进度发放(抗通货膨胀)
    • 所有用户都能够验证比特币规则(防伪造)

    比特币作为社会制度的新形式

    货币揭示了一个道理:社会制度越强健,价值越高,就越能激起人们的控制欲。因此,社会制度需要一个强大的实体——国家来保护。随着时间的推移,这种保护会演变成控制,甚至滥用。当社会制度不能再为其人民提供益处,就会被新制度所取代,如此循环。

    中本聪试图以两种方式打破这种恶性循环:第一,比特币是通过创造一个时刻处于竞争的市场来实现自我保护,而不是通过强大的中心实体(如政府)。它将其安全性转变为商品,将安全性的提供者(矿工)转变为没有权势的商品生产者。第二,中本聪找到了方法,使得相互竞争的安全性提供者在任何特定时间都能在谁拥有什么的问题上达成共识。

    比特币协议自动执行在社交层上达成的合约,而社交层则根据其用户的共识来确定比特币规则。比特币协议层与社交层是共生的,缺一不可。社交层及其规则是比特币的核心;而协议层则使社交层的规则得以强制执行。这是人类历史上的第一次,同时还使得其社协议更能取得外人的信任。

    将比特币看作是一个由技术层启用并自动化的社会契约,有很多好处。 可以帮助我们回答有关比特币的哲学问题。

    谁能改变比特币规则?

    合约规则在社交层上处于不断决定又重新协商的循环中。执行比特币协议仅仅自动执行规则。比特币能作为一个计算机网络的存在,正是因为许多人在计算机上遵循相同的规则来运行比特币协议(相当于大家都在使用相同的语言交流)。

    只要遵循与其他人相同的规则,你就会留在网络中。如果我在我的本地计算机上单方面改变比特币规则,不仅不会对网络造成任何影响,还会遭到驱逐,因为在网络中我无法与其他人相互识别(因为我现在说的是与别人不一样的语言)。

    改变比特币规则的唯一方法是提出改变社会契约的提案。此类提案都必须由网络中的其他人自发接受,因为只有当足够的人主动将其包含在本地规则中,才会成为规则。令数百万人信服是一项艰巨的(基层)工作,同时要排除任何有争议的无法获得广泛社会共识的提案。 这就是为什么比特币网络可以根据其用户喜好进行升级,同时又能适应不良行为者的变化。

    软件漏洞会摧毁比特币吗?

    2018 年 9 月,用户最多的比特币实现(即本地规则)中出现了一个软件漏洞。该漏洞有两个潜在的攻击途径:第一,允许攻击者关闭其他人的比特币客户端(使其无法验证规则,解除防伪功能);第二,允许攻击者双花同一比特币(打破抗通胀规则)。

    虽然比特币开发人员及时通过为网络更新规则快速修复了 bug,使得攻击者无法利用这些 bug 来攻击网络,但难免会有人产生疑问:一旦攻击者利用这些 bug 攻击网络,将会造成多大的损失?一旦攻击打破了比特币抵抗通胀的特性,用户是否会失去对比特币规则的信任?

    社会契约理论会大声地回答:“不”。比特币规则是基于社交层制定的,而软件只能使他自动化。社会契约和协议层之间分歧的地方,协议层总是错误的。协议层暂时未能执行合约规则对合约本身的有效性没有影响。

    比特币代币本身没有价值。比特币的价值只存在于社交层。

    因此,当协议层出现 bug,我们应该:通过重组区块链的方式撤销已造成的损失,以修复 bug 使其无法造成进一步损失。这样会将比特币网络划分成两个网络,两个网络都有各自的代币:一个有 bug,一个没有 bug。每一位比特币持有者在每个网络中将拥有相同数量的代币,但这些代币的价值将完全由市场决定,也就是取决于下一个买家愿意为这些代币支付多少钱。

    因此,要明白比特币代币本身没有价值这一点非常重要,它只不过是分类账中的一个数字。比特币真正的价值只存在于社交层,是社会共识决定了未来两个代币中哪一个将获得经济支持。很可能所有经济价值都会转移到新的修复好的网络中去。

    当比特币软件成功使社会契约的规则自动化时,两层是同步的。当软件暂时失去同步时,社会契约会总能作为指路明灯使其回归同步。做到毫无 bug 是不可能的。社会契约理论使我们确信, bug 会有,但不会威胁到比特币的社会制度。

    比特币分叉是否会危及抗通胀规则?

    另一个著名的哲学问题是有关“分叉”的概念。由于比特币软件是开源的(允许用户验证他们的规则与宣传的一致),任何人都可以复制它并进行修改,这被称为“分叉”。但是,如前所述,这些修改仅针对协议层,而不是社交层。不首先改变社交层的规则的话,比特币分叉的唯一结果就是你把自己从网络中驱逐了。

    如果你想分叉比特币,还想让产生的新网络不立即消亡,那首先必须对社会契约进行分叉。你要尽可能让更多的人相信你的规则更适合他们,并使用你的规则。其实分叉很难顺利进行,因为这需要数以千计人的认可。通过分叉创造价值就好比将总统竞选活动作为金融投资一样。

    再次强调,代币的所有价值纯粹是社会价值构建的。代币本身没有任何价值; 它们是在社会共识中获得价值。协议分叉不等于社会契约分叉,因此产生的新代币也会默认为毫无价值。在社会契约分叉的少数情况下(比如 bitcoin cash 从比特币分叉中产生),最终会得到两个较弱的社会契约,因为每个社会契约的支持者都要比分叉前少。

    一般的货币与我们所说的比特币都能视为社会中人们之间的社会契约。 比特币也不是什么新合约;比特币只是一个有着数百年历史的合约的新执行方式。与以前的种种尝试相比,比特币是一个显著的进步,因为它创造了一个充分竞争的市场来保障自己的安全。 比特币的社交层和协议层是相辅相成的,理解它们的关系能使一些模糊的概念变得更加清晰,比如改变规则,分叉,或协议 bug。


    链接: https://medium.com/s/story/bitcoins-social-contract-1f8b05ee24a9?sk=27e8cf65d45c46ffae1466ce2ac31b48

     

    展开全文
  • 不完全契约理论认为,由于当事人的有限理性和事后机会主义行为导致敲竹杠发生;...交易成本经济学从纵向一体化、产权理论从产权分配、关系契约理论从声誉博弈、完全契约理论从履约理论等角度提出了解决敲竹杠问题的方法。
  • 应用委托-代理理论推导出资本市场的最优激励契约,分析经纪人过度自信及交易次数对最优激励契约的影响,给出了在无法观测到经纪人过度自信程度的条件下,投资者实际提供的契约与最优激励契约间的变化关系.</p>
  • 基于交易成本经济学理论,将联盟的契约设计作为联盟的治理手段,提出了资产专用性、契约复杂度和联盟合作效应三者之间的概念模型,利用SPSS15.0软件和AMOS7.0软件对概念模型进行SCM实证分析并修正了概念模型,修正后的...
  • 员工创新是企业创新的基础。 每个知识工作者都应该是一个创新部门。 这提醒管理人员,他们需要从员工的角度检查组织和管理过程中自己的行为和方法。... 3)心理契约感知与员工创新行为之间存在显着的正相关关系
  • 选自链得得APP “有人的地方,就有江湖!...在茹毛饮血的原始社会,为了抵抗凶猛禽兽的攻击,人们以群居为生存方式,人与人的信任依赖于血亲关系,群居的契约仅仅是约定俗成的习俗,但这些往往无法抑制...

    选自链得得APP

    “有人的地方,就有江湖!”

    人类的发展史,也是契约精神、契约制度的发展史;所有的契约、法律都在解决人与人、人与自然之间的问题。区块链的诞生为这些关系提供和解方式,将让契约精神发挥到极致。

    我们先一起回顾契约构建的演进过程。

    在茹毛饮血的原始社会,为了抵抗凶猛禽兽的攻击,人们以群居为生存方式,人与人的信任依赖于血亲关系,群居的契约仅仅是约定俗成的习俗,但这些往往无法抑制人性的丑恶面。

    后来,商品经济逐渐发展,从简单的物物交换到更复杂的货币交换,西方古罗马内部出现《万民法》,雅典出现《汉谟拉比法典》,东方则是以专制主义中央集权的“传世典章、各种地方诉讼档案”,本质上是属于私法契约范畴,也叫做民事契约,更侧重于消费契约。

    随着中世纪商人阶层的诞生和发展,专业的商业交往独立化,商法从民法中独立出来,成为商业活动的基础和准绳,体现契约所蕴含的商业考虑、公司治理和经济逻辑;也是现代商业契约的初发展。

    近现代,受私法契约精神的熏染,公法契约得以萌芽,从统治契约过度到社会契约论,比如卢梭、霍布斯、洛克的理论。公法契约分支成宪法契约、行政契约、诉讼契约,企图在统治者和人民之间寻求平衡。这些契约也是现代法律的原型。

    这些所有的契约、法律都是在解决人与人、人与自然之间的问题。

    但实际上,私法、古代商法的制定由小部分精英阶层所制定,评判上受阶层、种族、宗族的影响极大,几乎没有公平性可言;而公法的制定一定程度上更加民主,但行为的审判上,依旧有很大的主观意志余地,有很大的灰色地带;做商业的、有打过官司的人都知道,司法程序复杂、进度极慢、效率低,时间成本和经济成本都很高。

    既然抓住了契约的本质:即在于调节个人与个人、企业与企业、个人企业的矛盾、冲突,平衡关系,那么今天我们是不是要重新思考,有没有一种能达到同样目的,而且更高效的方法呢?

    答案是:区块链。

    如果说,契约、法律从“行为前(后果的震摄性)”、“行为后(审判力度)”来规范人的行为,那区块链则是为人类提供信任的技术契约,从组织模式的重构角度,从行为过程的角度,来抑制人性的恶,用算法使人不得不“诚信”,为人与人的和解提供新的解决方案。

    区块链提供新的和解方案

    一是DAO(Distributed Autonomous Organization),分布式自治组织,是一种基于区块链的组织结构形式。某种程度上看,DAO就像一个全自动的机器人,当它所有程序设定成功后,它就能根据原有的规则开始运转。这些规则通常以开源软件的形式出现,谁都可以通过购买改组织的股份权益,或是以社区服务的形式成为该组织的参与者。

    看着觉得很难理解,其实就是在这个分布式自组织中,每个个体不受任何中心机构或个人所控制,共识成为唯一的价值观和链接纽带。在一个共同的目标下,参与者向这个目标贡献资源或劳动,根据一定的规则获得某个资产符号,通过互联网方式组织起来,可以广泛参与也可以自由进出。

    那么,在这个全自动的组织中,用什么来衡量每个参与者,每个节点参与或贡献的价值呢?

    每个分布式的自组织中,token(数字权益凭证)是价值衡量工具,来调动参与者的积极性。

    即:在既定的共识下,以token奖惩的方式对人的行为进行量化和约束,奖励正向行为,惩罚负面行为,调动参与者的积极性。在共识的基础上形成了更高效、低摩擦的新的经济体系。

    二是智能合约。智能合约其实就是用算法来建立信任,它允许在没有第三方的情况下进行可行交易,这些交易可追踪且不可逆转。

    在智能合约系统上,有三个原则确保这个技术契约的真实性、公平性:

    1.智能合约数据来源于链上。指的是,智能合约的输入是从区块链数据库里面出来的,具有真实性且不可篡改。

    2. 智能合约的执行在链上。指的是智能合约在多个节点上执行,依赖于算法,而不以人的意志为转移,这就排除掉传统契约、法律中受主观意志控制的余地,使得执行结果更加公平;同时,采用智能合约,执行速度很快,解决问题更加高效。

    3.智能合约输出在链上。这指的是智能合约的输出结果必须存在区块链上面,这样保证结果的真实与可追溯性,并且为其他相衔接的智能合约提供输入数据的准确性保障。

    举个例子:

    在类似某宝的电商链上,买家在链上挑选商品,点击“确认购买”,即生成一个合约,买家转账token(权益),这些权益暂时质押在合约上,然后等待卖家发货。等到买家收到货物后,在链上“确认收货”,合约上的token(权益)会自动交付给卖家。

    智能合约在某些实际应用场景,可以取代第三方的担保机构,在上面这个例子中,实际上智能合约就起到“支付宝”的功能。

    无论是DAO这种新的组织模式或经济体系,还是智能合约,都是在塑造一个更加诚信,更加干净纯洁的生活空间、商业环境。当下人与人的信任度非常低,商业环境中信任成本极高,当出现比传统契约更好的信任方式时,必然会被越来越多人所接受和运用。

    展开全文
  • 契约测试的必要性

    2017-12-03 11:44:00
    我们今天将要讨论的话题是契约测试,它是处于单元测试和集成测试中间的一个环节。这三个层级分别测试的场景如下: 单元测试:测试单个service 集成测试:测试由多个services组成的系统 端到端测试:测试从用户...

    测试金字塔模型

    测试是软件流程中非常重要,不可或缺的一个环节。一般的测试分为单元测试,集成测试,端到端的手工测试,这也是构成测试金字塔的三个层级。我们今天将要讨论的话题是契约测试,它是处于单元测试和集成测试中间的一个环节。这三个层级分别测试的场景如下:

    • 单元测试:测试单个service
    • 集成测试:测试由多个services组成的系统
    • 端到端测试:测试从用户到各个外部系统的整个场景

     

     

    什么是契约测试?

     契约测试最开始的概念由Martin Fowler 提出,请参见这篇文章, 它又被称之为:消费者驱动的契约测试(Consumer Driven Contracts)。这里的契约是指软件系统中各个服务间交互的数据标准格式,更多的指消费端(client)和提供端(server)之间交互的数据接口的格式。

    为什么要存在契约测试?

     系统工程中存在这样的理论:线性系统(即复杂性随规模线性增长的系统)的可靠性等于组成它的各个组件的可靠性之乘积。这容易理解,因为整个系统正常工作的条件是必须每个组件都同时正常工作。

     

    如上图所述,三个组件共同支撑的系统,如果每个组件的可靠性是90%,那么整个系统的可靠性就是 90%×90%×90%=72.9%,我们可以看到系统整体的可靠度是低于任一组件的可靠性的。如果一个系统由100个组件组成,每个组件即使能达到99%的可靠性,那么整个系统的可靠性也会降到36.6%左右。

      我们常说复杂性是软件工程的最重要的特性,一个完善的软件系统必然是靠很多的子系统,组件共同撑起来的。根据上面的理论,如果是一个复杂的软件系统那么每一个组件的可靠性都对系统整体的可靠性有着非常重要的影响,排除组件本身的可靠性的因素,各个组件之间的相互依赖和调用关系也将会对系统的稳定性有着决定性的影响。随着业务的复杂度越来越高,整个系统也变得越来越庞大和错综复杂,在今天的软件工程开发中微服务已经不是一个新名词,在微服务的架构下通常一个client会与多个service相互交互,可以想象一下如果某一个服务的接口发生变化将会影响整个系统的运行。如下图展示的传统的大服务与微服务的区别

    那么在微服务模式下如果保证各个服务端与消费端之间以及服务与服务之间能够可靠的交互呢?这就回到了到我们要聊的契约测试的话题。

    如下图,在服务端接口发生变化的情况下通过契约测试可以很容易的测试出契约不匹配,可以在集成测试之前就能发现问题,尽早解决。

     

     

     

    契约测试和单元测试,集成测试,端到端测试区别是什么?

    单元测试:

    • 通常是测试单个类,方法的可靠性
    • 它的价值在于快速的反馈某一个很小的功能点是否能准确的工作
    • 通过单元测试能够更明确的剖析你的实现逻辑
    • 如果用TDD的开发模式,能够做代码重构以及改善代码整洁度

    集成测试:

    • 关注的是各个服务之间交互
    • 测试接口连通性和流程的可用性

    端到端测试:

    • 从用户的角度验证整个功能的准确性和可用性
    • 测试的是端到端的流程,会加入用户数据验证功能是否可用
    • 不会关注在某一细小的功能点的实现
    • 关注的是整个业务流程,产生的业务价值大

    契约测试:

    • 测试接口和接口之间的正确性
    • 验证服务层提供的数据是否是消费端所需要的
    • 将本来需要在集成测试中体现的问题前移,更早的发现问题
    • 更快速的验证消费端和提供端之间交互的基本正确性

    契约测试解决能解决什么问题?

    1. 可以使得消费端和提供端之间测试解耦,不再需要客户端和服务端联调才能发现问题
    2. 完全由消费者驱动的方式,消费者需要什么数据,服务端就给什么样的数据,数据契约也是由消费者来定的
    3. 测试前移,越早的发现问题,保证后续测试的完整性
    4. 通过契约测试,团队能以一种离线的方式(不需要消费者、提供者同时在线),通过契约作为中间的标准,验证提供者提供的内容是否满足消费者的期望。

     

    一般契约测试是在单元测试之后,集成测试之前要进行的,首先在保证各自功能正确的前提下测试消费者和提供者的契约是否相匹配,然后再进一步的测试功能的完备性和整个业务流的正确性。

    写在最后

    本文主要浅显的介绍了契约测试是什么以及它的重要性,后续将会继续介绍契约测试的框架以及相关实践。

     

    转载于:https://www.cnblogs.com/Wolfmanlq/p/7965621.html

    展开全文
  • 在本文中,我将使用主要与应用伦理学和经济理论相关的方法,在社会契约传统内提供哲学证明,证明其公民的实质平等对民主的重要性。 社会契约是当代政治哲学中民主理论的一种熟悉形式。 关于社会契约的一种陌生但有...
  • 为管理矿工的不安全行为,降低煤矿安全事故的发生,基于社会交换理论,探讨心理契约违背对矿工不安全行为的影响,以及组织支持感在二者之间的调节作用。依据325份来自山西某地方煤矿一线员工的有效问卷,运用分层回归方法...
  • 由其是当服务之间依赖关系复杂时,结果更明显。 2. 运行结果不稳定 对于分布式的系统而言,当进行不同服务间的集成测试时,网络的延迟、带宽可能会影响到测试运行的结果。除此之外,所依赖服务的部署、升级、或者...

    JB Rainsberger 曾说过,“集成测试是一个陷阱,它像一个自我扩散的病毒,无情地威胁着代码库、项目和团队。”

    随着微服务系统复杂度的增加,集成测试所带来的弊端愈发明显。

    1. 运行效率低

    由于微服务本身是基于分布式的系统,因此进行集成测试时,每个服务会同运行在其它节点的服务交互,而这类交互通常都是跨网络的。因此,相比进程内的交互或者同一节点内的交互,运行效率低。由其是当服务之间依赖关系复杂时,结果更明显。

    2. 运行结果不稳定

    对于分布式的系统而言,当进行不同服务间的集成测试时,网络的延迟、带宽可能会影响到测试运行的结果。除此之外,所依赖服务的部署、升级、或者临时不可用,也会导致测试运行的结果不稳定。另一方面,随着依赖服务的不断迭代,接口的变化通常会导致测试结果的失败。

    3. 反馈周期慢

    从经典的测试金字塔理论来看,集成测试所关注的粒度比单元测试粗。通常,集成测试会将几个不同的服务组合起来进行验证。这也意味着,随着系统的复杂度逐渐增加,服务的数量越多,影响错误的因素也越多,反馈周期也就越长,开发人员需要花费更多的时间去定位错误的原因。

    服务间的交互是依赖于互相提供的接口来进行的,那么什么是接口?接口就是服务之间的通信方式和协议,也可以称为契约。契约的两端分别是消费者和提供者。使用契约的一方称为消费者,提供契约的一方为提供者。

    当契约发生改变后,那么所有契约的消费者都需要针对这个变化做出调整。

    在微服务架构下,这就意味着即便是简单的契约变化,也会使多个使用契约的消费者受到影响。如果测试不及时,可能导致很多服务在测试环境,甚至是生产环境中出现错误。

    契约测试是针对服务接口进行的测试,它能验证提供者提供的契约是否满足消费者的期望。在契约测试中,契约主要表现为三部分:

    请求:由消费者发出的HTTP数据,包括URL、请求的参数以及HTTP动词等。

    响应:主要指提供者应答的HTTP响应。

    交互元数据:交互过程中,描述交互状态的数据。譬如提供者的信息、消费者的信息、当前的上下文等。

    对于一个服务提供者而言,每个消费者都会根据与其交互的不同,生成不同的契约。当这个提供者被修改时,应该保证每个消费者依然能够正确地消费契约。

    契约测试能够提供一个机制去验证组件能否始终满足契约。当涉及的组件是微服务时,接口便是各个服务暴露出来的公共API。每个消费方服务的维护者只需要编写独立的测试套件来验证服务提供方中他所使用的那一部分就可以了。

    例如有V0版本的契约,契约提供者和契约消费者能够互相协作,完成业务价值的实现。但是,当提供者提供的接口发生变化,如从V0升级到V1,契约测试就能够立即验证出,提供者当前发布的接口与之前消费者期待的接口不匹配。如下图所示:


    通过契约测试,能帮助我们有效地降低微服务接口变化所带来的消费者端的风险。

    对于契约而言,消费者消费契约,提供者提供契约。也就是说,当提供者提供的契约能够被消费者消费后,其对应的价值才被实现。对于那些消费者无法消费的契约,并无法真正有效实现价值。即,消费者是价值流中离价值实现最近的。

    从消费者出发,以先定义满足消费者的契约作为第一步,就能优先保障价值的实现。如下:

    再验证提供者,使其提供的契约和消费者需要的契约一致,如下:


    通过如上两个步骤,能有效地保障消费者和提供者协同工作,这就是我们提到的消费者驱动的契约测试。

    消费者驱动的契约测试,通常实现方式如下:

    1. 选择合适的场景,定义消费者的请求和期望的响应。

    2. 使用Mock机制,为消费者提供模拟的提供者以及期望的响应。

    3. 记录消费者发送的请求、提供者提供的响应以及关于场景的其它元数据,并将其记录为当前场景的契约。

    4. 模拟消费者,向真正的提供者模拟发送请求。

    5. 验证提供者提供的契约是否和之前记录的契约一样。

    在微服务架构下,基于消费者驱动的契约测试,有两个非常明显的优势。

    ◎从价值实现的角度定义契约

    从消费者使用契约的角度出发,首先保证消费者基于此契约是可以实现价值的。有了这个前提,再使用契约来验证提供者,如果提供者提供的契约与定义的契约一致,则证明提供者提供的契约是能够服务消费者的。

    ◎隔离消费者和提供者的测试

    有了消费者驱动的契约测试,能够首先保证消费者基于契约是可以实现价值的,从而再通过契约验证提供者提供的契约是否符合要求。在这种情况下,我们可以看出,对于契约的消费者和提供者而言,二者可以分开测试。因此,基于消费者驱动的契约测试,能有效解决之前提到的传统集成测试在微服务架构下存在的弊端,将微服务的测试成本降到最低。

    Pack是一个基于消费者驱动的契约测试框架。它的使用主要包括两步:消费者端生成契约与提供者端完成校验。

    在消费者端生成契约的主要步骤如下:

    1. 消费者端使用Pact框架提供的DSL以及相关的配置文件,运行一个本地的模拟服务,模拟服务的提供者端。

    2. 消费者端发送HTTP请求。

    3. 提供者端返回响应,供消费者使用。

    4. 消费者端和提供者端完成一次交互。Pact框架将当前的请求和响应记录下来,并生成Pact文件,也叫契约。

    Pact文件的内容是json格式的,主要记录消费者以及提供者之间的交互过程,包括消费者的请求、参数以及提供者的响应等。

    有了消费者端生成的Pact文件,提供者端就可以通过Pact框架提供的DSL以及相关的配置文件,模拟消费者端发送请求,并验证提供者端返回的响应是否和Pact文件中描述的响应一致。

    提供者端完成契约校验的主要步骤:

    1. 提供者端使用Pact框架提供的DSL以及相关的配置文件,配置Pact。

    2. Pact框架将模拟消费者向提供者端发送请求。

    3. 提供者端返回响应。

    Pact框架验证提供者端提供的响应是否与Pact文件匹配。

       综上所述,Pact框架从消费者端出发,先帮助消费者端获取预期的响应,记录交互过程并生成契约,在通过反向验证提供者端。基于这种方式,每当提供者端提供的响应发生变化时,我们就能通过Pact框架以及相关的Pact测试立刻体现出来,帮助我们及早发现服务间接口不一致的问题。
    ————————————————
    版权声明:本文为CSDN博主「尚书左仆射」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wzxq123/article/details/80219772

    展开全文
  • 金融发展理论回顾

    万次阅读 2015-12-28 21:04:26
    金融发展理论是主要研究金融发展与经济增长之间内在关系理论。传统经济发展理论偏重资本、劳动、土地、技术和资源等因素的作用而忽视了金融对经济发展作用,而金融发展理论的出现则弥补了这一缺陷,并为客观认识...
  • 论文研究-风险投资中激励契约设计...将控制权转移激励、风险规避型职业经理人道德风险及项目收益风险融合到风险投资委托代理契约设计中具有较强的理论价值,同时对风险投资者和职业经理人来说都有一定的借鉴和参考意义.
  • 尝试寻找了一下,发现这其实是一个契约测试问题,在博客园上找到之前的一些文章,看完觉得对我理解契约测试有很大帮助,转过来记录一下。现在我已经有一些思路了,后续会专门写一篇文章来记录这部分的内容。测试...
  • OO第三单元博客作业——JML与契约式编程 OO第三单元的三次作业都是在课程组的JML规格下完成。完成作业的过程是契约式编程的过程:设计者完成规格设计,实现者按照规格具体实现。作业正确性的检查同样围绕规格进行:...
  • dbc_契约式设计

    2010-01-29 17:11:00
    网络转载 OCP作为OO的高层原则,主张使用“抽象(Abstraction)”和“多态... 如此,问题产生了:“我们如何去度量继承关系的质量?” Liskov于1987年提出了一个关于继承的原则“Inheritance should ensure that a...
  • 为实现供应链的整体运作绩效最大,本文以一个风险中性的供应商和多个损失厌恶的零售商组成的两阶段供应链为研究对象,基于前景理论对损失厌恶的界定,采用考虑零售商损失厌恶系数的供应链回购契约模型。论证得出,多个...
  • 万丈高楼平地起,但还有种说法叫:“万事开头难”,不管使用什么技术,就算是行业老司机,也得乖乖的从基本理论概述开始。通过本篇文章,您将理解什么是 Spring Cloud ?Spring Cloud 和 Spring Boot 之间的关系或者...
  • Design by Contract 契约式设计A Conversation with Bertrand Meyer, Part II Bertrand Meyer访谈之二by Bill Venners 采访

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,777
精华内容 2,310
关键字:

关系契约理论