美文网首页
嵌入式软件的模块化设计,架构设计及扩展性

嵌入式软件的模块化设计,架构设计及扩展性

作者: Franck2020 | 来源:发表于2020-06-20 18:13 被阅读0次

    吉德林法则,把难题清清楚楚地写出来,便已经解决了一半。

    因此,在谈嵌入式软件设计之前,我们需要先提几个问题。

    \bullet 什么样的软件是才能价值最大化?

    \bullet 如何看待软件在实际开发中和架构设计初衷的背离?(施工和图纸不一样)

    \bullet 开发人员与流程的关系是什么?

    什么样的软件是才能价值最大化?

    一次开发,尽量多的复用。拷贝数越多,成本越低,价值最大。

    但是由于每个项目的差异性,因此需要将整个软件模块化,在不同项目中仅搭积木,以增加复用数。

    模块化的核心,就是分层与模块间解耦,模块间解耦的核心是模块间接口标准化(比如,文件接口,消息接口)。

    如何看待软件在实际开发中和架构设计初衷的背离?

    背离是正常的。因此需要实时纠偏。代码检视需要在项目的每轮迭代都要进行,并且每轮迭代又要留有架构优化的工作量。

    检视分为:人工的代码检视,工具的代码检视(PC_Lint, Coverity, Fortify, Findbug, Infusion等)。

    开发人员与流程的关系是什么?

    开发人员的水平,决定了软件的上限;流程管理的水平,决定了软件的下限。

    流程管理影响组织氛围,组织氛围影响技术水平提升。

    一个产品为导向的公司,技术能力很难成为第一。比如:Apple,腾讯。

    一个技术为导向的公司,产品体验很难成为第一。比如:Google,华为。

    下图为一个较为通用的消费电子类产品的模块化设计:

    通过分层和模块接口隔离,解决解耦问题。

    当解决了耦合问题后,就可以用编译配置或者动态加载的方式,让一套代码支持多款产品的目的,即保证了模块化,又保证了扩展性。

    当然,主流的还有其它的技术策略,比如虚拟机技术(JS,Java),Web化等。但是往往对硬件有一定的要求,如果我们硬件的内存足够多,当然没有问题,毕竟用Java写代码,代码稳定性会容易的多。

    搞定了软件架构的问题,后面就是工作效率提升的工具链开发,下图为一个示例:

    解决了开发测试部署的工具链,实现每年上千个定制版本不是梦。

    相关文章

      网友评论

          本文标题:嵌入式软件的模块化设计,架构设计及扩展性

          本文链接:https://www.haomeiwen.com/subject/oirgxktx.html