数字漫谈㊲ 数字经济与程序分析

2025-09-06

图片

对话人物


图片

本期人物:谭添

南京大学计算机学院准聘助理教授,主要从事程序设计语言与程序分析领域研究。


期主持人:巩璞玥

江苏省数字经济学会科普工作委员会秘书长、清华大学万科公共卫生与健康学院博士后、利物浦大学博士,主要从事医疗和康养环境、智慧建筑控制系统领域研究。



Q1:巩璞玥


程序分析常被称为计算机的“体检医生”,但我们普通用户几乎感知不到它的存在。请您结合一些日常生活场景,用通俗的语言科普一下这种“体检”具体是如何进行的。


A1:谭添


(一)“体检”的目的

在日常生活中,我们使用的各类程序,如手机端的微信、电脑端的腾讯会议等软件,是由开发人员编写后投入使用。对于开发软件的企业而言,确保软件质量是提升用户使用体验的关键所在,而程序“体检”则是保障软件质量不可或缺的重要环节

图片


程序分析:捕捉软件中的bug

(二)“体检”的重点

程序员完成代码编写后,并不会立马将软件交付给用户使用,而是先要进行程序分析、测试等一系列流程。程序分析有两个主要重点:

一是检测软件缺陷。大家使用软件时,可能会遇到突然崩溃、闪退,或者占用大量资源、内存等情况,这些都是软件本身编写存在缺陷。“体检”的第一个重点就是找出这些缺陷,让开发人员在开发过程中修复,给用户更好的体验

二是防范安全漏洞。开发者在编写代码时,可能会不小心造成软件漏洞。如果不法分子发现这些漏洞,就可能攻击软件,导致用户信息泄露,比如偷走手机里的密码、个人信息等,甚至还可能通过漏洞控制手机或电脑做坏事。所以“体检”的第二个重点是检测软件中的潜在安全漏洞。

图片


程序分析的广泛应用

程序分析技术诞生于上世纪60年代左右,最初是用来优化软件代码,让代码运行得更快。近20年,产业界和学术界意识到,程序分析不仅能优化软件,对保证软件质量也能发挥重要作用。所以近年来,研究和应用重点转移到了软件质量方面,我们利用程序分析给程序做“体检”,发现潜在问题。


Q2:巩璞玥


我们了解到,您与团队全自研了“太阿”程序分析平台,其架构设计及分析能力在绝大部分指标(如分析速度、精度、完备性等)上均优于国际知名分析平台,已形成广泛影响。请您跟我们介绍一下该平台相较于传统分析平台的技术优势。


A2:谭添


——太阿在总效率和应用表现上,都明显优于传统分析平台。

在研发“太阿”之前,我们团队长期使用国外知名分析平台,过程中发现了一些突出问题,特别是在实际应用场景中存在诸多不便。这好比一辆车,虽然它能正常行驶,但仪表盘布局、挡把操作等设计不合理,用户开起来既费劲又难上手。基于此,我们果断摒弃传统平台框架,重新设计并搭建了“太阿”平台。它具备以下显著优势:

1.整体架构可靠性与可扩展性更强

依旧以车为例,一款车上市后,后续可能需要对座椅、仪表盘、发动机等组件进行升级。如果车的架构设计科学合理,那么升级或替换这些组件就会相对容易。“太阿”框架亦是如此,相较于传统平台,它在扩展性和配置性上更加灵活,能够轻松实现组件的升级与替换

2.内部核心组件设计更优

我们不仅搭建了框架,还要填充一些内部核心组件。

(1)前端组件解析高效且稳定:程序分析的首要步骤是解析程序内的信息,“太阿”框架内负责此项任务的组件被称为“前端”。与传统平台相比,它的解析速度提升了十倍以上,且可靠性更高,有效避免了传统平台在分析程序时容易出现崩溃的情况。

(2)其他核心组件创新与可扩展性兼具:其他核心组件同样表现出色。以指针分析为例(可将其类比为车里的发动机或引擎),我们对其算法和数据结构进行了全面革新,并通过大量实验筛选出了效果最优的方案。同时,该组件采用了可扩展的设计形式,后续能够根据需求往里面添加更多功能

图片


太阿的核心组成

上述提到太阿的这些技术已发表了多篇本领域的国际顶级会议(PLDI、OOPSLA、ISSTA等CCF-A类会议)论文,得到了领域专家的认可,也体现了我们技术的创新性与优势。

自“太阿”发布两三年里,其影响力持续攀升。据我了解,目前已有超20家企业将其应用于实际业务场景,国内外30多所高校的学者借助它推进科研工作,200多所高校的学生使用它开展学习与实践

图片


太阿关键组件与工作流程


Q3:巩璞玥


您与团队在指针分析方面有着一系列代表性成果,比如首次提出“以指针分析为核心的安卓静态分析框架”等等。请您跟我们分享一下,这些创新方法主要应用于哪些领域呢?


A3:谭添


——目前,指针分析创新方法最主要的应用领域是安全领域,重点聚焦于安全漏洞检测。

指针分析本身属于基础性分析技术,其分析结果无法直接为用户或开发者带来直观效应。因此,我们团队在其基础上搭建了具体应用,以证明该基础技术的价值。我们主要在安全领域发力,比如,基于安卓分析框架以及面向数据库应用的端到端分析技术,搭建了安全分析应用,并检测出了多个安全漏洞,其中包括多个0-day漏洞(零日漏洞)。零日漏洞指的已被外界发现,但开发者自身却尚未知晓或尚未发布补丁的安全缺陷。发现漏洞后,我们会与开发者沟通,经他们确认,这些确实是真实存在且急需修复的安全问题。

