发布于 2026-01-06 2 阅读
0

那么,你知道如何为你的客户构建软件系统吗?(第 1 部分)AWS 安全直播!

那么,你知道如何为你的客户构建软件系统吗?(第一部分)

AWS 安全直播!

你是一位优秀的开发者,甚至可能是一位杰出的开发者。你对编程语言了如指掌,精通数据库和键值存储,函数式设计和面向对象设计都驾轻就熟。你可以迅速将任何程序容器化并部署到 AWS 云平台。

但是,你能为你的客户开发一套软件系统吗?

我这么问是因为,即使你具备上述所有技能,也不意味着你就能为你的客户构建软件系统。当然,你可以构建软件系统,但我所说的“为你的客户构建的软件系统”是指至少能够满足客户需求,理想情况下能够满足客户期望的系统。

“当然,”你可能会说,“客户告诉我他们想要什么,我就照着做!”真的吗?!你怎么知道你做的就是他们想要的?没错,他们会告诉你他们想要什么,但你怎么知道你交付的就是他们想要的?你怎么知道自己真的理解了他们的意思?更重要的是,你的客户怎么知道你做的就是他们想要的?关键在于,软件开发不仅仅是编写代码。没错,编写代码是构建系统的重要组成部分,但它并非全部,甚至可以说并非最重要的部分。

关于软件项目失败的原因,已经有很多研究。所有研究都一致认为:失败的主要原因是需求模糊、沟通不畅和期望不切实际这三者共同作用的结果。让我用一句话概括:

如果你的项目失败了,很可能是因为你没有妥善管理其需求。

需求管理包括收集、建模、分析和沟通客户的需求。没错,即使你是世界上最好的程序员,领导着一支超级程序员团队,也无法大幅降低项目失败的概率。所以我再问一遍:

你知道如何为客户构建软件系统吗?

现在你应该明白,除非你知道如何处理客户的需求,否则你对上述问题的回答应该是斩钉截铁的“不”。因为你或许是一位优秀的开发人员,但如果你无法管理需求,你就不是系统构建者!

那么,从哪里开始呢?从最开始:了解什么是需求和规范。

需求与规范

即使从事软件开发二十多年,我仍然惊讶于竟然有那么多人,甚至包括经验丰富的专业人士,都分不清这两者的区别。他们经常把这两个术语混用。这无疑是项目彻底失败的捷径。

简而言之,需求是利益相关者对正在构建的系统表达的需求、愿望或期望。需求的形式、规模和来源各不相同。需求可以以以下方式提供:

  • 正式声明(“该系统应提供文档搜索功能”)
  • 规则(“每月存款超过 1000 美元的账户可享受 10% 的折扣”)
  • 例如(“乔不用付咖啡钱,因为这是他在那家店买的第11杯咖啡了”)
  • 用户故事
  • 业务流程
  • 流程图、活动图或其他类型的图表
  • 还有一些我目前根本无法想象的奇特方法

另一方面,规范是对为满足或实现需求所需的系统行为的描述。例如,对于我们上面提到的“系统应提供文档搜索功能”,规范可以类似于描述如何在搜索栏中添加一些搜索字符串。规范只是定义我们如何实现需求的一种方式,仅此而已

需求差距

所以,让我们把这件事彻底弄清楚:

  1. 需求告诉我们客户想要什么或需要什么。最终,提供需求是客户的责任。我们能做的是帮助他们识别、完善和验证这些需求。有很多方法可以帮助我们实现这一点,我们将在本系列的后续文章中介绍这些方法。
  2. 规范告诉我们的客户(以及我们的团队),我们将如何在交付的系统中满足这些要求。规范对于构建成功的系统至关重要。它们驱动着整个开发和测试过程。正如Joel Spolsky所说:

    “在软件项目中,不编写规范是你能承担的最大不必要的风险。这就像只穿着身上的衣服就出发穿越莫哈韦沙漠,希望‘随机应变’一样愚蠢。”

  3. 作为系统构建者,我们的工作是了解客户的需求并将其转化为规范。

  4. 客户的任务是确认规格说明是否符合他们的要求。

本系列文章旨在概述一些敏捷方法和技巧,这些方法和技巧将对您有所帮助:

  • 收集需求
  • 以它们为榜样
  • 创建可执行规范

需求与规范之间存在着一道巨大且危险的鸿沟。下一篇文章将向您展示如何弥合这道鸿沟,敬请期待。

PS :本系列文章与我之前发布的关于用户故事的文章相关,并且是其延续。

文章来源:https://dev.to/redfred7/so-do-you-know-how-to-build-a-software-system-for-your-client-part-1-2cnp