我已经进入嵌入式领域一段时间了,似乎我与之交谈的大多数程序员似乎都在做与15年或更久前相同的事情:Waterfall(ish)开发,命令行工具一小群人使用棉绒.
将其与服务器/桌面环境进行对比,其中似乎有许多与编程的各种方面相关的活动:
XP,Scrum,Iterative,Lean/Agile
持续集成
自动构建
自动化单元测试框架
重构工具支持
只是嵌入式环境使实施新实践或工具变得更加困难吗?
是嵌入式程序员的思维方式让他们远离新的工具/概念吗?
与IT专注领域相比,典型嵌入式行业的管理是否落后于曲线?
我确实认识到这是一种概括,一些嵌入式项目确实使用了Scrum,Agile,CI,Automated Builds(实际上我在一家自80年代开始实施的公司工作).但我的印象是它只是一个很小的比例.
我们都习惯了这样一个事实:我们的台式机偶尔会崩溃(或者至少台式机上的应用程序突然消失).这没什么大不了的.下一个补丁将修复它.
在嵌入式空间中,您正在构建无法修补的内容.生命可能取决于您的设备(在汽车,电梯或医疗系统中).大多数设备都已安装,然后必须无人值守多年.因此,嵌入式人员往往非常保守.TCP/IP通常"太现代".他们坚持使用可靠的串行总线,通信"堆栈"大约有50行汇编代码.
更糟糕的是,你只是没有足够的空间设备,这意味着你不能使用最新的编程语言之一,使TDD和自动化建立一个幸福.
接下来,许多嵌入式开发环境都是专有的.如果您的供应商不支持它,您将无法获得它.Linux在过去几年开始削弱它,但是很多设备还不足以运行Linux.即使它们是这样,CPU功率也将被用于其他东西而不是运行带有源的花哨操作系统.
所以,是的,有强大的力量在后台工作,以保持嵌入空间的位置.
嵌入式开发人员是否比桌面开发人员更保守?
是的,因为他们更关心犯错误的后果.修补嵌入式设备是一件大事.与桌面应用程序不同.
瀑布式开发在嵌入式领域是必要的,因为您通常在与软件同时构建硬件.你需要尽快知道多少内存,多少处理器速度,闪存大小,如果需要任何特殊硬件等等......硬件设计无法完成,直到你知道这些答案.一旦你决定,那就是它.重做电路板的交付时间太长了.如果你陷入困境,那么软件将不得不解决任何缺点.通常不是理想的情况.
至于工具,这主要取决于供应商提供的内容以及开发人员的任何偏见.在某些项目中,我使用了XP Embedded,并获得了桌面开发人员获得的所有内容.
XP,Scrum,Iterative,Lean/Agile:
由于大多数设计是预先完成的(必要时),并且在编码时通常没有工作硬件,因此快速周转流程并没有真正提供太多好处.
持续集成/自动构建 很好,但并非真正必要.什么......打开IDE并按下编译按钮大约需要15秒.
自动化单元测试
没有理由不应该这样做,但只有部分代码可以真正自动测试,因为另一部分要么依赖于硬件,要么具有其他依赖性,如时序.所以你无法确定代码是否通过自动化测试工作.
重构工具支持
嵌入式处理器产品的供应商是处理器.它们提供IDE支持以鼓励您购买处理器.他们无法支付Visual Studio规模的开发团队的费用,以便为IDE添加所有的花里胡哨,甚至不是他们的产品.
我能想到的一些原因:
嵌入式团队通常比桌面/ Web团队小.代码库较小.
系统测试比单元测试重要得多.该软件需要与硬件一起进行测试.自动化测试是不可能的,只能应用于代码库的一小部分.
嵌入式工程师的技能与软件工程师不同.它们与硬件交互,知道如何使用示波器和逻辑分析仪.通常,他们工作的困难部分是在硬件中发现故障.他们没有时间采用现代软件方法.