吉德林法则,把难题清清楚楚地写出来,便已经解决了一半。
因此,在谈嵌入式软件设计之前,我们需要先提几个问题。
什么样的软件是才能价值最大化?
如何看待软件在实际开发中和架构设计初衷的背离?(施工和图纸不一样)
开发人员与流程的关系是什么?
什么样的软件是才能价值最大化?
一次开发,尽量多的复用。拷贝数越多,成本越低,价值最大。
但是由于每个项目的差异性,因此需要将整个软件模块化,在不同项目中仅搭积木,以增加复用数。
模块化的核心,就是分层与模块间解耦,模块间解耦的核心是模块间接口标准化(比如,文件接口,消息接口)。
如何看待软件在实际开发中和架构设计初衷的背离?
背离是正常的。因此需要实时纠偏。代码检视需要在项目的每轮迭代都要进行,并且每轮迭代又要留有架构优化的工作量。
检视分为:人工的代码检视,工具的代码检视(PC_Lint, Coverity, Fortify, Findbug, Infusion等)。
开发人员与流程的关系是什么?
开发人员的水平,决定了软件的上限;流程管理的水平,决定了软件的下限。
流程管理影响组织氛围,组织氛围影响技术水平提升。
一个产品为导向的公司,技术能力很难成为第一。比如:Apple,腾讯。
一个技术为导向的公司,产品体验很难成为第一。比如:Google,华为。
下图为一个较为通用的消费电子类产品的模块化设计:
通过分层和模块接口隔离,解决解耦问题。
当解决了耦合问题后,就可以用编译配置或者动态加载的方式,让一套代码支持多款产品的目的,即保证了模块化,又保证了扩展性。
当然,主流的还有其它的技术策略,比如虚拟机技术(JS,Java),Web化等。但是往往对硬件有一定的要求,如果我们硬件的内存足够多,当然没有问题,毕竟用Java写代码,代码稳定性会容易的多。
搞定了软件架构的问题,后面就是工作效率提升的工具链开发,下图为一个示例:
解决了开发测试部署的工具链,实现每年上千个定制版本不是梦。
网友评论