正如人们通常很快指出的那样,软件的好处之一是,与硬件相比,它应该很容易而且相对便宜。当您后来才意识到自己犯了根本错误时,这一点尤其重要。对硬件进行同样的操作,您将损失一百万美元,因此,正如您所说的,您使用了模拟器等,并从中测试了bazinga。我认为这是您转向软件时范式失败的地方。
进入一般的软件开发人员的头脑,您所拥有的是一个非常忙碌的人,而且期限非常紧迫。他的经理说,可以保留一些错误,因为您以后可以随时对其进行修复。测试通常是事后才想到的,但是即使在测试驱动的情况下,测试也保持最少,而代码却被最小化,并且经常采用捷径,从而可能会遗漏许多边界情况。该系统可能已进行了彻底的单元测试,但很少作为一个整体进行严格的测试,并且很少对压力进行任何程度的测试。此外,您是从头开始编写软件,并且在承诺编写软件之前几乎没有机会模拟该软件,这主要是因为我们很少使用与硬件中相同的细粒度构建块来编写软件。
回到OP的问题。您能否定义一个构建基块系统,从中可以衍生出所有软件?可能吧 会非常划算吗?可能不是,因为到那时您就开始开发足够强大的组件,测试和其他设备系统,以支持这一理想编程系统,您会发现自己的竞争已经将您击败了市场,甚至更糟糕的是,从普通程序员的角度来看,您可能会发现“千篇一律”的编程系统风格非常有限,而且很有可能无聊。我个人使用API,其中大部分模块代码已经完全完善和标准化,因此我现在要做的就是生成代码模板并填充空白。我的大部分时间都花在编写简单的连接器代码上,并尽可能快地将模块推出市场。这真是令人麻木。除了重复编写相同类型的事情外,几乎没有什么机会做更多的事情,因此,当另一个项目机会出现时,我抓住了能够做其他任何事情的机会。
那么,您如何才能交付高质量和完善的软件,却又真正享受其中的乐趣呢?我认为这取决于您选择的工具和方法。对我来说,答案是使用良好的BDD API,因为它使我能够创建非常易于阅读但高度粒度的代码。我可以使用最少的可重用方法构建一套测试,并以规范的语言描述我的测试。这样,除了我负责设计和检查构件之外,我接近于一种更加组件化的开发方法。另外,测试输出可精确指出测试中发生故障的确切部分,因此我不必猜测故障是在设置中还是在断言中。
调整方法也有帮助。我是应用精益开发原则的坚定拥护者,并将其与敏捷运动多年来一直在努力的其他许多技术和原则相结合。消除了我过去常常感到沮丧的大多数浪费做法,这极大地帮助了开发工作变得更加愉快。我仍然遇到有时(但希望不是很频繁)错误出现在我的代码中的问题,但是我现在发现自己有更多的时间,甚至有更多的动力去花更多的时间编写更强大的测试,并针对100测试覆盖率百分比。更好的是,看到所有这些绿灯都在我一天结束时感觉真好,