腾讯 AICR : 智能化代码评审技术探索与应用实践(上)

本文将详细阐述 腾讯云 AI 代码助手团队和 CR 团队在智能化代码评审领域的技术探索与应用实践。文章分为上下两篇,此为上篇,下拉至底部可查看下篇文章内容。

全文阅读约 5-8 分钟。

引言

基于大模型技术为 AI 智能代码评审(AI Code Review,以下简称 AICR)带来了新的机遇与挑战,腾讯 AI 代码助手团队和 CR 团队基于腾讯集团开发人员与腾讯云广大开发人员/企业客户的 MR/CR 场景 (MR: Merge Request;CR:Code Review),结合大模型技术推出了智能代码评审解决方案,包括基于 diff 片段、file 文件、edior 编辑文件的 AI 辅助评审、code suggestion、生成 MR commit message ,此外在腾讯集团内部还在源代码管理平台实践了基于 AI 实现 MR 摘要生成、智能评审意见生成、代码问题 AI评审修复意见生成等功能,全面助力广大开发人员提升评审效率和代码质量。 

CR背景与挑战

代码评审 (Code Review, 以下简称 CR) 是确保代码质量的重要途径之一。在软件开发过程中,尤其在大型开发团队开发过程,业务需求/问题修复的发布上线涉及多个开发人员的协作以及一套完整的版本管理质量保障体系,避免出现协作、代码风格等不一致带来的交付延期和代码质量影响。

通常,开发人员利用版本控制系统(如 Git)来减轻协作过程中出现的错误率和确保代码质量一致性,因此产生了分支管理,以 Gitflow workflow 分支管理规范为例,如图1,可看出研发协作过程是非常复杂的,伴随每次的业务需求开发、问题修复每次都会创建一个分支,每次分支间的合并都会产生一次合并请求,合并请求简称为 MR (Merge Request),在研发过程中高频的 MR 请求也就涉及到高频的 CR 需求

图1 Gitflow workflow 分支管理规范

分支定义:分支可以被看作是项目历史的轻量级移动指针,也是开发人员编码内容的载体。当你创建一个分支时,Git 会创建一个新的指针指向当前分支的最新提交(commit)。之后,当你在这个新分支上进行提交时,这个分支的指针会向前移动,而其他分支的指针保持不变。

分支说明: master (main) 为主干维护分支,长期维护的稳定的分支,其他分支介绍及 Gitflow workflow 详见:

https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow

代码评审 (Code Review, CR) ,是软件开发过程中至关重要的一部分,是保障代码编码过程中最后一道质量保障,如图2 传统人工 CR 流程。长期以来,频繁的 CR 以及沟通协作,造成评审低效且难把控,开发与评审者面临系列挑战,具体表现为:

图2 传统人工 CR 流程

结合大模

