一个不过百行的程序导致多花费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的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估