架构设计实践二:需求分析

1.1 三个问题

掌握好需求分析,需要掌握三个问题的解决方式。

  • 需求如何获得?需求开发=愿景分析+需求分析
  • 如何判断需求全不全?功能、质量、约束三类需求
  • 如何从需求转换为设计?功能、质量、约束对架构产生不同的影响。

1.2 软件研发与交付过程总图

其中概念化阶段一般都要完成愿景分析、风险评估、可行性分析及项目进度和成本的粗略估算,输出《愿景与范围文档》;需求分析阶段则完成需求捕获、需求分析,得到《软件需求规格说明书》,一个关键的思路是需求捕获与需求分析是迭代着进行的,完成需求捕获之后再统一进行需求分析的思路是不具备可信性的;架构设计阶段完成通过关键需求确定、概念架构设计、细化架构设计和架构验证,得到架构设计说明书。

1.3 愿景分析(简要)

愿景分析的目的是明确愿景,即针对系统目标、功能范围、主要特性及成功要素等进行构思并达成一致。产出为《愿景与范围文档》,有的产品型公司会称之为《市场需求文档》MRD,有的产品型公司则称之为《产品需求文档》PRD,项目型公司则可能称之为《项目立项书》。

愿景=业务目标+范围+特性+上下文图。

  • 业务目标是客户组织应用系统所需要达到的目标,例如提升组织的某种能力,简化组织的某种过程。
  • 范围则是则是对需求的面状刻画,说明为实现业务目标,系统需要提供哪些主要的功能块。
  • 特性是对需求的点状刻画,列举系统大致支持哪些功能组(比范围的功能块要细),强调说明某些具有特色的功能项,点出功能项的更细节优势,技术特色、其他特色的强调。
  • 上下文图用于刻画系统的边界,将系统置于中央,周围环绕所有与系统相关的所有外部事物,关注本系统及与本系统相关的外部因素,但不关注本系统内部,保持本系统为黑盒,其主要目的是为保证需求发现过程中的全面性。

1.4 需求分析(简要)

需求分析的过程是需求捕获和需求分析迭代进行的过程,而不是“需求捕获->需求分析”的线性过程。

需求捕获是获取知识的过程,要求理解用户所从事的工作,并了解用户和客户希望软件系统在哪些方面帮助他们。需求捕获的输出是一系列的“需求采集卡”,记录需求类型、需求描述、需求北京、需求提出者等信息。

需求分析则是挖掘和整理知识的过程,在通过需求捕获所掌握的知识基础上进行,使得需求更系统、全面、有条理。需求分析的输出是《软件需求规格说明书》,精确阐述一个系统必须提供的功能、必须达到的质量属性及必须遵守的约束。一般使用用例技术来进行需求分析,对于重要需求,除用例图外,还需给出详细的用例规约。

1.5 如何判断需求是否全面

1.5.1       需求层次-方面矩阵

使用二维需求矩阵来判断需求是否全面。这个是目前我见到的最具可操作性的方法。

一方面,需求是分层次的,根据涉众的不同,可将需求分为三个客户级需求(也称组织级需求)、用户级需求和开发级需求;另一方面,需求可分为功能、质量和约束三个方面。通过检查层次-方面的二维矩阵,即可较好的判断需求是否全面。


功能


质量


约束


客户需求


业务目标


快、好、省


技术性约束

标准性约束

法规性约束

遗留系统集成

技术趋势

分批实施

竞争因素与竞争对手


用户需求


实现某某功能


运行期质量


用户群特点

用户水平

多国语言

使用环境


开发需求


行为需求(这个不太懂)


开发期质量


开发团队技术水平

开发团队磨合程度

开发团队分布情况

开发团队业务知识

管理的保密要求

安装

维护

1.5.2       软件质量的分类

软件质量涉及众多,但是从关注者的角度将其划分为运行期质量开发期质量,可将其划分的很清楚。

