[day2] 代码未动,计划先行!在上手开发之前,先确定计划和排期吧

843 阅读5分钟

这是我参与更文挑战的第 2 天,活动详情查看:更文挑战


前言

上一篇文章主要介绍了什么是组态系统,以及组态系统的技术架构。相信你已经对上述内容有了比较简单的了解。

本期将会从软件工程的角度对项目进行规划,确定后续的开发计划和日程。当然了,在开始之前,最先要做的事情是可行性分析。

什么是可行性分析?

并非任何问题都有简单的解决办法。事实上,许多问题不可能在预定的系统规模或时间期限之内解决。如果问题没有可行的解,那么花费在这项工程上的任何时间,人力,软硬件资源和经费都是无谓的浪费。

可行性分析,就是为了提前发现引发问题的风险点,对后续的行动方针给予建议。 在项目前期尽早的发现问题,改正所花费的成本就越低、代价就越小。

但要注意的是,在可行性分析阶段,不需要具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。

可行性分析一般从三个方面进行:经济可行性、技术可行性、社会可行性。下面以实际案例说明下这三个方面的内容。

首先是经济可行性

经济可行性主要确定成本和收益两个部分。在将要进行的项目中:

  • 投入成本:个人空闲时间
  • 限制:没有明显的限制
  • 收益:对项目的把控能力、整体设计能力、编码能力的提升。
  • 额外收益:参与更文计划,可以锻炼文章编写能力,甚至还可能得奖。

从上述条目可知,值得去投入时间和精力去做这个项目。

技术可行性

这里我们先回顾一下上一篇文章对组态软件的分析:

一般来说,组态软件可以分为三个部分:绘图模块、数据处理模块和数据源。绘图模块和数据处理模块中间以固定的双工协议传输数据(如 WebSocket)实现数据展示和反向控制功能。而数据处理模块和数据源对接,处理模块需要支持多种数据传输协议(如 Modbus、MQTT、Restful Api)来接收数据和发送控制指令。数据源既包含实际的网关、机组,也包含开放数据库。通过处理模块,也会将设备上传的实时数据或属性存储在开放数据库中。

因此在技术调研方面,我们需要注意以下两点:

绘图模块的实现

类似可实现 web 二维组态的绘图插件,比较出名的有:

插件名称及厂商评价
图扑软件的组态编辑界面专业,展现效果出色,然而没有社区开源版。不差钱的企业或个人可以考虑搞一套
le5le基于 Canvas。官方提供的在线编辑器对组态展示相当友好。画板核心组件开源,官方也有对应的视频教程来帮助你开发自己的编辑器
x6基于 SVG,蚂蚁可视化团队出品。v1 版本虽然稳定,但还有一些明显的问题暂未解决,部分高级的图形交互效果需要妥协。官方提供了一批 React 的组件,方便快速开发原型
mxgraph基于 SVG,具体效果可以看一下 drawio。编辑器的交互是开源版本中用着最舒服的,基本的绘图需求均可满足。但很遗憾的是:官方开源版本在 2020 年 10 月份左右停止更新。幸运的是,现在社区已经有人接手开始进行代码重构,但新版本发布还需要一段时间。

值得一提的是,后面两个并没有宣称支持到组态领域,但依然能支持组态软件开发的需求。

对接多种数据传输协议的驱动

面向设备:MQTT、Modbus、OPC UA 等常用驱动均有 JavaScript 版本。基础功能可以满足。 面向开放存储:pg、cassandra 的 node.js 驱动也有官方提供。

另外,在 GitHub 上看到一个全栈的二维组态项目:FUXA,技术栈使用的是 Angular + Node.js Express。对项目进行分析,不论是前端框架还是数据接入驱动,都是前端工程师了解的内容。

社会可行性

这里主要提到的是协议问题。目前上述提到的类库及框架的开源版本均为 MIT 协议,不会出现法律上的风险。

综上所述,该项目开发过程没有明显的风险,继续开发是可行的。

确定项目可行之后,需要详细分解项目各模块需要的功能,并估计每个模块的工作量,制定一套初步的开发计划。这部分内容将会在后续文章中提到。

总结

本期我们介绍了软件项目开发之前重要的一步:可行性分析。并针对当前项目从经济可行性、技术可行性和社会可行性方面进行分析,最终确定项目可行。

后续的文章中将会对项目整体进行模块化拆分,并初步确定开发计划。


感谢大家看到这里,欢迎在评论区提出你的见解。