在软件开发行业中,卓越的代码一直是每个有理想的软件从业者所探求的目标,它不仅是生产力的体现,更是创造性的迸发;也不仅仅是对规范标准的满足,更是对优雅简洁的追求。因此,本专场将聚焦于代码卓越方面的相关话题,包括如何有效管理代码质量、如何重构大规模遗留代码、如何构建分层防护网、如何利用AI技术辅助编码等方面的话题,并将邀请业内一线代码专家,分享关于代码级最新的技术和方法,并探讨如何在实际的业务场景中应用落地。

专场:卓越代码与工程 
专场出品人:张晔 
腾讯 PCG工程效能教练团队负责人
腾讯PCG工程效能教练团队负责人、资深DevOps顾问、敏捷开发专家。具备8年企业级教练和技术咨询经验。具备丰富的跨领域的研发模式变革和工程效能辅导经验,曾主导多个平台及业务通过DevOps成熟度认证。聚焦于组织级DevOps提升、敏捷转型、领域建模、极限编程、质量内建等方向的实践探索和规模化提升。多次在EE、QECon、GIAC等国内知名大会担任出品人及分享研发效能相关话题。
背景: 微服务架构之下,系统数量急速膨胀;伴随着公司业务高速迭代和悠久的历史,系统内充斥着越来越多的无用代码。
痛点:系统体量不断增大,对于开发、测试、发布、运维各阶段成本不断增加,系统瘦身的诉求越来越迫切。
1. 系统瘦身背景
- 全司应用数 3000+、代码行数 5000w+
- RD 人数约 500,人均 6 个应用,10w 行代码
- 一年内无变更应用,20%
问题:迭代近十年的服务,伴随着公司业务高速迭代,系统内充斥着越来越多的无用代码。系统体量不断增大,对于开发、测试、发布、运维各阶段成本上升,系统瘦身的诉求越来越迫切
目标:精简 50% 现有代码
2. 瘦身方案设计
将系统瘦身分为两部分:服务精简、代码精简
对于服务精简,在网关处捞取最近一段时间各服务的请求流量,对于无请求的服务可直接精简掉,对于流量很小的服务,考虑合并到其他服务或者进行下线;
对于代码精简,有三种方案:
- 基于 agent 进行代码插桩
- 基于 jacoco 实现
- 基于 Serviceability Agent (简称 SA)方案
最终选择 SA 方案,最大优势是对线上服务无任何性能影响,风险基本为 0
3. 代码精简实战
每日跑数逻辑:
- 随机抽取一个服务实例,进行下线
- 定期在机器上使用 SA 探测 JVM 中的方法执行次数,并上报 ACED 服务端
- 对实例进行服务上线
- ACED 服务端对存在调用次数的方法数据进行落库
- 对多次跑出的结果进行聚合,取并集,作为最终的被调用方法集
可精简方法分析:
- 静态代码分析,获得方法全集
- 除去跑输获得的被调用方法集,即为可精简方法集
精简逻辑:
- 全自动精简:自动在 git 中创建代码精简分支,直接删除可精简方法相关签名和实现。
  - 这里有个细节,删除后可能无法编译。可增加选项,支持将方法置空,保留方法签名,这样能保证代码库可编译
  这种方式,开发者对可精简代码的把控力度弱,因此提供了另一种半自动精简方式
- 半自动精简:将代码精简相关能力加入 idea 插件中,能实时拉取可精简列表集,开发者自行选择删除哪些方法,一键批量删除
4. 最终效果
- 开发估时平均降低约 10.9%,节省成本:8785 PD/年
- 发布效率提升约 9.5%,节省成本:641PD/年
- 酒店 hspa 接口:25%;报价详情页接口:34%
5. 总结与展望
后续可深入的方向:
- 很长周期才会被执行到的代码
- 代码行粒度的精简
- 对于配置的精简
内容大纲
马阳阳
去哪儿旅行 资深开发工程师
去哪儿网基础架构组资深开发工程师,公司云原生 SIG 成员。目前主要负责公司统一测试环境治理平台 Noah、代码瘦身平台 ACED。21 年优化 Noah,使环境构建成功率提升 35%、构建时长降低 30%。22 年去哪儿网金项奖评选中深度参与的“技术中心线上服务瘦身50%”项目获得技术型一等奖,在代码精简方面积累了大量经验,指导多个业务线团队完成代码精简。毕业后,曾就职于 BES,从事 PaaS 云、DevOps 平台开发工作。