所谓运行期质量,指系统运行期间,最终用户可以感受到的质量属性,包括性能、易用性、安全性、健壮性、可靠性、可用性、可伸缩性、互操作性。

开发期质量则指的是系统开发、维护、移植过程中所体现出来的属性,是软件的开发、构建、部署人员所关心的质量属性,包括:

  • 开发人员关注的:易理解性(这个很容易被忽视)、可扩展性、可重用性、可维护性、可移植性
  • 测试人员关注的:易测试性
  • 部署人员关注的:易部署性

关键质量属性说明

  • 性能:性能包括速度、吞吐量和持续高速型,速度使用平均响应时间来衡量,吞吐量使用单位时间交易数来衡量,持续高速性指系统保持持续高速处理速度的能力,则与实时系统有关,实时系统对每次系统响应时间都有严格要求。需要注意的是,速度快一般意味着高吞吐量,但是速度慢不见得吞吐量就低,这与网络延时与带宽的关系相似。
  • 安全性:同时兼顾向合法用户提供服务,以及阻止非法用户使用的能力。高安全性意味着“同时兼顾”。
  • 可用性与可靠性:可靠性是指系统在一定时间内无故障运行的能力,一般用平均无故障时间来衡量,而高可用性则指的是“系统长时间为用户提供可用服务的能力”(原书中为“系统长时间无故障运行的能力”,应当不太准确)。经常使用集群的方式来提高系统的高可用性,但是显然,如果将整个集群视为一个整体,任意一台机器宕机,则整个系统都不能判定为“无故障运行”,所以其可靠性相比于单机是下降的,但是只要集群中足够多的机器正常工作,则系统“为用户提供可用服务”的能力并不受影响,因此集群提高了系统的可用性。
1.5.3      约束

可从客户、用户、开发三个层次来分解约束,确保约束条件的完整。另一个角度,约束=业务环境因素(来自客户)+使用环境因素(来自用户)+构建环境因素(来自开发、维护人员)+技术环境因素(业界技术约束)。

1.6 如何从需求过渡至设计

  • 使用功能来划分子系统、模块:功能是发现职责的依据,每个功能均由一条职责链来完成,通过为功能规划职责链,将职责划分到子系统,为子系统制定接口,确定基于接口的交互机制,来推动架构设计的进行。
  • 使用质量来完善架构:必须基于当前的中间架构,进一步考虑质量要求,对中间架构进行调整、细化。
  • 约束:一部分约束直接制约设计决策,例如团队成员仅掌握Java相关开发技术;一部分约束可转换为功能,例如银行系统的“本系统执行现行利率”引出“利率调整”的功能;一部分约束转换为质量属性,例如“柜员计算机水平普遍不高”引出易用性需求。
时间: 2024-11-08 22:34:24

架构设计实践二:需求分析的相关文章

阿里游戏高可用架构设计实践

今天读了李云华老师写的<阿里游戏高可用架构设计实践 >,有一些感受想分享一下. 印象很深的一句话那就是他最开始说的“把韵味的锅让研发去背!”也就是说,高可用的系统是设计出来的,不是靠运维保障出来的! 他提到出现问题人们的思考顺序为:首先想到的是不是运维太LOW了,比如说硬件质量太差,为什么这个月机柜也坏.交换机也坏,是不是到电脑城买个二手货放里面了?第二想到的是不是运气不好,之前一个月.两个月才遇到一次,这个月遇到了4次,是不是你们没有在机房烧香?第三个是不是测试不足,为什么这些Bug测试阶段

架构设计实践一:架构设计过程

节奏 做好架构设计需要做到看透需求.架构大方向正确.设计好架构的各个方面. 看透需求要求既要把需求找全,也要把需求项之间的矛盾关系.追溯关系搞清楚.需求找全可使用二维需求矩阵,从业务级.用户级.开发级和广义功能.质量.约束两个维度来找.一个矛盾关系的例子是安全性和互操作性的矛盾:一个追溯关系的例子是需求范围与系统目标的关系. 架构大方向正确是指要做好概念架构设计,概念架构重视“找对路子”,关注做好架构模式选型.集成技术选型等,不关注明确的接口定义.产品彩页上印的架构.售前提到的架构.投标使用的架

