软件交付,通常是指将测试良好的代码、资源文件、配置文件等打包成特定的制品并交付给用户。在具体的项目中,不同的客户可能给出不同的要求,如产品使用说明书、产品验收测试报告、产品性能和安全报告等,甚至可能要求连同源码一并交付。
软件交付往往会经历一个比较复杂的过程,即便对于小型项目或者个人项目也是如此(当然,不排除特定情况下,直接忽略、简化了相应的环节使之“看起来”比较简单)。软件行业有一个共识——没有bug的程序是不存在的,软件得以正常运行是要建立在一系列特定的前提条件下。为了保证软件质量,需要在不同的环境下进行大量的用户输入测试。不同的环境,可以从操作系统(Linux、Windows、macOS等)、交付环境(物理机、虚拟机、容器等)、终端(PC、手机、Pad、智能手表)、浏览器(Chrome、Firefox、Microsoft Edge等)等角度来理解。大量用户输入,包括用户的不同输入(鼠标、键盘、触摸、滑动)产生的动作(单击、拖曳)和数据。例如,在表单提交中程序可能接收到各种各样的数据,甚至包括一些危险的数据(如SQL注入等)。
在上述过程中,人们对研发、测试环节是比较容易理解的,而对打包并交付给用户这个过程往往会被忽略掉。
在现实的软件生产、交付活动中,为了提高工作效率,往往会有比较清晰、明确的分工,如按照角色,分为产品、研发、测试、运维和交付团队,但是这也可能导致软件交付链条中的两个问题:周期长、缺少闭环。有时可能发生让人更加沮丧的事情——用户与客户不是同一个人群;客户指的是软件产品的购买者,主要关心性价比,而用户是软件产品的实际使用者,关心的是使用价值。
【思考】 当我们在谈论软件交付时,到底是在交付什么?