上节说到,做任何事情都可以分为三个阶段:准备做、做、做好。本文,就将进入第一个阶段,准备做阶段。

Pre-Architecture:准备架构

  准备架构阶段,最最重要的是弄清楚要做什么东西,即掌握用户需求。应该来说,整个准备阶段都围绕着“需求”来转。

  我将它描述为如下过程:需求-->约束-->质量-->关键功能

  初学者根据上诉步骤,一步一步来,就能够完成准备架构阶段。

1.需求

  可能有人会认为“需求应该来自市场人员”,这句话并不全面,需求不应该仅仅来自市场人员。

  记得本人接手的第一个项目时,市场人员告诉研发部门需要研发出一款产品,研发部门会成立一个项目小组,然后再指定一个研发人员做需求调研,写需求列表,这个做法现在觉得是非常不合理的。首先,研发人员没有市场经验,更不懂用户想要什么产品,就只能够照着别的公司的产品抄,最终肯定是抄个四不像。

  下面回到话题,需求应该来自哪里?应该是一拨人讨论出来的结果,这拨人就应该包括:市场人员+产品经理+架构师+项目经理。首先一款产品是否需要做,这是市场人员和产品经理所讨论的范畴,他们决定该如何定位此款产品,产品经理根据公司的技术实力,决定能否做。那么,接下来便是了解用户需求,前期的调研工作需要市场人员来做,并形成一个“初步需求列表”。有了“初步需求列表”,架构师和项目经理就应该考虑,并弄清楚每条需求,这里为什么需要项目经理的参与呢,就是为了保证该项目的负责人能够最清晰的明确做什么,接下来才能带领队伍把握关键指标。

  架构师在考虑需求的时候,如果只是笼统的来了解每个功能,这样各种需求混在一起就显得比较乱,最好可以参考ADMEMS矩阵法来进行划分:

ADMEMS矩阵法
  广义功能 质量 约束
业务级需求 业务目标 快、好、省

1.技术性约束

2.法规级约束

3.技术趋势

4.竞争因素与竞争对手

5.遗留系统集成

6.标准性约束

7.分批实施

用户级需求 用户需求 运行期质量

1.用户群特点

2.用户水平

3.多国语言

开发级需求 行为需求 开发期质量

1.开发团队技术水平

2.开发团队磨合程度

3.开发团队分布情况

4.开发团队业务知识

5.管理:保密要求

6.管理:产品规划

7.安装

8.维护  

从表中可以看出需求是分为层次的。

业务级需求:包含客户或出资者要达到的业务目标、预期投资、工期要求,以及要符合哪些标准、对哪些遗留系统进行整合等约束条件;

用户级需求:用户使用系统来辅助完成哪些工作?对质量要求如何?用户群及所处的使用环境方面有何特殊要求?

开发级需求:开发人员需要实现什么?开发期间、维护期间有何质量考虑?开发团队的哪些情况会反过来影响架构?

  对于此三类需求弄清楚之后,就可以形成一个初步的需求列表。

  基本上来说掌握ADMEMS矩阵表,前期的准备工作就算做完了。下面的小节是对其他概念做更加详细的解释。

2.约束

  前面说了,整个阶段都是围绕“需求”来转,接下来的“约束”、“质量”都是对需求做限制的。那么何为“约束”?

  约束:制约项目发展的因素。

  首先,约束来自与需求又制约需求,比如“用户级需求”中提到了“用户群特点”的约束,就说明,本产品必须要考虑针对哪些用户群来做,要做一个儿童教育软件,就不应涉及成人的复杂理论和逻辑。这就是约束!

3.质量

  质量,类似于“约束”,它更重视某一事物具备的属性。当然,有些时候可以把质量属性来当做约束,比如可移植性,可以把它看做是质量也可以当做一种约束来看。

  那么,作为一个架构师该考虑哪些质量属性呢?

  1.性能  2. 安全性 3.持续可用性 4.可靠性 5.鲁棒性 6.易用性 7.可测试性 8.可重用性 9.可维护性 10.可扩展性 11.可移植性 12 可互操作性。

  也不是说用户要把每一个指标都做上去。有些指标之间是相互影响的。其影响关系如下(+表示促进  -表示影响  空白表示无明显作用):

  性能 安全性 持续可用性 可互操作性 可靠性 鲁棒性 易用性 可测试性 可重用性 可维护性 可扩展性 可移植性
性能        
安全性              
持续可用行         + +            
可互操作性                 + +
可靠性   +     + + +   + +  
鲁棒性   +       +          
易用性         +          
可测试性   +       +     + +  
可重用性   +       +   + + +
可维护性   +         +     +  
可扩展性           +   +   +
可移植性     +       + + +  

  架构师应该确定关键质量的优先级。并在《架构文档》中明确记录此要求。

4.关键功能

  关键功能包含如下四个方面:1.核心功能;2.必做功能;3.高风险功能;4.独特功能。

  如何区别这四个方面,实际上是靠经验和感觉。它们之间实际上是有重叠部分的。

核心功能:业务层接口所反映的功能。如,项目管理系统中,项目信息查看、添加任务等都属于核心功能;