阿里P8级架构师浅析秒杀架构设计实践思路

一.前言 一提到秒杀,都会想到高性能.高并发.高可用.大流量-.在电商体系中,交易系统占据了环节中的半壁江山.比如里面特别迷人的秒杀系统,那秒杀涉及到什么架构设计?会涉及到什么业务? 泥瓦匠自言自语:秒杀这个东西,一篇文章也说不完.我这一篇起个头,实践系列还在后面,敬请期待. 二.秒杀业务难点 秒杀业务难点,总结为两点 并发多读 并发少写 这不同于一些场景,优惠营销系统,只会是一个用户读多个数据,但也会大流量的读操作.但没有啥写操作. 并发多读,多用户并发读一个数据.比如华为手机只有一个库存,活

缓存架构设计细节二三事

本文主要讨论这么几个问题: (1)"缓存与数据库"需求缘起 (2)"淘汰缓存"还是"更新缓存" (3)缓存和数据库的操作时序 (4)缓存和数据库架构简析 一.需求缘起 场景介绍 缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化. 例如对于用户的余额信息表account(uid, money),业务上的需求是: (1)查询用户的余额,SELECT money FROM account WHERE uid=XXX

【58沈剑架构系列】缓存架构设计细节二三事

本文主要讨论这么几个问题: (1)“缓存与数据库”需求缘起 (2)“淘汰缓存”还是“更新缓存” (3)缓存和数据库的操作时序 (4)缓存和数据库架构简析   一.需求缘起 场景介绍 缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化. 例如对于用户的余额信息表account(uid, money),业务上的需求是: (1)查询用户的余额,SELECT money FROM account WHERE uid=XXX,占99%的请求 (2)更改用户余额,UPDA

脑图学习架构设计之二:网站架构模式

HRMS(人力资源管理系统)-SaaS架构设计-概要设计实践

一.开篇 前期我们针对架构准备阶段及需求分析这块我们写了2篇内容<HRMS(人力资源管理系统)-从单机应用到SaaS应用-架构分析(功能性.非功能性.关键约束)-上篇><HRMS(人力资源管理系统)-从单机应用到SaaS应用-架构分析(功能性.非功能性.关键约束)-下篇>内容来展开说明. 本篇主将详细的阐述架构设计过程中概要架构设计要点来和大家共同交流,掌握后续如何强化概要架构设计在架构设计中作用,帮助我们快速确认架构的方向及核心大框架. 在阐述具体的概要架构工作方法之前,还请大家

Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)

前言: 我打算写一系列关于Swing程序开发的文章.这是由于最近我在做一个Swing产品的开发.长期做JavaEE程序,让我有些麻木了.Swing是设计模式的典范,是一件优雅的艺术品,是一件超越时代的产品! 有机会作Swing软件的开发,让我非常有感觉! 呵呵,希望有机会能够用Java3D编写软件,那种感觉一定更棒! Java和Swing都是杰作.我这个人对别人一向很挑剔的,能够得到我由衷地赞誉,可想而知它们有多优秀了.奇怪的是,它们居然一直都无法占领桌面市场.有人说这是技术的原因.我认为这应该

软件系统的架构设计

软件系统架构(Software Architecture)是关于软件系统的结构.行为.属性.组成要素及其之间交互关系的高级抽象.任何软件开发项目,都会经历需求获取.系统分析.系统设计.编码研发.系统运维等常规阶段,软件系统架构设计就位于系统分析和系统设计之间.做好软件系统架构,可以为软件系统提供稳定可靠的体系结构支撑平台,还可以支持最大粒度的软件复用,降低开发运维成本.如何做好软件系统的架构设计呢?笔者就这一问题做如下探讨分析. 软件系统架构设计方法步骤 基于体系架构的软件设计模型把软件过程划分