我的工作流程一直是编写一个逻辑步骤,然后运行程序并检查输出。这个过程非常适合我在大学中的作业。但是,随着我进行更多的开发,通常仅编译和运行代码就需要1-2分钟的时间。示例包括将程序上载到微控制器,需要与外部服务器进行交互以及由于身份验证,软件体系结构或复杂性而无法实现自动化。
这些类型的任务非常不适合我通常的编程方式,并且我在有效编码方面遇到困难。我通常会犯很多语法错误和逻辑错误,其中大部分我很容易通过测试发现。但是,由于等待时间如此长,因此此方法非常耗时。
我的工作流程一直是编写一个逻辑步骤,然后运行程序并检查输出。这个过程非常适合我在大学中的作业。但是,随着我进行更多的开发,通常仅编译和运行代码就需要1-2分钟的时间。示例包括将程序上载到微控制器,需要与外部服务器进行交互以及由于身份验证,软件体系结构或复杂性而无法实现自动化。
这些类型的任务非常不适合我通常的编程方式,并且我在有效编码方面遇到困难。我通常会犯很多语法错误和逻辑错误,其中大部分我很容易通过测试发现。但是,由于等待时间如此长,因此此方法非常耗时。
Answers:
我会努力减少测试时间。我曾在几家公司工作,开发嵌入式代码,并且测试很痛苦,需要到服务器机房旅行,手动FTP和重新启动以及对测试硬件的多个命令。然后,我加入了一个非常出色的小组,在那里我可以在办公桌上简单地输入“ make test”,然后在一分钟内得到结果。在那一分钟内:
所有这些工作都花了一些时间,但是随着开发人员的增加,使所有这些步骤自动化的努力被收回了一百倍。
您已经给出了答案: I usually make a lot of syntax errors and logic errors
因此,努力改进它,您应该能够减少测试时间。应该首先减少语法错误。您的学习中从来没有用纸和铅笔进行编程测试吗?
从PHP切换到Java时,我遇到了同样的事情。我必须学习调试,而不仅仅是打印一些变量并在浏览器中按F5键。
make a lot of
听起来像他应该投入自己的精力来改善它时
您需要一个良好的单元或功能测试平台,可以自动为您运行测试,最好是在后台运行。这将需要使用上述Mocks,并取决于您使用某种依赖注入的语言。
通过使对象尽可能独立,然后使用注入方法添加外部约束,为代码创建测试平台并不困难。
当您只是因为愤怒而无法测试代码时,真正的乐趣就来了。在交易系统中,这种情况经常发生,因为可用的交易模拟器通常要么很差,根本不存在,要么甚至不符合交易软件供应商所说的那样。恐怕这是生活丰富的挂毯的一部分。我的方法是确保交易的至少我这一边写得好并且有据可查,以便可以轻松快速地进行更改。
单元测试;模拟应用程序/模拟器。
理所当然,这需要时间,您可能需要收集并整理样本数据以创建适当的模型,但最终会获得回报:您将节省所有时间,并在尝试进行外部测试时遇到麻烦系统。
正确使用这些工具将确保在您前往外部系统附近之前,您有99.9%的把握确保如果代码失败,则是导致外部系统/环境变化的原因,而不是您自己的代码中的错误。
我很专业地工作了一段时间,就像他们在学校所做的那样,而且在许多情况下,它非常有效。最终,我在某些人的帮助下工作,这些人迫使我放弃了这种方法,而改用单元测试和模型。
现在,在没有首先考虑测试阶段(单元测试,模型,模拟器,样本数据等)的实现之前,我不会开始任何项目。
我通常会犯很多语法错误和逻辑错误
也许使用Linter可以在这里有所帮助。
我以前的雇主也遇到过类似的情况。我们的代码库非常庞大,可以进行任何我必须编写的代码,进行编译,然后替换.class
开发服务器中的文件,然后使用重新启动脚本重新启动开发服务器。令我沮丧的是,大约需要半小时才能恢复开发服务器。
后来我发现远程调试开发服务器也是可行的。
所以这是我为优化流程所做的
远程调试的第一轮初始调试,这使我可以看到确切的代码流和变量的确切值/状态。
计划如何以及将进行哪些更改。
进行更改,然后比较差异
通过使用linter或通过编译来缓存错误。
通过替换.class
文件并重新启动来提供热修复。
有时我还会包含大量的日志语句,以再次检查代码流并检查值/状态。这确实对我有很大帮助。
同样,使用具有良好自动复杂性的IDE可以极大地减少错别字。
希望这可以帮助。