JEEKSSHIRE 24

软件维护服务:运维支持、功能迭代与接手他人项目

软件维护服务,是让产品在发布之后持续健康运行的工作:修复错误、适配新的平台版本、监控故障、保障安全,并不断完善功能。JEEKSSHIRE 24 自己维护着自有产品,也承接客户项目的维护,包括由其他团队编写的代码。我们先读代码,弄清实际情况,再给出清晰的计划。

软件维护服务包含哪些内容

维护不是“以防万一”的值班,而是对产品持续、定期的工作。具体内容取决于项目,通常包括:

谁需要应用维护与功能迭代

来找我们的客户,大多处于以下四种情况之一:

如果产品还处于构想阶段,可以先看软件定制开发或MVP开发:从第一个版本就规划好维护,比事后再补要容易得多。

我们如何接手项目并开始维护

  1. 了解任务。弄清现在最大的问题是什么、谁在使用产品、什么情况算作故障。
  2. 交接权限。代码仓库、服务器、应用商店账号、支付和邮件服务:我们列出清单,并确认这些账号确实归您所有。
  3. 审计代码和基础设施。阅读代码,从零构建项目,检查依赖、备份和发版流程。
  4. 制定计划。把发现的问题分类:哪些优先修复,哪些需要重写,哪些最好保持原样。
  5. 配置监控。设置故障告警和备份,让您从我们这里得知问题,而不是从客户那里。
  6. 日常工作。需求、优先级和发版按约定的流程进行,每次发布都必须在所有检查通过后才进行。

客户能得到什么

项目交接时应检查哪些内容、索取哪些文档,详见指南软件验收与项目交接。

我们自己的例子:我们如何维护自有产品

JEEKSSHIRE 24 有十多款自有产品在线运营,全部由编写它们的同一个团队维护。因此,我们对维护工作的理解来自实践,而不只是合同条款。

Wallet是一款用于支付海外数字服务的钱包,支持Mac、Windows和浏览器,提供包括阿拉伯语在内的四种语言。支付流程的更新需要格外谨慎:订单通过带状态的队列执行,并支持自动退款,金额在服务器端计算。

Legal是一款带人工智能的文档编辑器,提供Mac和Windows版本,界面支持184种语言。每次更新在上线前都要通过构建、代码检查和测试,桌面版与Web版同步发布。

JEEKSSHIRE 24 官网也由我们自己维护:四个语言版本由生成器从同一个源构建,因此一次修改就能同步到所有语言,无需手动搬运。

软件维护的四种类型:纠错、适应、完善、预防

业内通常把软件维护分为四种类型。它们有助于双方就优先级以及什么算紧急情况达成一致。

我们做什么示例
纠错性维护修复产品运行中的缺陷付款成功了,但订单状态没有变化
适应性维护让产品适应外部环境的变化新版iOS、应用商店新规、更换支付服务
完善性维护根据用户和业务需求改进功能新增报表、角色或界面语言
预防性维护降低未来出故障的风险更新依赖、简化代码、为薄弱环节补充测试

接手其他团队的项目:代码审计与交接

把项目交给新的开发团队是很正常的事,我们也接手他人编写的代码。第一步是代码审计:按照现有说明从零构建项目,检查架构、依赖、密钥的存放方式、发布前的检查流程以及备份机制。

我们找问题的根源,而不是在表面打补丁。这样代码不会越积越多临时修补,维护成本会随着时间下降,而不是上升。

老旧软件现代化改造与平台升级

老旧软件很少需要整体重写。更常见的做法是分步改造:先隔离最脆弱的部分,更新依赖和平台,补充测试和检查,再把功能逐个迁移到新的实现上,而业务不必停摆。

这也包括把应用迁移到新版iOS或Android、为桌面版本签名和公证,以及增加界面语言,包括从右到左的排版。桌面产品详见桌面应用开发,Web产品详见Web应用开发。如果不确定是升级现有系统还是换成现成服务,可以阅读软件定制还是成品。想讨论您的项目,请通过需求表单联系我们。

常见问题

软件维护服务包括哪些内容?

包括修复错误、故障监控和备份、更新依赖和修补漏洞、适配新的平台版本以及功能迭代。针对您产品的具体内容会写入合同。

你们会接手其他团队开发的项目吗?

会。我们从审计开始:阅读代码,从零构建项目,弄清实际情况。然后给出计划,说明哪些先修复、哪些保持原样。

代码审计能带来什么?

一份附有说明的风险清单,对架构、依赖和安全性的评估,缺少的权限和文档清单,以及第一阶段的工作计划。审计之后,您能清楚了解产品现状,据此做出判断。

故障响应和SLA如何安排?

我们配置故障告警,争取在您的客户发现之前先发现问题。响应时间和紧急需求的处理流程会在维护开始前商定并写入合同。

如何适配新版iOS或Android?

我们在新系统版本上测试产品,更新依赖和构建工具,修复发现的问题,然后按常规检查流程发布更新并提交应用商店。

软件维护服务怎么收费?

价格取决于产品规模和所需的维护强度,因此没有固定价目表。了解项目之后,我们会提出合作模式和评估。

安全和依赖方面怎么处理?

我们定期更新依赖、跟踪漏洞、把密钥放在代码之外,并校验每一个输入字段。这是对每一次修改的要求,而不是单独的阶段。

ⓘ