北京政法职业学院
计算机软件合同纠纷案件是法官审理的难点。针对计算机软件合同纠纷案件的审理,首先要求法官熟悉计算机软件开发流程,这是两个不同的学科,所以对多年从事法律专业人士是一个难题。下面我把计算机软件工程原理与解决计算机软件合同纠纷案件结合起来进行方法阐述。
1.软件生命周期
世间万物发展都要遵循一定的规律,一个软件产品或者软件开发系统也要经历孕育﹑诞生﹑成长﹑成熟﹑衰亡等阶段,一般称为软件生命周期或者软件生存周期。工程师把整个软件生命周期划分为若干阶段,不管软件规模的大小,都能够把软件开发变得容易控制和管理。
理论上,软件生命周期(SystemDevelopmentLifeCycle,SDLC)是软件开发必须经历的周期。一个产品周期分为需求调研分析、概要设计、详细设计、编写代码、软件测试、软件交付准备、最后验收[1-3]。
第一步:需求可行性分析。甲方找乙方进行软件外包的开发,那么乙方的软
件部门的需求组系统分析员要向甲方客户初步了解需求,然后以文档的形式列出要开发的系统的大功能模块功能,每个大功能模块有哪些小功能模块组成,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面,例如界面框架、界面颜色等。
需求功能不明确会导致严重的后果,所以系统分析员必须再一步深入了解和分析需求,根据软件工程师开发的经验设计具体需求模块,用相关的工具再做出一份文档系统的功能需求文档和项目控制文档。这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能,更重要的是把软件的开发时间和风险评估能够告诉客户。
由于要涉及合同的签订,系统分析员最后向客户再次确认需求,需要甲乙双方在合同的需求功能确认和交付时间进行仔细的核对。在案件审理过程中,往往发生甲方不认同乙方开发完成的软件功能,那么查阅证据目录中关于需求文档的描述就能解决此类问题。由于甲方的专业知识片面性,不能意识到软件的关键问题,那么导致双方签订的需求文档会出现需求功能描述模糊的地方,建议合议庭从双方后期的邮件或者其他沟通方式的证据中去判断是否存在功能缺陷。
第二步:概要设计。开发者需要对软件系统进行概要设计,也叫系统设计。概要设计需要对代码行进行考虑,包括软件代码的基本处理语句、编程结构、模块划分、功能参数、接口参数传递、运行环境兼容、数据结构设计和出错处理设计等,为软件的详细设计和开始编写代码提供基础。这些内容会以文档的形式进行保存,那么建议合议庭可以对乙方的设计文档进行调阅,以此判断乙方是否进行合理规划和工程设计。
第三步:详细设计。在概要设计的基础上,软件开发工程师需要进行软件系统的详细设计。在详细设计中,主要是设计代码图或者叫做软件类图,描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,把需求文档中文字阐述变成软件系统各个层次中的类图绘制。像盖房子的图纸一样,每个模块或子程序的设计都要以软件图UML加以表示。UML图的设计进一步阐述了需求文档和概要设计文档中文字的描述。
第四步:编码。在软件编码阶段,开发者根据上面的文档规定,按照数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。编码阶段是人们传统意义上的写代码,那么随着软件工程的发展,为了保证软件代码质量,IEEE组织规定编码前必须要进行一到三步的工作,才能进行后面的环节。
第五步:测试软件系统。这一步在解决计算机软件纠纷案件中起着非常重要的作用,但是实际审理过程中往往被忽视。测试环节既对案件中双方争论的软件初始功能需求进行验证,也可以检验软件是否最终完成。在知识产权案件中,合议庭加强重视测试证据的查验。
2.软件测试环节
软件工程理论中,每个软件开发后都要进行软件测试,按照软件开发过程随之匹配的要进行相应的测试,测试的各个阶段为单元测试﹑集成测试﹑系统测试和验收测试。从下面图中可以看出,左边依次下降的是开发过程各阶段,与此相对应的是右边依次上升的部分,即各测试过程的各个阶段。
图1软件测试的V型图
实际软件开发工作中,单元测试指的是软件开发人员进行代码审查,判断代码的值传递的正确与否。集成测试只是验证软件的模块之间关系和集成度,各个模块的本地化开发等。针对客户而言,系统测试和验收测试是检验软件研发成功与否的关键环节。
系统测试的目的是检验编写完成软件的功能,性能和稳定性是否达到了客户的要求。具体主要是从软件基本功能测试﹑交互测试﹑回归测试﹑α测试﹑β测试﹑恢复测试﹑安全测试﹑强度测试﹑安装测试﹑兼容性测试﹑容量测试﹑文档测试等方面开展。每个测试环节都需要专业的测试工程师团队完成,要明确的是每个环节不是简单测试一次就完成,而是要测试平均十个软件版本,达到了软件质量要求才能进行下一个环节测试。相应的会有很多的测试文档和测试数据生成,从这些文档会判断出软件的健壮性的发展过程。
验收测试是系统开发生命周期方法论的最后一个阶段,这时相关的用户/独立测试人员根据测试计划和结果对系统进行测试和接受。验收测试让用户决定是否接受系统,一般客户会选择专业人员进行评估。有一点需要特别强调的是上述多个测试环节都有一个相同点,就是每个测试环节都有很多的测试用例,这些测试用例的制定和设计都是根据最初的软件需求文档和功能文档编写的,而且每个测试结果必须由产品经理或者软件开发负责人签字方可进行下一步的测试。而软件的验收测试文档必须经过甲方和乙方共同签字才能发布最终的正式版,才能进行软件的最后交接。建议承办法官可以参审验收测试的证据加以判断软件功能是否完成,而不用仅仅根据片面的原告和被告的口头描述。实际审判中,法官如果只是根据双方或者代理律师的描述,很难判断责任在哪一方。综上,每个阶段都有各自的测试文档支持,每个测试文档都有对软件需求功能针对性的测试用例,测试结果需要主管部门领导的签字,特别是委托开发的甲方在β测试和交付测试的文档上签字。法官团队或者合议庭要熟练理解软件开发和测试的关系,能够审查软件开发交付实际进行的程度,这样对进一步判别案件审理为哪一方的过错提供有力的技术保证。此外还要结合微信邮件的信息证据进行佐证。
3.软件后期维护
第六步:软件交付准备。在乙方软件测试证明软件达到要求后,应向甲方客户提交开发的目标安装程序、数据库的数据字典、《用户安装手册》、《用户使用指南》、需求报告、设计报告、测试报告等双方合同约定的产物。
第七步:验收后的软件维护。在软件合同中会规定乙方要在软件正式交付给甲方后进行必要的维护和技术支持,如果乙方没有提供软件后期支持,也是违反合同约定。
4.总结
一个知识产权案件的承办团队,针对计算机软件合同纠纷,不但要熟悉知识产权的相关法条,而且要理解计算机软件开发的过程和软件的生命周期。计算机软件不是简单指的是代码,而是包括计算机程序、规程以及运行计算机系统可能需要的相关文档和数据。建议承办法官要重视软件各个阶段文档的审理,重视软件交付前后测试用例的执行和交付文档的查验,判断出软件完成情况,实事求是,用法律手段保护权利人的利益,促进软件业的发展,促进科技的进步。
参考文献
[1]《物联网软件工程》,张凯主编,清华大学出版社,2017
[2]《软件工程》,郑人杰,清华大学出版社,2004.
[3]《软件工程导论》,张海藩,清华大学出版社,1987.