软件|软件分析与设计:分析什么?如何设计?


软件|软件分析与设计:分析什么?如何设计?

文章图片


软件|软件分析与设计:分析什么?如何设计?

文章图片


软件|软件分析与设计:分析什么?如何设计?

文章图片


软件|软件分析与设计:分析什么?如何设计?

文章图片


软件|软件分析与设计:分析什么?如何设计?


分析与设计这两个词我们平时经常听到 , 也经常讲 , 那么分析与设计的本质究竟是什么呢?到底要分析什么?又到底要怎样去设计?这3个问题如果平时没有一些积累 , 突然被问到这些 , 一时也会显得不知所措 。 接下面在第一部分中回答分析与设计的本质 , 只有清楚了本质 , 那就知道要怎么分析与设计 , 因此在第二、第三部分具体讲软件的分析与设计方法 , 最后一部分讲述个人的一些思考 。
一 分析与设计的本质 1 分析的本质
\"分析\" , 由\"分\"和\"析\"两个字组成 , \"分\"是分开的意思 , 这个比较好理解;\"析\" , 左\"木\"又\"斤\" , \"斤\"通\"金\" , 即把木劈开 。 延伸来讲 , 分析的本质即是洞察出事物的内部要素 , 包含组成结构、运行机制等 。 平时开发同学经常看到\"需求分析\"、\"软件分析\"、\"架构分析\"这些词 , 以\"需求分析\"为例 , 分析阶段要了解的内容有:需求背景、需求目的、需求目标、利益相关方、业务流程、业务依赖方、业务指标 。 分析的目的是为了找出隐藏在现象背后的本质 , 考察的是否对事物打散认识 , 深入到事物内部去看问题 , 就像我们高中学习化学一样 , 分子结构决定表现现象 。 在实际软件开发中 , 产品同学提的一个需求 , 有时它就包含了技术解决方案 , 只有深入分析之后 , 开发同学有可能提出更为合理的技术解决方案 , 否则只是就事论事的解决问题 , 在新的场景下 , 现有的解决方案又有问题 。
有一个段子说一个人去做美容 , 刚来的一个医生不懂人体结构 , 结果一刀下去 , 把大动脉划破了 , 结果人失血过多死了 , \"美死你了\"这个词就是这么来的 。 段子归段子 , 这也说明如果分析没有做得相当充分 , 也即缺乏对事物的了解 , 往往做事会出错 。
2 设计的本质
\"设\"和\"计\"两个字都有\"言\"字旁 , 并且右边有\"多\"的意思 , 如\"十\"、\"又\" , 即集多家之言 。 延伸来讲 , 设计的本质即是对方案优中选优 , 包含了对方案设计的思考、取舍和权衡 。 只有了解了当时的设计思想才会比较快掌握是怎样实现的 , 在软件编码实现层面上 , 我们有时看到一些比较难理解的逻辑 , 这些逻辑就是当时设计的产物 , 在当时是为了解决特定的问题产生的 。
一个好的设计凝集了设计者的思想和心血 , 比如经典的文学著作 , 里面有优秀的写作手法;比如经典的影视桥段 , 里有精彩的故事情节;比如巧夺天工的建筑设计 , 里面有丰富的寓意 。 相反一个糟糕的设计 , 轻则让人迷惑 , 看不懂为什么要这么设计 , 影响美观、使用 , 重则产生事故 , 在《复杂系统的产品设计与开发》一书中 , 作者举了一个轮船的例子 , 当时建造轮船提了很多要求 , 在面对这么复杂的系统时 , 设计没有考虑周全 , 结果设计出来的轮船下水就沉了 。
拉曼《UML和模式应用》一书中 , 对分析与设计概括成:分析是做正确的事;设计是正确地做事 , 之前看到这2句话挺迷糊 , 并没有领会到这两句的精髓 , 后面经历了一些系统的设计之后 , 重新去看发现这2句话高度概括出了分析与设计的本质内涵 。

二 到底要分析什么 1 分析全景图
分析的起点是问题本身 , 比如现象、痛点、挑战、价值等 , 从这些基础点去分析 , 如分析一个业务时 , 我喜欢从业务愿景和业务目标去看这个业务有哪些利益相关者 , 也即有哪些角色在使用这个业务 , 从这些利益相关者的角度去思考他们的本质诉求 , 正是他们的诉求构成了我们要做什么的输入 , 不管外部怎么变化 , 他们的本质诉求是不变的 , 如对于消费者来讲 , 他们的诉求是花最短的时间、最少的钱、更好的体验买到心仪的商品;对于商家来讲 , 他们的诉求是怎么卖出更多的货、怎样获得更大的利润 。 反而如果我们不去关注利益关注点的本质诉求 , 而只是自己凭空想出来的 , 自以为有价值 , 结果一落地就出现了问题 。