擅长领域:DevOps、云原生
待定
待定
千万量级线上代码清理实践
1. 掌握多种代码精简技术,及各自适用场景和优缺点
2. 获得一种可落地的系统瘦身手段,提升团队效能
听众收益
基于代码动态、静态插桩技术实现移动端应用进程生命周期内进程内存观察能力,在保证原有程序逻辑完整性的基础上,通过代码植入采集、分析程序运行时信息,将预置代码套件按需注入到应用进程内,实现 UI 操作点击、代码自动生成、内存对象序列化/反序列化等能力,结合测试平台实现用例管理、CI\CD 流程,极大降低代码测试门槛以及执行时间成本。
沈柯
哔哩哔哩 资深开发工程师
哔哩哔哩质量保障中心资深开发工程师,目前负责社区&基础架构业务质量保障、质量提效、团队技术架构、测试技术创新等工作,参与团队质量保障体系优化,推进业务灰度、质量分级、移动端稳定性建设等,十余年移动端相关测试经验,有丰富的移动端自动化测试、专项测试、持续集成、稳定性治理经验,毕业后曾就职于搜狗、阿里巴巴,参与著作《阿里测试之道》。
待定
待定
移动端代码质量观测实践
经历过多年的业务、技术迭代,行业内 TOP 的移动端应用代码量跟业务架构复杂度达到了新的高度,并且移动端应用属于重 UI 的产品,使得 UI 渲染代码跟业务逻辑代码高度耦合,测试同学版本迭代过程中会经常遇到代码可测性的难题,比如基础 SDK 、组件层面的代码改动,测试同学只能从黑盒功能层面进行验证,SDK 内部改动逻辑往往无法被充分测试。代码测试作为软件工程中常用的技术手段,在移动端的研发体系内一直没有大范围的使用起来,比如系统原生的工具 iOS XCTest、AndroidX Test 框架,使用单测框架编写、运行需要有较强开发背景,对于大部分测试同学而言使用门槛过高。在这个大背景下,移动端的代码测试一直被视作正确但困难的事情,代码测试跟研发流程结合起来困难重重。
1. 通过动态、静态 hook 技术提升质量保障范围
2. 结合业务特定定向设计代码测试套件,实现代码接口层级的质量保障
3. 基于代码层面测试,挖掘更多测试保障场景
内容大纲
听众收益
1. 背景
2. 覆盖率百分百落地实践
    2.1 用户不配置方案实践;
    2.2 使用零感知方案实践;
3. 覆盖率指标提升实践
    3.1 增量行覆盖率计算;
    3.2 方法数据追加能力支持;
    3.3 本地化覆盖率追加;
4. 覆盖率降本增效实践
    4.1 资源成本缩减10倍方案实践;
    4.2 服务效率提升10倍方案实践;
5. 总结与展望
鲁国宁
去哪儿旅行 测试开发专家
技术负责人角色开发的项目:全链路压测平台;精准测试;流量调权;代码覆盖率;
核心开发角色开发的项目:接口自动化测试;mock平台;