I DisplayPowerController[0]: Brightness [0.090349324] reason changing to: 'automatic', previous reason: 'screen_off'. 行 1219043: 11-10 16:26:20.366 1000 1667 1746 I DisplayPowerController[0]: Brightness [-1.0] reason changing to: 'screen_off', previous reason: 'automatic'. 行 1219044: 11-10 16:26:20.366 1000 1667 1746 I DisplayPowerController[0]: BrightnessEvent: brt=-1.0 (0.0%), nits= 2.0, lux=-1.0, reason=screen_off, strat=ScreenOffBrightnessStrategy, state=OFF, stateReason=DEFAULT_POLICY, policy=OFF, flags=, initBrt=0.09054119, rcmdBrt=NaN, preBrt=NaN, preLux=0.0, wasShortTermModelActive=false, autoBrightness=true (default), unclampedBrt=-1.0, hbmMax=0.49975574, hbmMode=off, thrmMax=1.0, rbcStrength=50, powerFactor=1.0, physDisp=内置屏幕(local:4627039422300187648), logicalId=0, slowChange=false, rampSpeed=0.0 行 1219214: 11-10 16:26:20.421 1002 3345 4100 I BtGatt.ScanManager: msg.what = MSG_SCREEN_OFF, msg.arg1 = None 行 1219216: 11-10 16:26:20.421 1002 3345 4100 D BtGatt.ScanManager: Scan mode update during screen off from SCAN_MODE_AMBIENT_DISCOVERY to SCAN_MODE_SCREEN_OFF_BALANCED 行 1219219: 11-10 16:26:20.422 1002 3345 4100 D BtGatt.ScanManager: Scan mode update during screen off from SCAN_MODE_AMBIENT_DISCOVERY to SCAN_MODE_SCREEN_OFF_BALANCED 行 1219674: 11-10 16:26:20.607 1000 2337 2463 D MiuiBubbleController: onReceive broadcast info:[intent.getSender() = android, action = android.intent.action.SCREEN_OFF] 行 1219728: 11-10 16:26:20.631 1000 3668 3668 I msguard : screen receiver:android.intent.action.SCREEN_OFF 行 1219811: 11-10 16:26:20.661 10152 2753 2753 I Launcher: mBroadcastReceiver onReceive: Intent { act=android.intent.action.SCREEN_OFF flg=0x50200010 } 行 1219902: 11-10 16:26:20.686 1002 3345 3345 D BtGatt.GattService: onReceive: android.intent.action.SCREEN_OFF 行 1219931: 11-10 16:26:20.706 1000 5217 5472 I TrafficManageService: onReceive: android.intent.action.SCREEN_OFF 行 1219933: 11-10 16:26:20.707 1002 3345 3884 D BluetoothAdapterService: onReceivedBroadcast android.intent.action.SCREEN_OFF 行 1219964: 11-10 16:26:20.719 1000 5217 5593 I BaseChargeProtect_Night: receiver ACTION_SCREEN_OFF 行 1219968: 11-10 16:26:20.723 1000 20978 20978 I ScreenReceiver: onReceive() called with: context = com.xiaomi.continuity.LiteContinuityApplication@b359d92, intent = Intent { act=android.intent.action.SCREEN_OFF flg=0x50200010 } 行 1219973: 11-10 16:26:20.726 1002 9759 9759 D MiuiFastConnectService_Plugin: onReceive(): action = android.intent.action.SCREEN_OFF 行 1219975: 11-10 16:26:20.727 1000 1667 1667 D HyperNotificationManagerService: BroadcastReceiver ACTION_SCREEN_OFF 行 1219996: 11-10 16:26:20.748 1000 20978 20978 I SystemMonitor: onReceive action:android.intent.action.SCREEN_OFF 行 1220023: 11-10 16:26:20.756 1002 9759 9759 D BluetoothHeadsetService: headset receviver android.intent.action.SCREEN_OFF 行 1220037: 11-10 16:26:20.761 1000 5217 5217 I VideoToolBoxService: onReceive: android.intent.action.SCREEN_OFF 行 1220075: 11-10 16:26:20.777 1000 1667 1667 D MiuiFboService: received the broadcast and intent.action : android.intent.action.SCREEN_OFF,intent.getStringExtra:null 行 1220076: 11-10 16:26:20.777 1000 1667 1667 I MiuiFboService: execute ACTION_SCREEN_OFF 行 1220084: 11-10 16:26:20.778 1000 20978 21071 W lyra-disc: DiscoveryPowerPolicy::IsAllowDiscovery:224 not allow, medium_type=2, work_when_screen_off=0, is_screen_on=0 行 1220180: 11-10 16:26:20.806 1000 20978 21071 W lyra-disc: DiscoveryPowerPolicy::IsAllowDiscovery:224 not allow, medium_type=20000, work_when_screen_off=0, is_screen_on=0 行 1220201: 11-10 16:26:20.812 1000 5217 5217 I PowerSaveService: onReceive: android.intent.action.SCREEN_OFF 行 1220282: 11-10 16:26:20.840 1000 2337 2337 I MiuiChargeController: dismissChargeAnimation: dismiss_for_screen_off 行 1220285: 11-10 16:26:20.840 1000 2337 2337 I NfcPhoneCaseController: dismissNfcAnimation reason: screen_off, showing: false 行 1220335: 11-10 16:26:20.855 1002 9759 9759 D MiuiBluetoothNotification: get receiver android.intent.action.SCREEN_OFF 行 1220346: 11-10 16:26:20.858 1000 2337 2337 I VolumePanelViewController_true: dismissH mShowing:false, reason:screen_off, isAnimating: false, needShowDialog=true, KeyAnimatingStream=-1, disableVolumeDialog=false 行 1220368: 11-10 16:26:20.866 1000 1667 1720 I SmartPower: com.google.android.gms.unstable/10148(4872): idle->background(2200ms) R(broadcast start Intent { act=android.intent.action.SCREEN_OFF flg=0x50200010 }) adj=800. 行 1220410: 11-10 16:26:20.907 1000 1667 1720 I SmartPower: com.google.android.inputmethod.latin/10181(7739): idle->background(17881ms) R(broadcast start Intent { act=android.intent.action.SCREEN_OFF flg=0x50200010 }) adj=100. 行 1220413: 11-10 16:26:20.909 1000 1667 1720 I SmartPower: com.xiaomi.aicr:cognitionService/10145(6885): idle->background(22833ms) R(broadcast start Intent { act=android.intent.action.SCREEN_OFF flg=0x50200010 }) adj=200. 行 1220419: 11-10 16:26:20.915 10181 7739 10537 I DeviceStatusMonitor: DeviceStatusMonitor.handleBroadcast():123 onReceive() : Action = android.intent.action.SCREEN_OFF 行 1220440: 11-10 16:26:20.934 1000 1667 1720 I SmartPower: com.miui.analytics/10172(28332): idle->background(30232ms) R(broadcast start Intent { act=android.intent.action.SCREEN_OFF flg=0x50200010 }) adj=100. 行 1220466: 11-10 16:26:20.954 10148 2451 5197 W NearbyDiscovery: FastPairHandler: skip handleStateEvent: eventType=SCREEN_OFF [CONTEXT service_id=265 ]是什么意思
最新发布
11-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值