(一)鉴定前的源代码预处理
源代码预处理的目的是为了统一源代码的书写格式,以便在进行代码时,使被比对双方的源代码统计基准保持一致。预处理主要包括以下五个方面。
1.去除第三方的源代码
这里所指第三方的源代码是指非比对双方原创的代码。这些代码可能来自公开的开源软件、教科书,与硬件搭配的其他企业实例源代码等。这些代码一般可以通过代码文件的版权信息、开发者信息等注释内容加以区分。在进行源代码同一性鉴定前,应把这些代码文件或代码片段与比对双方原创的代码区别开来,在比对过程中不参与比对,或者参与比对了,应当在比对结果统计和鉴定意见中指明。
2.确定文件对应关系
确定源代码文件的对应关系是进行源代码比对的前提。任何软件的源代码都是以文件的形式存在,以文件夹的形式进行组织的。通过代码文件的名称、代码的逻辑功能确定被比对双方源代码的对应关系,进而开展源代码比对,这是进行科学而有效的源代码比对的基础。随着软件完成功能的不断完善,软件源代码规模不断增大,确定对应关系成为源代码比对中基础而又费时费力的一个重要环节。
3.规范空行和注释行的处理
严格来说,空行和注释行不是源代码的组成部分。在源代码编译成目标代码时,不计人目标代码中。因此,依据对等原则对被比对双方的源代码空行和注释行进行预处理,多数情况下删除双方的空行和注释行。也有例外的情况,如被比对双方的源代码基本相同,连注释行或者空行的位置也相同,这种现象从侧面反映被比对双方源代码具有同一性,而且得出同一性意见的依据与空行和注释行的处理没有直接关系。
4.规范源代码换行的格式
每一种计算机编程语言都规定了其特定的换行规则,程序员在编写代码时遵守这些规则进行代码换行。但在鉴定实践中,经常出现这样的情况:按照常规的换行,每一行的代码都非常短。比如,连续多个变量的声明,占用的行数比较多,程序员为了方便,将常规的多行代码写在一行。这种青况对源代码进行同一性比对,要将双方的换行规则进行统一,以便得出正确的行数统计结果。
5.以函数为单元重新组织代码顺序或重新拆分源代码文件
通过上述操作预处理后的代码,在代码组织结构上,还存在物理顺序不一致的情况。例如,同一函数在双方代码文件中的前后顺序不一致,多个函数则会产生函数位置交叉的情况。如果采用Beyond Compare进行机械的比对,比对结果显然不够准确,这也是现实鉴定案件中产生鉴定偏差的最为普遍的现象之一。鉴定中采用的处理方式是:增加源代码行号,按照函数的对应关系,重新组织代码文件,或者以函数为单元重新拆分源代码文件。对于代码文件数量多、代码量大的情况,采用前一种方式较为方便;对于代码文件数量少,每个文件的代码又比较多的情况,如嵌入式软件的代码,采用后一种方式更为方便。
(二)单一源代码文件同一性比对
1.源代码的形式比对
单一源代码文件构成的软件系统多存在嵌入式软件中。首先,进行源代码的形式比对,即在对源代码文件进行规范空行和注释行、规范源代码换行格式预处理的基础上,应用Beyond Compare比对双方源代码,统计相同代码比例。形式比对是在不关注源代码功能情况下进行的,一般是鉴定人采取的试探性比对,以了解双方代码相似性概况为目的。因此,只有在其比对结果相同比例较高的情况下,才会直接给出同一性的鉴定意义;否则,需妥一步对源代码进行功能性比对。
2.源代码的功能比对
进行功能性比对需要做进一步的代码预处理,其基本比对过程如下。(1)标注行号。(2)确定函数对应关系,按对应关系调整代码顺序。(3)阅读源代码,以函数为单元,进行代码功能比对。这里所说的代码功能以代码本身的逻辑功能为主,同时兼顾其业务功能。代码的功能比对可以按行逐一比对,也可以按函数逐一比对。比对的结果一般分为相同、实质相同(或实质相似)和不同。其中,实质相同(或实质相似)适用于以代码重构方式进行的源代码修改。
3.统计比对结果,绘制统计数据表
(三)源代码文件集合同一性比对
对比对双方源代码由多种计算机语言设计、包含多种类型、多个源代码文件的鉴定,在确定功能模块对应关系、代码文件对应关系、代码预处理、单一文件比对基础上,为了反映比对结果的整体情况,应对比对结果进行整体层面的统计。
(四)鉴定意见的表述
源代码同一性鉴定的比对结果要在最终的鉴定意见中加以体现。然而,由于软件鉴定案件的复杂性,多数鉴定案件很难直接给出相同或不相同的结论。1.单一源代码文件的同一性鉴定意见表述
目前,国内各鉴定机构在源代码同一性鉴定意见的表述中经常使用相同、不同、基本相同、实质相同、实质相似的表述。其中,相同、不同较为明确;但对于基本相同、实质相同、实质相似,业界并没有统一的标准,甚至是争议比较大的内容。在参与的鉴定案件中,基于以下理解对鉴定意见加以表述:“基本相同”侧重代码规模,可以理解为比对双方相同和实质相同的代码行数占双方各自代码行数的比例较大;“实质相同”侧重代码质量,可以理解为比对双方的代码排除代码重构因素后,代码相同;实质相似与实质相同的表述类似,在实践中不严格区分。2. 源代码文件集合的同一性鉴定意见表述
相同、不同、基本相同、实质相同、实质相似的表述,在源代码文件集合的同一性鉴定中仍然广泛应用。只是在这种情况下,基本相同侧重代码文件的数量,可以理解为相同或实质相同的代码文件数量占比对双方代吗文件数量的比例较高;实质相同和实质相似也是从代码集合的角度考虑。对于鉴定意见,应根据案件的性质、代码的内容、比对的结果有针对性地、尽可能明确地予以表述并最终形成完整的司法鉴定报告。
欢迎您与我们交流更多有关软件司法鉴定事宜!