我偶然发现了一个有趣的问题:
让我们假设一个java应用程序创建了一个数据模型,将这些数据转换为带有两个字段的json对象,并将其上传到服务器:
{
"FirstName": "Foo",
"LastName": "Bar"
}现在,服务器上的js、php等不同的技术需要处理数据。
双方都通过一组单元测试进行了很好的测试,但自然地,跨不同语言和技术的集成很难深入测试。
是否有一种已知的原则或技术可以验证两端的数据?我的意思是,让我们说,有一份合同规定,LastName绝不能在任何情况下都小于2个字符的大小。这是一条业务规则,是对数据的严格限制。
现在,java实现有了一个bug,或者只是忽略了对LastName的需求。双方都完成了单元测试,但在集成过程中都失败了。
有什么技术允许跨语言指定这样的规则吗?我说的不是运行时拒绝格式错误的数据,而是确保应用程序双方的一致性。
发布于 2018-09-24 14:31:39
我在这里遇到的短语是single source of truth:
在信息系统设计和理论中,单一的真理源(SSOT)是构造信息模型和相关数据模式的实践,使每个数据元素被精确地存储一次。与此数据元素的任何可能的链接(可能在关系模式的其他领域,甚至在远程联邦数据库中)仅通过引用。因为数据的所有其他位置只是返回到主“真理源”位置,所以对主位置中的数据元素的更新会传播到整个系统,而不会在某个地方忘记重复的值。
如上文所述,可以生成软件:
在软件设计中,相同的模式、业务逻辑和其他组件经常在多个不同的上下文中重复,而每个版本都将自己称为“源代码”。为了解决这个问题,SSoT的概念也可以应用于软件开发主体,使用递归转换等过程迭代地将单个真实源转化为许多不同类型的源代码,因为它们都来自同一个SSoT,因此它们在结构上相互匹配。
具体来说,一些跨语言规范包括:
像Apache这样的项目将此规范化:
Apache允许您在一个简单的定义文件中定义数据类型和服务接口。以该文件为输入,编译器生成用于轻松构建RPC客户端和服务器的代码,这些客户端和服务器可以在编程语言之间无缝通信。不必编写大量样板代码来序列化和传输对象并调用远程方法,您可以直接进入业务。
发布于 2018-10-11 23:17:44
这里简洁地描述了根本问题,即缺乏集成测试。
双方都完成了单元测试,但在集成过程中都失败了。
构建Java应用程序的团队忘记了在LastName小于两个字符时包括验证和单元测试。
另一方面,构建PHP应用程序的团队记住了包括验证和单元测试。
幸运的是,QA团队了解LastName需求,并在集成测试套件中添加了名称Jin-u O。当他们使用该名称在Java应用程序中调用API操作时,期望出现400级验证错误时,他们得到了200,而测试失败了。
集成测试容易吗?绝对不是。但是,如果您有足够的时间和资源根据一组客观的标准测试您的应用程序,这是绝对值得的。
https://softwareengineering.stackexchange.com/questions/368235
复制相似问题