JAVA中什么是埋点,应用于什么场景?

个人征信小常识


一个非常好的问题。我是工作多年的Web应用架构师,来回答一下这个问题。欢迎关注我,了解更多IT专业知识。


一,埋点是什么?

埋点是软件开发中的一个术语,用于采集数据或者验证代码执行过程,不只是Java才有,各种开发语言中都有成熟的SDK开发包和框架使用。

埋点的场景有多种,可以在程序执行时,还有在单元测试时。可以在服务器,也可以在客户端。可以收集程序运行数据,也可以收集用户数据。


二,单元测试时的埋点

重点补充单元测试时用到的埋点技术。

单元测试的目的是测试被测函数。但是被测函数往往不是那么“简单”,首先有入参,其次要依赖使用其它的变量、函数、数据、还有第三方接口,等等。

被测试函数的代码执行路径也会有多个,比如if-else,异常处理。

如何模拟不同的场景,控制被测函数的运行依赖环境,验证运行过程和返回结果是否符合预期?以Java开发为例,使用JUnit + Mockit,一个典型的单元测试组成如下:

1. mock模拟依赖的数据、变量、函数、第三方接口,等等

2. stub打桩埋点,设置期望的执行过程、入参、出参等信息。

3. verify验证代码执行过程,比如埋点的函数被调用了1次,入参是abc。

4. doThrow设置异常抛出,验证异常发生时的处理逻辑是否符合预期。


三,单元测试的埋点示例

举个例子,被测试函数parseMsg(),读取ActiveMQ消息内容,转换成JSONObject

1,模拟入参TestMessage

2,在getText()函数处打桩埋点,设置返回值

3,调用被测试函数,验证getText()函数被调用了一次

4,验证异常发生时,处理逻辑是否正确


急速马力快de源码客


一,什么是埋点

首先埋点并不是java中才有埋点,那什么是埋点呢?埋点通俗的讲就是通过记录用请求以及结果、时间等数据来实现快速、便捷、准确分析统计。

二,埋点的场景

埋点场景可以分为2大类:

1、客户端埋点,一般指的是移动端或者web客户端、桌面端,常用于用户行为的分析和监控。通常我们会考虑,流量、产品、用户这几大指标,用于产品决策。

2、服务端埋点,在很多情况下我们的java系统都是纯底层应用,这种情况最典型的就是通过对接口的埋点来进行请求、结果、异常、耗时等全链路的监控分析,特别是微服务架构的应用,当然这种情况一般都不需要业务开发人员来进行埋点,通常都是公司框架内置了埋点。当然,在业务上服务端也可以对业务行为进行埋点,这样我们就可以行程自身的业务大盘。

三,埋点方式

1、客户端埋点,收集用户行为的场景,这种情况我们一般推荐第三方的统计工具,比如growingio、talking data等等。

2、服务端埋点,可以有以下几种方式:

2.1、硬编码的方式,就是直接人肉方式在接口内部打日志,这种但是极不推荐,可维护性、通用性太差;

2.2、通过aop+注解的方式,打成通用二方包,这种方式我觉得还是比较优雅的,你需要对哪些接口进行埋点,需要输出哪些内容都可以通过注解来指定;

2.3、字节码插桩方式,这种方式简单的说就是在class文件中插入一段新的代码,行程一份新的class从而实现无侵入埋点;



懂点代码的大叔


所谓“埋点”,是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。

埋点的技术实质,是先监听软件应用运行过程中的事件,当需要关注的事件发生时进行判断和捕获,然后获取必要的上下文信息,最后将信息整理后发送至服务器端。所监听的事件,通常由操作系统、浏览器、APP框架等平台提供,也可以在基础事件之上进行触发条件的自定义(如点击某一个特定按钮)。一般情况下,埋点可以通过监测分析工具提供的SDK来进行编程实现。

埋点的业务意义显而易见,即帮助定义和获取分析人员真正需要的业务数据及其附带信息。在不同场景下,业务人员关注的信息和角度可能不同。典型的应用场景有面向数字营销领域的分析,以及面向产品运营领域的分析。前者注重来源渠道和广告效果,后者更在意产品本身流程和体验的优化。两者各有侧重,也可以有一些交叉。所以,对于不同的项目和分析目的,应当设计不同的埋点方案。

近年来,埋点的方法论上也出现了一些业界新趋势,如“无埋点”技术。所谓“无埋点”,是指不再使用笨拙的采集代码编程来定义行为采集的触发条件和后续行为,而是通过后端配置或前端可视化圈选等方式来完成关键事件的定义和捕获,可以大幅提升埋点工作的效率和易用性。在“无埋点”的场景下,数据监测工具一般倾向于在监测时捕获和发送尽可能多的事件和信息,而在数据处理后端进行触发条件匹配和统计计算等工作,以较好地支持关注点变更和历史数据回溯。当然,即便是“无埋点”技术,也仍然需要部署数据采集基础SDK(又称基础代码)。


斗战胜佛


Java的埋点是为了测试编写的程序在某一输出处是否与预期相符合而插入程序中的编码。埋点的作用是验证程序的输出,所以应用场景有:1、程序员编程过程中内测自己的程序,很多测试驱动开发开发流程中程序员都这样做。2、白盒测试中,测试工程师会在程序中插入埋点,去验证程序是否达到预期。3、有时候程序发生了问题,开发人员找不到原因,这时候就会在程序中插入很多埋点,去找到分析出错的地方和原因。


分享到:


相關文章: