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

相关文章

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、