擅长领域:测试工具建设,测试流程治理
待定
待定
去哪儿网代码覆盖率落地实践
去哪儿在业务开发中有快速迭代的特性,高效率的同时出现漏测的比例居高不下的问题,在这种情况下;代码覆盖率作为质量检测的关键指标越发重要。然而落地覆盖率过程出现两大难题,一、使用开源的jacoco落地业务线时,偶尔会遇到启动失败和业务异常,难以全面推广;二、落地的覆盖率团队,出现测试覆盖度低的问题;19年之前的覆盖率一直处在不可用状态,发布故障中漏测占比达到了50%。
大家可以通过参加本次分享,了解详细的实践经验和技巧,助力团队提高研发效率和质量
1. 如何修改jacoco与jdk的源码,优雅地解决jacoco隐疾,实现全量落地用户无感知的效果
2. 可以了解如何变更行统计、方法覆盖率追加和多数据源收集能力的实现方案,达到提升覆盖率拦截指标的目的
3. 如何定位与解决平台存储高、计算慢的问题,降低平台使用成本
内容大纲
听众收益
钟敬
ThoughtWorks  总监级咨询师
2017.10 至今  ThoughtWorks 总监级咨询师
 - 招商银行工程效能提升咨询
 - 招商金科领域驱动设计与演进式架构咨询
 - 安信证券架构治理咨询
 - 明源云科技DDD与DevOps咨询
 - 人保寿险架构治理咨询
2007.5 ~2017.10 友邦资讯科技 高级架构师
2003.4~2007.5 中意人寿 信息技术部副经理
2001.5~2003.4 中青旅尚洋电子 项目经理
1997.7~2001.5   中国人寿 软件工程师      
 
擅长领域:软件开发方法学、领域驱动设计、软件架构设计、企业架构、敏捷工程实践、企业研发效能提升
待定
待定
利用DDD(领域驱动设计)改造遗留系统实践
在遗留系统中,往往存在一些普遍性的代码质量问题,如:代码重复、逻辑不一致、难以理解、难以测试、难以适应变化等等。
这些问题的主要原因之一在于,代码并没有反映业务的本质,而是仅凭直觉随意堆砌,从而使代码日益腐化。
领域驱动设计(DDD)强调通过业务人员和开发人员的协作,深刻理解业务本质,并在此基础上建立领域模型,然后围绕领域模型编写代码和设计数据库,从而保证代码实现能够反映业务本质,最终提高代码的整洁性和可维护性。因此,DDD 是改造遗留系统,提高代码质量的一种有效的方法学。
在运用DDD对遗留系统进行重构的过程中会遇到两方面的问题:
1. 技术性问题:怎样理解业务,怎样建立领域模型,怎样选择合适的代码架构,怎样基于领域模型编写代码和设计数据
库,等等
2. 管理性问题:怎样安排时间和人力,怎样兼顾系统的技术改进和完成新业务需求,等等
这次分享,将通过一个来自大型金融企业的真实案例,介绍怎样运用 DDD 改造复杂的遗留系统,达到提高代码质量的目标,并解决上述技术和管理两方面的问题。
1. 背景概述
1.1 系统功能概述
1.2 主要痛点(代码重复、混乱;牵一发动全身;测试工作量大;交付周期长等)
1.3 过程概述(运用的方法、投入时间和人力)
1.4 主要成效(提高交付效率-新流程的交付由2周缩短到3天;代码质量的提升;人员能力的提升)
2. 解决方案(技术层面)
2.1 方法学(DDD)简介
2.2 业务规则梳理
2.3 领域模型的建立
2.4 数据库设计
2.5 代码分层架构
2.6 代码设计和编写
3. 解决方案(管理层面)
3.1 实施流程
3.2 试点项目的选择
3.3 精益切片的选择
3.4 成效评估方法的确定
3.5 时间和人力安排(怎样兼顾技术改进和新业务需求)
3.6 人员能力的提升(需要哪些配套技能)
4. 运用DDD改进遗留系统的成功要素
4.1 价值明确
4.2 领导支持
4.3 团队积极
4.4 业务配合
4.5 安排合理
听众可以通过一个具体的案例实践(而不是空洞的理论),获得以下收益
1. 了解DDD的基本原理以及在改造遗留系统中的价值
2. 了解运用DDD提升代码质量的基本过程、技术和产出物,尤其是领域建模技能
3. 了解成功运用DDD改造遗留系统过程中,在管理方面的挑战和解决办法
内容大纲
听众收益
.....
......
......

待定
待定
敬请期待
......
......
......
内容大纲
听众收益
关注QECon公众号
关注QECon视频号
议题投稿
Speaker@qecon.net    
票务联系
18611377287  马静  
媒体合作
13516196409  皮皮
商务合作
15122643988  木子