计算机软件开发合同具有履行周期长、技术复杂性强、功能需求动态化调整等特点,在软件开发过程中,委托方对于软件的功能需求往往并非一成不变,甚至在签订软件开发合同时,委托方对于开发的软件功能可能仅有笼统规划,而对相关功能的细节要求并不明晰,随着开发过程的推进,委托方可能会对软件的功能需求提出变更要求。
实践中,对于委托方在开发过程中提出的变更需求,委托方和开发方往往未及时对需求变更的范围、是否另行计取开发费等问题书面确认,故双方对于因需求变更引发的开发费用如何计算、工期应否顺延、合同无法继续履行的违约责任如何承担等问题极易产生分歧,进而引发纠纷。本文结合司法裁判观点及律师实务代理经验,对计算机软件开发合同纠纷中因需求变更产生的费用、工期、合同解除相关争议问题及裁判观点进行梳理,并提出相应的风险防范建议。
软件开发合同需求变更引发的常见争议
(一)需求变更引发的费用争议
在软件开发合同履行过程中,委托方可能会提出新增开发独立功能、扩展或优化已有功能等需求,在合同对原开发功能范围及要求约定不明的情况下,委托方可能认为其提出的功能需求属于对原合同约定功能的细化、完善或迭代,应由开发方在原合同价款范围内完成,不应另行计取开发费用;而开发方则可能认为相关功能需求已经超出合同约定的开发范围,构成新的开发需求,应相应增加开发费用,双方因此对应否支付需求变更的合同外开发费用、如果支付应如何计价等问题产生争议。
(二)需求变更引发的工期争议
委托方提出的需求变更往往会直接影响软件开发项目的开发进度,导致软件开发周期延长无法按时交付。当开发方未能按合同约定时间交付开发成果时,委托方可能会主张开发方承担迟延履行的违约责任,开发方则会主张迟延履行系因委托方变更、增加需求导致,开发工期应相应顺延。此种情况下,双方对于需求变更与迟延履行之间是否存在因果关系、双方是否对工期顺延达成合意、开发方应否承担迟延履行违约责任等问题产生争议。
(三)需求变更引发的解约争议
“开发内容明确”是软件开发合同得以履行的前提,在委托方与受托方持续沟通功能变更需求、长期无法对开发内容达成一致的情况下,将导致软件开发合同履行陷入僵局,合同无法按预期履行。此种情况下,委托方与开发方可以以解除合同的方式打破合同僵局,但因合同履行过程中,委托方可能已经支付了部分开发费用,开发方已经交付阶段性开发成果并投入人力物力,双方往往对合同解除后已支付的开发费能否返还、已进行的开发工作能否获得价款补偿等问题产生争议。
需求变更费用争议的实务裁判要点
(一)开发方主张需求变更的合同外开发费用的,应当举证证明委托方明确提出了变更需求,且该需求明显超出合同约定的开发范围
软件开发合同纠纷中,开发方就需求变更主张合同外开发费用的,法院首先将审查该需求变更是否实际发生,开发方不仅需要证明其实际完成了需求变更的相应开发工作,还应证明该需求变更系由委托方提出、双方形成了有效的需求变更合意,且该需求明显超出了合同约定的开发范围,否则可能因举证不足难以获得法院支持。
如在(2021)最高法知民终2317号案件中,二审法院最高人民法院认为,仅凭委托方的单方项目工作计划,无法认定委托方对涉案合同需求进行了调整,故未予支持开发方主张的需求变更合同外费用:
“颐坤公司上诉认为,2019年5月,未来公司编写了新的《宝鸡智慧旅游项目工作计划》,对涉案合同需求进行了部分调整。根据新的工作方案,颐坤公司积极配合开展项目工作,这是导致颐坤公司费用增加的根本原因,从而提出了要求未来公司支付合同外费用的诉讼请求。本院认为,未来公司编写的《宝鸡智慧旅游项目工作计划》仅系其单方的工作计划,并未明确对涉案合同需求进行部分调整,亦无本案双方当事人盖章确认,不能据以认定系双方当事人共同的意思表示。故仅凭该份工作计划,不足以支持颐坤公司提出的要求未来公司支付合同外费用的诉讼请求。”
而在(2021)最高法知民终88号案件中,开发方提供了合同履行过程中双方的往来邮件,法院根据合同约定及邮件内容认定委托方变更了功能需求,据此认定委托方应向开发方支付额外的开发成本:
“首先,合同仅约定相悦公司提供IOS版本、安卓版本,但相悦公司在提交IOS版本、安卓版本外,还提交了PC版本。双方在合同履行过程中,在关于软件开发的沟通邮件多次提及到PC版本,且奥飞公司亦多次对PC版本的功能提出意见与要求,可见相悦公司是按照奥飞公司的要求制作了合同约定范围外的PC版本。其次,在合同履行过程中奥飞公司变更了功能需求,相悦公司产生了额外研发成本。2017年3月29日,奥飞公司发出的‘爆裂飞车2DEBUG服_bug及优化问题反馈_20170329’电子邮件载明,相悦公司指出其中‘增加机甲库’‘机甲皮肤功能’‘交互界面’‘观战模式’等属于合同外功能……在上述邮件中,相悦公司陈述部分功能属于合同外功能,奥飞公司并未予以否认,而是表示对功能增删,暂不进行调整,功能调整后续会单独出方案……”
(二)合同对需求变更程序有约定的,如果需求变更内容未明显超出合同约定的开发范围,开发方又未能举证双方已按合同约定完成需求变更确认程序的,法院对开发方主张的合同外开发费用可能不予支持
在合同明确约定发生需求变更时应签署变更确认单、补充协议等变更确认流程时,法院一般尊重当事人的合同约定。此种情况下,开发方以存在需求变更为由主张合同外开发费用时,不仅需要证明需求变更内容明显超出合同约定的开发范围,还应当证明双方已经按照合同约定完成需求变更的确认程序,否则可能承担举证不能的不利后果,对其合同外费用主张不予支持。
如在(2020)最高法知民终833号案件中,最高人民法院认为:“……经比对,奋拓公司主张涉案软件系统正式验收前新增和变更需求相关内容……并没有明显超出前述《武钢矿业网上招投标系统需求说明书》记载的十八项功能模块……再次……依据上述约定,如果涉案软件开发、维保过程中存在增加变更功能需求情况,奋拓公司需与神州公司另行签订《用户需求变更确认书》,但奋拓公司一审、二审审理期间均未提供相关证据……综上,奋拓公司请求武钢公司、神州公司向其支付涉案软件系统正式验收前新增及变更需求相关费用……的相关主张,无事实和法律依据,本院不予支持。”
(三)在合同未约定需求变更开发费用计算方式的情形下,法院可以结合需求变更的开发成本、项目总开发费用、合同履行情况等因素,酌定相应开发费用
在开发方能举证证明存在需求变更事实、应予计取合同外费用的情况下,如合同对需求变更的相关计价方式未做明确约定的,法院通常会综合需求变更的开发成本、项目总开发费用、合同履行情况等因素,对需求变更的额外开发费用进行酌定。
如在(2021)最高法知民终88号案件中,一审法院认定:“相悦公司也无法证实2017年4月至6月期间代发的工资均因额外研发所支出,考虑到涉案游戏总研发费用为481万元,原审法院酌定奥飞公司应支付相悦公司额外的研发费用为20万元。对于相悦公司超出该部分的主张,原审法院不予支持。”二审法院最高人民法院维持了一审判决:“涉案合同虽然未明确约定相关的计价方式,但鉴于该额外工作的客观存在必然导致开发成本的增加,故原审法院经综合考量酌情确定奥飞公司应当支付的额外开发费用金额为20 万元并无不当……”
需求变更工期争议的实务裁判要点
(一)软件开发是需求不断明晰、开发内容动态调整的过程,不宜仅因开发方超期交付软件即认定其构成迟延履行。如开发方超期交付并非因开发工作不合要求导致,而是因前期开发需求不明确、委托方自行修改及增加需求等原因导致,开发方不承担迟延履行责任
软件开发过程具有较强的动态性,特别是在合同双方未能及时制定软件开发功能说明书和软件开发计划的情况下,不可避免地会增加双方对接磨合、相互探明意图的时间成本,客观上增加开发方不能如期交付软件的风险。
人民法院案例库入库案例“北京中某网络科技有限公司诉北京盛某网络科技有限公司计算机软件开发合同纠纷案”的裁判要旨指出:“计算机软件开发合同履行过程中,随着委托方需求的进一步明晰、合同双方交流的不断深入、受托方阶段性完成的具体情况、市场情势的客观变化乃至交易成本控制的考量,软件内容和功能进行调整和改进实属正常,不宜仅因软件开发方超过合同约定的履行期限交付软件即简单认定其构成迟延履行。”
该入库案例中,中某公司与盛某公司签订《软件开发合同》,约定前者委托后者开发一款游戏软件。合同签订后,中某公司向盛某公司支付了首期开发款130万元,后中某公司以盛某公司未按时交付产品致使合同目的不能实现为由,起诉请求解除涉案合同、盛某公司退还软件开发款。
二审法院最高人民法院结合双方开发人员的QQ聊天记录内容,认定软件开发过程中出现反复修改甚至推倒重来并非因盛某公司完成的工作不合要求所致,而是由于负责软件前端开发的中某公司开发人员变动导致后续新进人员未了解此前沟通过程、中某公司在履行过程中自行更改软件开发思路及新增需求等原因导致,故开发进度延迟的原因不应归责于盛某公司,进而未支持中某公司要求盛某公司承担迟延履行责任、请求解除案涉合同的主张。
(二)当事人在约定的交付时间届至后协商变更软件交付时间,委托方对迟延交付未提出异议且继续配合履行合同的,可能被视为双方当事人以实际行为变更交付时间,开发方不构成迟延履行
根据司法实务观点,在合同明确约定软件交付或上线时间的情况下,如交付或上线逾期后,委托方未及时向开发方提出异议,而是与开发方协商变更交付时间、继续配合履行软件开发合同的,法院可能认定双方以实际行为变更了交付时间,开发方不构成迟延履行。
如(2021)最高法知民终1431号案件中,最高人民法院认为:“关于麦点公司主张的迟延上线问题,虽然补充协议明确约定了涉案软件上线时间,但双方在履行中以实际行为变更了上线时间,即麦点公司并未对迟延上线提出异议,反而与鼎捷公司协商变更上线时间,在约定时间届满后与鼎捷公司沟通运行不畅的原因,继续配合鼎捷公司履行合同,故鼎捷公司不构成迟延履行。”
需求变更解约争议的实务裁判要点
(一)软件开发合同的履行需要委托方和开发方的相互配合,在一方当事人明确表示其不再继续履行合同的情形下,双方当事人的履约信赖基础已不存在,且软件开发属于“不适于强制履行”的债务标的,法院通常会支持合同解除
《民法典》第五百八十条规定:“当事人一方不履行非金钱债务或者履行非金钱债务不符合约定的,对方可以请求履行,但是有下列情形之一的除外:(一)法律上或者事实上不能履行;(二)债务的标的不适于强制履行或者履行费用过高;(三)债权人在合理期限内未请求履行。有前款规定的除外情形之一,致使不能实现合同目的的,人民法院或者仲裁机构可以根据当事人的请求终止合同权利义务关系,但是不影响违约责任的承担。”
软件开发合同通常需要委托方和开发方双方当事人的相互配合,一方明确拒绝履行合同的,另一方通常无法单独继续履行合同。因此,该类案件中,即便一方当事人主张解除合同提出的事实依据不成立,但在其明确表示拒绝继续履行合同的情况下,法院考虑到双方当事人的履约信赖关系已不存在,判令继续履行合同在事实上不适于强制履行,通常会支持合同解除。
如在(2021)最高法知民终1431号案件中,最高人民法院认为:“虽然基于《配套服务合同》《客户需求确认》的二次开发任务主要由鼎捷公司完成,但是ERP系统需要根据麦点公司的具体需求、资源、管理流程实现,没有麦点公司的配合,鼎捷公司无法独立完成涉案合同的继续履行。涉案二次开发任务属于合同法第一百一十条第二项规定的‘不适于强制履行’的债务标的。虽然麦点公司在本案中主张解除合同所提出的事实依据均不能成立,但其原审中明确表示拒绝继续履行,鼎捷公司也表示如果麦点公司拒绝继续履行,涉案合同无法继续履行。考虑如下因素,如果不允许麦点公司请求解除合同,对合同双方都不利,因此本院对麦点公司解除合同的诉讼请求予以支持……”
又如在(2024)豫01知民终79号案件中,委托方苏某、王某帆以某甲公司未按期完成软件功能开发为由主张解除涉案合同,一审法院认为:“鉴于苏某、王某帆明确表示其不再继续履行涉案合同,双方已无法达成继续履行涉案合同的合意,一审法院认为继续履行涉案合同已不符合经济原则,且双方之间作为履约基础的信赖关系已不复存在,涉案合同目的在客观上已不能实现,长期的合同僵局亦会造成双方利益失衡,故涉案合同应予解除。” 二审法院河南省郑州市中级人民法院维持一审判决。
(二)合同解除后双方当事人终止履行,已履行部分应当通过恢复原状、折价补偿及违约损失赔偿方式处理,违约损失赔偿应当结合合同履行情况、当事人支出的成本、当事人过错程度、后续合同义务的免除等因素综合认定
《民法典》第五百六十六条第1款规定:“合同解除后,尚未履行的,终止履行;已经履行的,根据履行情况和合同性质,当事人可以请求恢复原状或者采取其他补救措施,并有权请求赔偿损失。”
根据上述规定,合同解除后,就尚未履行的部分,双方当事人终止履行,就已经履行的部分,能够恢复原状的应当在物理形态上恢复到合同订立之前的状态,不能恢复原状的应采取折价补偿等补救措施。恢复原状、折价补偿之后,当事人还因对方违约或者合同解除而遭受损失的,应当根据当事人过错程度、合同履行情况、当事人发生的成本、后续合同义务的免除等因素综合确定损失赔偿责任。
(2021)最高法知民终1431号案件中,最高人民法院认为:“关于恢复原状,麦点公司向鼎捷公司支付的合同款项160万元,鼎捷公司应予以返还。……麦点公司返还后,鼎捷公司二次开发成果基本上恢复到合同订立前的状态。关于赔偿损失,鼎捷公司主张收取的款项是按照涉案合同全部合同价款计算的,在交付麦点公司的合同标的物已经返还鼎捷公司的情况下,鼎捷公司仅能请求除返还原物之外所遭受的损失,即因已经提供的二次开发和技术服务遭受的损失。对于该部分损失,应当根据鼎捷公司的已付开发和服务成本、后续维护义务的免除等因素,合理确定其金额。虽然鼎捷公司已经完成了绝大部分功能点的开发,但是合同终止履行后也免除了其后期免费维护义务……鼎捷公司因对开发任务未能完成也存在过错,应自行承担部分损失。综合上述情况,原审法院认定麦点公司赔偿鼎捷公司75万元在其合理裁量权范围内,本院不再予以调整。”
(2024)豫01知民终79号案件中,关于合同解除后开发方已收取的开发费用应否返还的问题,河南省郑州市中级人民法院认定,双方因对项目软件功能理解不一致、存在需求变更而持续沟通确认功能需求,导致未能及时完成软件开发,在合同履行过程中均有过错,合同解除的责任不宜仅归责于任何一方,故根据履行情况及过错程度酌定解除后返还部分款项:
“计算机软件开发合同解除后,开发方先期收取的开发费用应否全部或部分返还,应当结合计算机软件开发合同的特点、委托方及开发方的实际履行情况、有无过错及过错大小,以及合同的相关约定进行判断。本案中,涉案合同约定案涉项目软件的开发费用共计80000元,分三期支付,苏某、王某帆在涉案合同签订后支付了第一期款项48000元,并在本案中主张某甲公司全部返还。根据本案查明事实,涉案合同签订后,某甲公司就案涉项目软件进行开发,确定了项目对接人,与苏某、王某帆就软件开发问题持续沟通,完成了部分开发工作。涉案合同履行过程中,双方对案涉项目软件的具体功能部分理解不一,沟通后进行调整;涉案合同履行过程中还存在需求变更问题,双方持续沟通不断确认功能需求,因此,双方就案涉项目软件开发发生争议,产生纠纷,不宜简单确定为委托方或开发方一方的责任,一审法院关于双方在涉案合同履行过程中均存在过错,对涉案合同的解除双方均应承担责任的认定并无不当,一审法院综合考虑双方过错程度、涉案合同实际履行情况等,确定某甲公司返还苏某、王某帆26000元,对苏某、王某帆要求某甲公司支付利息及律师费的请求不予支持,亦无明显不当。”
(三)合同解除后的违约责任应基于当事人的行为是否违反了合同约定义务判断,在合同约定的软件开发具体内容及需求无法确定的情况下,无法确定开发方的履行行为是否构成违约,对委托方主张开发方承担违约责任的请求不予支持
通常而言,双方应当对软件开发的具体需求及验收标准进行确定,在此基础上,开发方才能按照该确定的需求进行软件开发,故委托方提供确定的软件开发具体内容及需求是软件开发合同能够履行的前提,需求长期处于不确定状态将导致开发无法按合同预期进行。
在(2019)最高法知民终330号案件中,最高人民法院认为,合同解除后当事人的违约责任应基于双方约定,根据其履行合同的行为是否违反合同约定来确定。在合同本身未明确约定具体开发内容、双方亦未签订需求变更书面文件的情况下,合同约定的软件开发具体内容及需求无法确定,无法据此认定开发方的履行行为违反合同约定,故未支持委托方关于开发方承担违约责任的请求:
“合同解除后,尚未履行的,终止履行。至于合同解除后当事人承担的违约责任问题,应基于双方约定,根据履行合同是否违反合同约定的义务来确定。本案中,涉案合同约定开发内容详见说明书,但该说明书未包含具体的开发需求。虽然双方合同另约定,发生需求变更、调整时,双方对变更内容进行协商,协同解决,双方签订《需求变更申请单》,但实际履行过程中,双方并没有签订《需求变更申请单》……在涉案合同软件开发的具体内容及需求未确定的情形下,不能确定弗格安吉公司履行合同是否违反了双方间的约定,故张某主张合同解除后应由弗格安吉公司承担违约责任,本院不予支持。”
风险防范与应对建议
(一)签订合同时明确约定需求变更的具体情形及计价方式
开发方与委托方签订软件开发合同时,建议明确约定功能新增、功能修改、功能优化等不同的需求变更情形,并针对不同情形是否计取合同外价款、如何计算价款、工期是否顺延、如何验收及违约责任如何承担等问题进行具体约定,避免因约定不明产生争议。
(二)开发过程中出现需求变更时及时书面确认并保留沟通证据
开发过程中出现需求变更时,双方应及时按照合同约定的需求变更程序,通过补充协议、需求确认单、会议纪要等书面方式确认变更事项、计价方式等。如无法及时签订正式书面文件,应保留双方关于需求变更的微信、邮件、会议等沟通记录。
(三)对争议的专业性问题申请司法鉴定并注意保留鉴定检材
因软件开发合同具有较强的技术专业性,当双方对于需求是否属于新增、相应成果是否完成、完成内容是否符合要求等问题存在较大争议时,仅依靠双方提交的证据往往难以查明案件事实。诉讼过程中,当事人可以根据案件具体情况及举证责任申请司法鉴定,由鉴定机构对前述专业问题进行鉴定。鉴定时,双方需根据举证责任提交需求确认书、开发成果、测试报告等材料作为鉴定材料,如因无法提交检材或对检材保存不当导致无法鉴定的,可能承担相应的举证不利后果。
团队介绍
梁雪律师团队长期专注于商事争议解决业务,深耕TMT(科技、媒体、通信)及建设工程两大行业领域,曾在最高人民法院、各省高级人民法院及各地仲裁委员会代理多起法律关系及事实复杂的大标的额案件,并为多家国企及上市公司提供常年顾问及专项法律服务,具备深厚的专业水平和丰富的实践经验。
本文作者
梁雪

合伙人
北京办公室
bjliangx@vtlaw.cn
赵叶睿资
律师
北京办公室
zhaoyeruizi@vtlaw.cn