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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(嵌入式软件的模块化设计,架构设计及扩展性)