一个不过百行的程序导致多花费2天时间的原因剖析

2024-04-17 21:58

本文主要是介绍一个不过百行的程序导致多花费2天时间的原因剖析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

---一年前,2003年12月,写的总结----

在AE开发Group Permission Inherits 单元测试(Junit4)代码时,发现的问题以及解决方案:
1.写的junit test code在Eclipse中能通过,但在命令行的ant test中不能通过。最后重写了junit test code (由于没有预计到这一问题,导致多花费了4小时:重写测试代码,去掉继承与抽象类)。
2.在Eclipse中把测试资源(src/test/resources)会编译到classpath下,而ant脚本却不编译,提交代码后导致build失败。问题分析与定位花费3小时(仔细阅读ANT脚本和Ecllipse工程buildpath设定),重写code花费10分钟,重新测试10分钟。总计多花费近3个半小时。
3.由于没有理解用户登录过程和我们的代码流程,导致代码不正确。发现这一问题并想到原因所在和弄清楚登录过程和代码的处理的关系导致多花费4小时。
4.没有理解junit4的@Before @BeforeClass @After @AfterClass导致代码丑陋和重构多花费2小时(1个小时看junit4的文档,1个小时重写code)
5.没有理解derby数据库的原理和AE使用它的机制导致多花费4小时。(之后仔细阅读Derby文档,研读例子程序,并写程序验证它的使用)

问题总结:
自己的问题:
1.注意Eclipse中测试代码运行行为和命令行build命令运行测试代码的行为应保持一致。在Eclipse中跑完后,再在CLI 跑ant test来看效果。
2.对于自己似是而非的问题一定要彻底弄懂,比如junit @Before @BeforeClass 
3.误以为自己看一眼derby就知道怎么用,其实没有真正理解,比如为什么嵌入式Derby不能被两个程序同时访问,derby.system.home的意义。
4.测试要保持独立性,把以前遗数据清空后再测试,这个跟3有关系。
5.没有理解用户登录流程和我们的代码处理逻辑。
6.沟通需要加强,对自己模糊的问题要打破砂锅问到底

项目中的问题:
1.build脚本应该考虑到测试资源的编译问题
2.build脚本应该和开发工具的运行结果一致
3.应该有设计文档和需求文档,以帮助开发者快速理解其工作内容

项目中未来改进点:
1.完善build脚本,要考虑测试资源的编译问题。
2.团队间加强沟通。定期举办心得体会,经验交流,陷阱与规避,开发注意事项等交流。

---- 一年后,2014年1月份,对一年前的这篇总结的反思---
1.对于问题1的原因是什么,总结没有说清楚。 在开发工具中能通过的case在命令行中不能通过,应该说跟代码关系不大,即使改代码也应该最多改一两行代码,不至于重写全部代码,并去掉继承和抽象等的面向对象特性。 一定是根本原因没找对,或者方案不够好,需进一步思考:真的需要改这么大么?
2. 既然你在开发工具中设定将测试资源编译到classpath中, 那么应检查ant脚本是否也考虑到这一点,不可想当然。
 1和2本质是同一个问题引起的,测试资源未编译到classpath下,导致本地的命令行 ant test 不能通过。在没有意识到这个问题的前提下,在开发工具中运行test case通过后,就将代码签入到代码库后,又导致了问题2的产生。
3.磨刀不误砍柴工,在用某个工具或技术前把它的原理,基本概念等弄清楚是很重要的。这些上多花费3小时,但可为你节省18个小时的返工和改错。


这篇关于一个不过百行的程序导致多花费2天时间的原因剖析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912957

相关文章

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各