前言

开发人员经常会面临下面一些场景:

新人入职,需要学习已有系统,作为 landing 的一部分,如何学习?被拉过去参与一个陌生系统的迭代开发或者系统维护(bugfix),如何快速上手?同事离职或转岗,需要把系统交接给你,怎么去接?内心 os:这是一口锅吗?

这样的场景多了,就需要去梳理常见问题以及应对方法,方便后续遇到类似场景可以快速应对。本文总结熟悉系统主要分三部分:业务学习、技术学习、实战。每部分会梳理一些在学习过程中需要解答的问题,这些问题随着经验的积累需要逐步补充完善。

业务学习

业务学习就是从业务角度去学习系统,我们需要了解系统的客户是谁、使用人是谁、带来了什么价值,系统提供了哪些功能等。不清楚业务,就等于不知道系统在干什么。技术是为业务落地而服务,清楚了业务才知道怎样用技术更好地服务业务,所以业务学习是熟悉一个系统的首要任务。这块主要的学习方式有跟产品、运营、开发沟通,学习产品设计文档文档、PRD、自己使用系统,还有一些常见图,如产品功能架构图、业务流程图、功能树,用例图等。

常见问题:

系统所在行业的情况是怎样?系统的目标用户是谁?比如是给公司高层做决策用?给运营或客服用?还是互联网用户用?平均有多少人在使用?高峰期多有少人在用?系统有什么业务价值?有哪些指标可以衡量系统业务价值?系统有哪些功能模块?系统有哪些领域概念?梳理下系统的领域模型。系统的关键业务流程有哪些?关键业务流程是怎样?系统的非功能性需求有哪些?如性能、质量、扩展性、安全性等。系统未来的发展规划是怎样?

技术学习

技术学习主要学习系统的架构、如何实现、系统的运维等。描述一个系统的架构有五视图方法论,五视图分别是:逻辑架构、开发架构、运行架构、物理架构、数据架构。

逻辑架构

逻辑架构着重考虑功能需求,系统应当向用户提供什么样的服务,关注点主要是行为或职责的划分。常用表达图形,静态图有包图、类图、对象图,动态图有序列图、协作图、状态图、活动图。逻辑架构的核心设计任务是模块划分、接口定义、领域模型细化。

常见问题:

有哪些子系统或模块?系统之间是什么样的关系?对外上下游接口有哪些?对接人是谁?关键业务流程怎么实现的?用类图、序列图等方式表达出来。

开发架构

开发架构关主要关注系统源代码、第三方SDK、使用的框架、中间件、工具包。

常见问题:

代码在哪?包怎么划分的?怎么分层?如 mvc、controller-service-dao。用了什么框架?如 ssh、dubbo。用了哪些工具包?如 apache commons、guava。用了哪些中间件?如 metaq、tair、schedulerX、Diamond。依赖哪些平台?如权限平台、流程引擎等。

运行架构

运行架构的着重考虑运行期质量属性,关注点是系统的并发、同步、通信等问题,这势必涉及到进程、线程、对象等运行时概念,以及相关的并发、同步、通信等。

常见问题:

系统能支撑多少 qps ?峰值 qps 多少?与上下游系统怎么交互的?rpc?http?同步还是异步?

物理架构

物理架构的设计着重考虑安装和部署需求,关注点是目标程序及其依赖的运行库和系统软件最终如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性、持续可用性、性能和安全性等要求。

常见问题:

系统如何发布部署?有哪些部署环境?系统有多少台机器?系统部署怎么部署的?关注接入层,部署方式,如集群部署、分布式部署等。有没有容器化?有没有多机房部署?

数据架构

数据架构的设计着重考虑数据需求,关注点是持久化数据的存储方案,不仅包括实体及实体关系数据存储格式,还可能包括数据传递、数据复制、数据同步等策略。

常见问题:

数据存储在哪?用了什么数据库,如 oracle、mysql。梳理 E-R 图。数据量有多少?是否有分库分表?用了哪些 nosql 库?有哪些数据同步任务?大数据框架的使用情况如何?

系统运维

系统运维重点关注什么时候会出问题,出了问题怎么解决。

常见问题:

什么时间容易出问题?比如电商双十一,对系统的压力很大,这时候很容易出问题。对关键功能是否有监控?需要看系统有配置了哪些报警项,监控了哪些方面。出了问题怎么解决?日志在哪?是否有全链路跟踪?是否有一些紧急操作,比如开关配置、降级、限流配置。系统有哪些坑?找开发同学回顾历史问题,以免踩坑。通过同事总结的 case,或者与负责的产品、运营、技术与了解。系统总会有一些坑,需要把这些坑填上。历史代码经过多次迭代总会导致复杂度高(分支、嵌套、循环很多),存在设计漏洞,性能隐患等,很难维护,这些就需要我们去重构了。记住有一句话:填的坑越大,能力越大。运营、客服反馈的常见问题有哪些?

实践

熟悉了系统的业务和技术后,就要实战了,通过实战进一步加深对系统的熟悉程度。实践可以通过做需求、修 bug、重构等方式,亲自动手编码、调试、测试、上线。

总结

已有系统通常经历了从 0 到 N 的建设过程,熟悉系统其实是一个逆向推导过程,也是一个学习架构、阅读源码的过程。在学习的过程中最好能带上思考,比如为什么要这么设计,为什么要用这个中间件?是否有更好的编码方式?哪些地方可以优化等,以此达到一个深入熟悉的过程。