必做功能:必做功能实际上是以客户为背景的,简单来说就是愿景;

高风险功能:顾名思义,哪些功能操作可能会涉及到安全和隐私等问题;

独特功能:实际是上诉上个功能的补集,看看还有哪些没有覆盖到的,却又很关键的功能。

  架构师在设计阶段要考虑到“关键功能”所占有的比例,没有明确的标准,一般遵循:功能少的系统比例高一些,功能多的系统比例少一些。

总结

  总得来说,准备阶段要做的最重要的一件事,就是弄懂需求,不管通过何种方式剖析和理解,只要弄懂架构的需求就算完事了!

转载于:https://www.cnblogs.com/movezzzz/p/3328411.html

架构师的第一阶段:准备做(Pre-Architecture)相关推荐

  1. 架构师的第一步:学习两种抽象视角(Abstraction View)

    [ IT史上最完整.最经典的软件框架开发技术宝典 (上百篇经典文章&eBooks) ] ee                                                   ...

  2. python架构师培训课程_Python从零到架构师课程 六大阶段Python高级课程+项目实战 尚学堂全方位Python课程...

    Python从零到架构师课程  六大阶段Python高级课程+项目实战 尚学堂全方位Python课程 3.JPG (31.16 KB, 下载次数: 1) 2019-9-17 23:36 上传 2.JP ...

  3. 【软件测试】资深测试聊一聊,测试架构师是怎么样的,做一名成功的测试工程师......

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  4. 大厂架构师之路8. 创业 - 做销售

    2011年9月到11月,做完了上海通用的自动化改造项目之后,好像突然就没了事情,也许创业型的小公司都有这样的无奈吧-- 我也一样,像个无头苍蝇,没有方向.我的工作已经跟技术没有了什么关系,更像是一个打 ...

  5. 李智慧 - 架构师训练营 第一周

    总结 什么是软件架构? 什么是架构师? 如何做软件架构? 4+1视图模型 什么是模型? 为什么要建造模型? UML建模 作业 总结 架构师职责 架构师能力 什么是软件架构?  什么是软件架构,了解其 ...

  6. 谈搜索架构师的不同阶段

    原文引自:http://blog.csdn.net/soso_blog/archive/2010/07/01/5706555.aspx 搜索技术的应用越来越广,掌握搜索技术或者针对搜索技术有了解的人也 ...

  7. 【尚硅谷云原生Java架构师的第一课 4 2021-09-28】KubeSphere三种安装,docker,k8s,nfs安装,metrics。KubeKey一键单 多节点安装。

    1.KubeSphere https://www.yuque.com/leifengyang/oncloud/gz1sls 介绍 sphere 英 /sfɪə(r)/ n. (活动.兴趣.专业知识的) ...

  8. 架构师技能5:如何做code review 代码简洁之道

    目前该文只是简单理论的总结,后续优化增加例子来说明. 高效代码:https://guisu.blog.csdn.net/article/details/117234109 代码重构:坏代码的味道,编写 ...

  9. 云原生Java架构师的第一课阿里云部署-KubeSphere平台安装

    1.KubeSphere简介 KubeSphere官网 KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器管理平台,支持部署和运行在任何基础设施之上,提供简单易用的操 ...

最新文章

  1. 微信小程序项目重构之Redux状态管理
  2. IDEA中MAVEN项目打JAR包的简单方法
  3. JQuery中操作Css样式的方法
  4. 动态sql语句返回值
  5. 港航环境变化引起的错误解决方法
  6. 北森iTalentX 3.0:聚焦场景一体,开启HR全面数字化时代
  7. python替换文件内容_Python实现替换文件中指定内容的方法
  8. java导入导出有版本兼容问题_java导入excel时遇到的版本问题
  9. Agile: 为什么要使用 scrum 而不是瀑布?
  10. 手动代码上线 及个人优化调整
  11. android获取wifi别名,android-连接WIFI时获取SSID
  12. 分享一个在线的HTML5元素在线测验 : HTML5 Element Quiz
  13. 卡尔曼滤波估计导弹位置Python代码
  14. uTorrent设置,防止出现磁盘负荷100%
  15. 机器学习7——线性回归
  16. Elasticsearch:如何处理 ingest pipeline 中的异常
  17. java 类转换_java实体类转换有没有更优雅的方式?
  18. 【Excel基础训练】函数入门:基础操作与常用函数
  19. 中文出现乱码最常见的几种方式解析
  20. Python爬虫实战(3)古诗文网

热门文章

  1. linux进行主机发现,linux – 网络上所有计算机的主机名发现
  2. 基于matlab的硅晶体模型,基于Matlab的图像处理技术识别硅太阳电池的缺陷
  3. 压测接口线程数设置_ZAT掌门性能压测巡检系统实战和落地
  4. (C++)1027 打印沙漏
  5. (C++)CSP 201712-2 游戏
  6. python socket tcp客户端_python网络编程socketserver模块(实现TCP客户端/服务器)
  7. Mac OS 提高工作效率的几个快捷键
  8. Shippable和Packet合作提供原生ARM CI/CD
  9. TensorFlow——入门基础
  10. Ubuntu 忘记root登录密码的解决办法