对于任何大型项目,即使我打算自己做整个事情,我也要计划好象涉及多个开发人员。
原因很简单:
1复杂性。大型项目总是会涉及复杂性。计划该项目就好象涉及多个团队一样,这意味着已经考虑并记录了复杂性。我看到大型项目遇到问题的次数很高,通常是因为某些事情“从裂缝中溜走了”。别忘了还必须考虑机械组装,而不仅仅是考虑盒子的尺寸-是否需要散热器?为了安全起见,盒子必须接地吗?仅此类别中就有很多问题。
2要求。假设涉及到多个人,则意味着最高要求(我经常挑战这些要求,因为它们可能带来不必要的复杂性和成本)必须分解为各种较小的所需和可实现的任务(可以将其提交给较大组织中的另一个团队),而不是只看一个斑点。
3分区。有两种主要的分区类型:硬件功能和硬件/软件。第一种类型是确定需要提供哪些单独的(但正在通信)功能块。第二个是权衡较简单(有时)的硬件和软件,但请记住,仅将更多内容移至软件并不一定能解决硬件问题。在某些情况下(更多的处理能力,更复杂的接口等等),将更多的精力投入到软件中实际上可以大大增加硬件的复杂性。
4个接口。分区过程将有助于定义内部接口;外部接口通常是整体要求的一部分(尽管并非总是如此)。系统的不同部分可以通过多种方式进行协作,这可能是复杂的通信协议,也可能只是好/坏的信令。
5验证。这是低级别测试(针对硬件和驱动程序)和系统级别的混合。在定义明确的模块中完成项目可以进行可靠的验证(可以通过分析或实际测试,并且通常是两者的结合;对设计的更新可能使用相似性参数)。
6个标准。我使用编码和绘图标准,好像它是一个更大的团队。我使用Barr Group的编码标准,因为它们不太繁琐,但确实可以防止代码中出现许多类的错误。对于PCB输出文档,我遵循IPC-D-326(其称为IPC-D-325),因为这是一种将意图传达给PCB制造商和组装商的行之有效的方法。这看起来很奇怪,但是遵循纪律遵循许多标准意味着质量是一致的。
7版本控制。我将修订控制用于项目的所有部分(系统,硬件,软件,机械,测试要求-一切)。我使用的CAD工具支持所有软件和FPGA构建工具的版本控制。
我从事过许多嵌入式项目(周围有很多经验丰富的人),团队规模从1个(我自己)到数十个(或一组特定项目的数百个)不等,涉及多个学科,有时在地理位置上也很遥远网站。使用相同的总体方法(已知有效)意味着我可以相对隔离地接管特定任务并完成它,并作为较大项目的独立部分对其进行彻底测试。这也意味着如有必要,我有时可以将一些事情排除在外。
完成所有这些操作会增加一些前期时间,但最终对于复杂的嵌入式系统而言,这是一条更快的途径。