一个不过百行的程序导致多花费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

相关文章

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r