如何快速了解一个系统?相关推荐

  1. 灵魂 36 问,让你快速熟悉一个系统

    简介: 面对一个完全陌生的系统,如何快速的熟悉并上手?本文将从三个方面进行总结,提供一个系统的方法,同时也可以用来 review 已有的系统,查漏补缺. 前言 开发人员经常会面临下面一些场景: 新人入 ...

  2. 如何快速熟悉一个系统

    前言 开发人员经常会面临下面一些场景: 新人入职,需要学习已有系统,作为 landing 的一部分,如何学习? 被拉过去参与一个陌生系统的迭代开发或者系统维护(bugfix),如何快速上手? 同事离职 ...

  3. 入职新公司,如何快速熟悉一个系统

    文章末尾给大家留下了大量的福利 前言 大家都知道我们新入职一家公司,经常会面临下面一些场景: 新人入职,需要学习已有系统,作为 landing 的一部分,如何学习? 被拉过去参与一个陌生系统的迭代开发 ...

  4. 如何快速接手一个系统?

    常规的做法是看设计文档.了解背景.维护代码等.经过这一阶段的体会,总结到以下可行的方法. 1) 看设计文档.了解项目产生的背景,必须明白:主要是解决了业务什么问题,关键路径.接口是什么?核心数据是什么 ...

  5. 如何快速了解一个系统

    引言: 有时候我们开发项目不是从项目一开始就参与的,那么,如何在项目进行到一半时,尽快的了解并上手这个项目,或者在项目已经完成的情况下,如何进行重构优化维护,这些都需要我们尽快了解项目. ------ ...

  6. C/C++ 如何快速解构一个系统的源码(如何看懂大型工程项目的源码)

    问: 研究一个开源系统源码的时候,总是不知道该从哪里研究. 我现在看源码从index文件开始看起,遇到包含的文件,就去看包含的文件, 包含的文件中又引用了其它的文件,总是觉得看来看去,很没有逻辑性. ...

  7. linux box 信息发布,使用Instantbox快速搭建一个开箱即用的Web端临时Linux系统

    说明:我们很多时候想学习下Linux或者程序搭建,然后出错了,不会解决的可能会直接重装系统,很麻烦,然后这里博主就找到了个可以解决该问题的工具instantbox,使用该工具可以让你仅通过浏览器的情况 ...

  8. 深度学习笔记:01快速构建一个手写数字识别系统以及张量的概念

    深度学习笔记:01快速构建一个手写数字识别系统 神经网络代码最好运行在GPU中,但是对于初学者来说运行在GPU上成本太高了,所以先运行在CPU中,就是慢一些. 一.安装keras框架 使用管理员模式打 ...

  9. 如何快速搭建一个完整的移动直播系统?

    **如何快速搭建一个完整的移动直播系统?** 原文连接:http://toutiao.com/a6301796359717945601/ http://toutiao.com/a62784095597 ...

最新文章

  1. 【转】txt中导入数据,matlab画图问题
  2. 实验六 Linux进程编程,Linux系统编程实验六:进程间通信
  3. Linux shell脚本附带选项(参数传递及接收)
  4. 学习方法之02掌握记忆方法,在学习上就赢了一半
  5. 电流源并联怎么合并_一种特殊的并联切换电力系统,长见识了
  6. java文件序列化_通过快速Java和文件序列化加快速度
  7. 【LeetCode笔记】剑指 Offer 57-. 和为s的两个数字 (Java、对撞双指针)
  8. python画三维立体图难吗_万万没想到,Python竟能绘制出如此酷炫的三维图
  9. js怎么select 选中的值
  10. [LeetCode] 342. Power of Four(位操作)
  11. 【OpenCV学习笔记】【函数学习】十四(cvSeq的用法说明(功能很多,按照需求使用))
  12. 使用Patch激活CleanMyPC时报错找不到文件
  13. wince植入胎压监测_【精】创酷一个月实际用车感受+轻松解决仪表盘失灵问题+胎压监测...
  14. python进行回归分析与检验_R/python-回归分析
  15. 摩尔定律终结与科学大停滞
  16. waves服务器系统盘,Waves Soundgrid服务器(DIY)
  17. Unity3d中UGUI组件精简复盘(十九)ContentSizeFitter组件
  18. 艺赛旗(RPA)Python 读写 ini 配置文件
  19. ConcurrentHashMap源码解读
  20. AUPRC Vs 平均查准率

热门文章

  1. 服务器显示器蓝屏怎么办,win7系统经常发生显示器蓝屏四种原因和解决方法
  2. 你不知道的JavaScript上卷-作用域和闭包
  3. 3dsmax动画一、移动,旋转和缩放动画。
  4. (附源码)计算机毕业设计SSM楼盘销售管理系统
  5. CSS入门六:字体样式;字体(楷体、隶书等),斜体,文字加粗,字体大小;
  6. CAXA 二次开发 接单
  7. 诺基亚安卓手机_诺基亚手机的塞班系统,占用内存小且系统流畅,为啥还是被淘汰?...
  8. 2022年CCF中国软件大会赞助邀请函
  9. 数字集成电路设计的流程1
  10. 软考-软件设计师 - 第11章 标准化和软件知识产权基础知识【附补充常考知识点】