除了我们团队自身,工业界也在利用我们的平台开展安全检测。以美团公司安全部门为例,他们每天大量使用我们研发的安卓静态分析框架,并根据自身业务特点和针对性安全问题,开发了一系列扫描插件,投入到企业日常安全扫描工作中。据他们反馈,该框架平均每天能帮助发现超过100个安全风险。

此外,据我所知,在学术界,来自复旦大学和华中科技大学等研究团队也基于指针分析技术研发具体的安全分析技术,相关成果在今年多篇信息安全领域的顶级会议论文中发表。

综上所述,无论是我们团队自身实践,还是工业界和学术界的应用,都表明指针分析技术及其平台目前最主要的应用领域是安全检测。

图片


什么是指针分析?

指针分析本质上是一种基础分析技术,在此基础上能够支撑起众多应用。

代码中存在大量变量,在一些编程语言里,变量本身代表的是内存中的一个地址,也就是对应到它指向某个对象。指针分析要做的,就是研究这些变量到底指向哪些值,或者说它们指向内存中的哪些地址或对象,将变量与它所指向的值或对象的对应关系梳理清楚。

这项技术最初源于C语言,因为C语言具备指针这一特性。后来,指针分析技术被应用到其他语言中。以Java为例,虽然Java没有显式的指针概念,但它把指针所涉及的地址进行了包装,底层原理本质上和指针是一样的,都是关于地址的操作。所以,即便在Java或其他语言中,指针分析同样是在寻找变量和它的内存地址或值之间的对应关系。

当我们获取了这种指向关系,也就是明确了变量指向谁之后,就能对程序有更深入的了解。基于这种指向关系,我们可以开展很多工作,比如进行安全检测、缺陷检测,还能收集相关数据生成图表或信息,帮助开发者更好地理解程序。



职业探索



Q4:巩璞玥


随着AI大模型的普及,您认为,程序分析是否会与生成式AI结合(如自动检测或修复AI生成的代码漏洞)?两者的结合是否也会存在一些弊端呢?


A4:谭添


——我认为程序分析必然会与生成式 AI 相结合。

从原理层面来看,开发者手写的代码和AI生成的代码,本质上使用的是同一种编程语言。这就好比用汉语写文章,无论是人撰写的,还是AI生成的,其底层表达形式是一致的。所以,从编程的角度而言,现有的程序分析框架和技术完全能够无缝分析AI生成的代码,在可行性上不存在任何问题。

另一方面,AI生成代码存在一个关键问题,即其不可控性。由于不是由人类开发者逐行编写,AI生成的代码在正确性和安全性方面难以保证。而当我们需要使用这些代码时,就必须确保其准确无误且不存在安全隐患。因此,程序分析技术就显得尤为重要,它能够帮助我们对AI生成的代码进行质量保障,检测并修复其中可能存在的漏洞。

——我认为,这种结合本身并没有弊端,真正的问题主要源自生成式AI自身的不确定性,需要冷静地看待与使用。

仅仅就就软件开发领域而言,我认为,现阶段生成式AI的能力尚处于发展阶段,距离大面积取代专业程序员还有很大差距。但有部分为博眼球、追热点的不负责任的炒作,让这一方向热度飙升,吸引了过多资源涌入。

从资源合理配置的角度审视,若该研究方向本身并不具备承载如此大规模投入的价值,那这种资源分配方式无疑是不合理的,甚至可能造成资源浪费。因此,我们应当以理性、客观的态度看待生成式AI技术,依据其实际能力和发展需求,合理运用并分配资源。


Q5:巩璞玥


您曾在科普课堂“开甲成长课堂”上强调“编程是艺术”。如今,低代码/无代码平台的普及让非专业开发者也能快速构建应用。从教育实践的角度出发,您如何看待技术深度与创造力的平衡?对于培养兼具“技术硬实力”与“创新软实力”的数字人才,您有哪些建议?


A5:谭添


——非专业开发者与专业开发者在编程能力上存在显著差距。即便借助工具能在一定程度上弥补这种差距,但我们仍需客观、冷静地看待这门技术。

于我而言,编程的每一步探索都能带来别样的惊喜与乐趣,我由衷地鼓励更多人去接触并学习编程。

不过,对于非专业开发者而言,还是希望大家不要小觑它的难度、盲目跟风又轻言放弃。编程远没有大家描述得那般轻松,在遇到困难时,咬咬牙,克服一下眼前的困难,顺利完成简单的入门,就会发现自己也拥有创造的能力,做出很多有趣且实用的东西。

图片


谭添教授在开甲成长课堂上做科普

——在我看来,技术深度与创造力并非相互孤立,而是相互促进的关系,在人才培养过程中要加重实践环节的比重。

1.培养扎实的技术能力,这是基础和根本。

倘若一个人对编程或计算机系统有深刻的理解和强大的掌控力,就能更好地激发创造力,更顺利地将创意转化为实际成果。培养扎实技术能力的关键在于大量的、具有一定难度的实践,我们必须为人才提供充分的机会,并督促他们主动参与到实践中去。简单来说,就是让他们多尝试编写不同类型、具备一定规模和难度的程序。

以我们自己的课程为例,我们会尽可能加强实践环节,布置较多的编程实验作业。然而,据我了解,目前国内高校在计算机教育领域的实践环节仍有很大的提升空间,许多学生的编程实践能力有待提高。

2.在具备一定技术能力的基础上,引导人才开阔眼界。

人才培养不能仅局限于技术本身,而要多引导他们接触和了解现实世界,思考如何将技术与现实需求相结合,让技术更好地服务于生活和社会

图片


谭添教授在开甲成长课堂上做科普


分享