软件系统设计重要原则 (第1部分)
你是个好的开发者,可能在编码上很出色。你熟练掌握自己的编程语言。你可以轻松使用设计模式以及面向对象方法。你还可以很快把应用部署到各个公有云上。
...但你能为你的客户设计一个软件系统吗?
尽管你可能拥有上面提到的所有技能,但这并不意味着你可以为你的客户建立一个软件系统。当然,你可以设计一个软件系统,但是我指的是“为你的客户设计软件系统”,它至少可以满足客户的需求,理想情况下,这个软件系统就是他们想要的。
你可能会说,“我的客户告诉我他们想要什么,我就设计什么!”。真的是这样吗?设计软件不仅仅是编码。编码是设计系统的关键部分,但它不是唯一的部分,甚至不是最重要的部分。
已经有很多关于软件项目失败原因的研究。他们都同意一件事:失败的主要原因是需求模糊,沟通不畅和不切实际的期望。我总结一下:
如果你的项目失败,可能是因为你没有正确管理其要求而失败。
管理需求涉及到客户需求的启发,建模,分析和沟通。你可以是非常优秀的程序员,但这不会对你的项目失败产生很大的影响。所以我再问一遍:
你知道如何为你的客户设计软件系统吗?
除非你知道如何处理客户的要求,否则你应该知道,你对上述问题的回答是NO。你可能是一个出色的程序员,但除非你能够管理要求,否则你就不是系统设计师!
那你会从哪里开始?你要了解需求和规范是什么。
需求与规范
即使经过十多年的软件开发,我仍然发现有很多人,即使是经验丰富的程序员,也不知道两者的差异。这是导致项目失败的原因之一。
简而言之,需求是出资人对正在设计的系统的需求、愿望的表达。需求可以是:
- 必要功能(“系统应提供文件搜索功能”)
- 规则(“每月存款超过1000元的账户可获得10%的折扣”)
- 例子(“张明没有为他的咖啡付钱,因为这是他在那家店里的第11杯咖啡”)
- 用户故事
- 业务流程
- 流程图,活动图表或其他类型的图表
- 其他我没想到的方式
规范是为了实现需求,在软件系统内的行为描述。因此,对于我们的“系统应提供文档搜索功能”,规范可能类似于指定如何在搜索栏上添加一些搜索字符串。规范只是定义我们如何实现需求的一种方式。
需求与规范差别
- 需求告诉我们客户想要什么或需要什么。我们的客户有责任向我们提供需求。我们可以做的是帮助他们识别,完善和验证需求。有许多技术可以帮助我们实现这一目标,本系列的下一篇文章将介绍这些技巧。
- 规范告诉我们的客户(和我们的团队)我们将怎样在系统中满足这些要求。规范对于设计成功的系统至关重要。它们推动整个开发和测试过程。
- 我们作为系统设计师的工作是引出我们客户的需求并将其转换为规范。
- 我们客户的工作是确认规范满足了他们的需求。
本系列将提出一些有助于你的敏捷方法和技巧:
- 引出要求
- 为它们建模
- 创建可执行规范