一个老项目,差不多十年了,没有文档。 代码极其混乱,很多不用的东西在里面,现在想梳理整个代码,有没有什么比较好的方法? 这个项目是基于jsp+javabean的方式开发的,好像AOP那一套不行。最好是有什么工具,能通过一定时间的日志,检测到哪些jsp被访问(这个好像服务器本身可以提供),重要的是调用了哪些类以及类的哪些方法,除此之外,到了方法这一层,还需要进一步明确,因为有些方法的代码非常大,几万行,还需要在方法级别定位哪些分支在执行。
解决方案 »
- 像这种带方框的评论模块怎么实现?专门的JQuery?
- 将sql语句中的变量名转成值
- 将Tomcat设置为Window服务,该如何设置呢?
- 域名到多台Web服务器
- JSF Datatable 显示 ResultSetDataModel 对象,如何点选单条记录显示详情
- 想做个论坛玩,表示层该采用FrameSet还是Struts Tiles?
- 【急问】JfreeChart 该如何配置? 下面报错了!请进入帮忙看看!
- hibernate中对oracle raw数据类型的配置
- 求jdbc,用于sql2000server,100分
- 从概念角度, 请简述性总结一下字符集问题, 或者修改我的总结(我的总结是错误的), 非常非常非常谢谢;
- 求大神指导毕业设计基于web的校友交流平台,Java+struts2+SQL server
- 使用自己的页面,实现他人网站的注册功能
1、写测试用例基本上不大现实,因为系统本身有多少功能,基本上没有人说得清楚;
2、系统是公司非常核心的一个系统,而且现在还需求不断,不能对业务造成影响;现在完全是打补丁的方式往上加,已有的代码不敢轻易修改删除,而且比较牛B的是,系统运行还是好好的,比较顺畅,但想实现新需求、修改原来的bug是极其痛苦。
filter把所有的请求输出到log里
针对这个项目再来一遍黑盒测试
然后就统计log吧
这些都是用于测试覆盖率的,对于这个项目而言,写测试用例基本上是不太可行的。
1、基于JSP+javabean开发,很多代码写在jsp页面上;
2、具体的项目有什么功能,没有人能说清楚的;
3、业务是非常复杂的,而且业务需求是不断的过来,天天往上加;目前看来,只能根据url日志先看哪些jsp被访问,然后再分析每个jsp页面的代码进行人工判断。对于class可以通过jmap导出jvm堆图看哪些类被加载了。郁闷
这是一个业务很复杂的系统,就算是做黒盒测试,也没有办法把所有的业务场景测试到,因为经过这么多年的发展,人来人往,没有人能说得清楚了。
统计到哪些jsp被访问不难,weblogic本身提供这样的日志记录,哪些类有用,通过jmap导出堆图也应该可以,但到了类之后,就不好处理了,一是没办法清楚哪些方法被调用,二是没办法清楚哪个比较大的方法的哪部分代码被调用
1、写测试用例基本上不大现实,因为系统本身有多少功能,基本上没有人说得清楚;
2、系统是公司非常核心的一个系统,而且现在还需求不断,不能对业务造成影响;现在完全是打补丁的方式往上加,已有的代码不敢轻易修改删除,而且比较牛B的是,系统运行还是好好的,比较顺畅,但想实现新需求、修改原来的bug是极其痛苦。
----------------------------------------------------------------------------------
1、你的这种情形,正是《重构-改善既有代码的设计》这本书,能大派上用场的时候呢?绝对的没错!
2、有点不大理解的地方是:系统运行的好好的,怎么就不能写测试用例呢?这不正好么?
1、写测试用例基本上不大现实,因为系统本身有多少功能,基本上没有人说得清楚;
2、系统是公司非常核心的一个系统,而且现在还需求不断,不能对业务造成影响;现在完全是打补丁的方式往上加,已有的代码不敢轻易修改删除,而且比较牛B的是,系统运行还是好好的,比较顺畅,但想实现新需求、修改原来的bug是极其痛苦。
----------------------------------------------------------------------------------
1、你的这种情形,正是《重构-改善既有代码的设计》这本书,能大派上用场的时候呢?绝对的没错!
2、有点不大理解的地方是:系统运行的好好的,怎么就不能写测试用例呢?这不正好么?
写测试用例,你得清楚你的输入和输出,用户和开发人员对里面的业务都不清楚了,如何写?
另外,很多业务逻辑是写在jsp中,这部分如何写测试用例?没有java类,都是在jsp中包括java代码来写的。
在分析日志文件,获取调用频率等信息。
public aspect World {
pointcut greeting() : execution(* *.*(..)); after() returning() : greeting() {
System.out.println(" World!123");
}
}如何在这个greeting()中获取运行的类和方法名称??
import org.apache.log4j.*;
import org.aspectj.lang.Signature;public aspect World {
pointcut greeting() : execution(* *.*(..))&&!within(World); //&&避免死循环 before() :greeting() {
Signature sig = thisJoinPointStaticPart.getSignature();
Logger log = Logger.getLogger("aspectj");
log.info(sig.getDeclaringType().getName() + "[" + sig.getName()+"]");
}
}
,目前还有一个问题就是,目前CVS上的代码与项目上的CLASS不能确定是否完全一致,如果把项目生产环境的全部反编译,是否会存在问题不好确定。 想到的一个方案是将当前的源文件编译后与生产上的CLASS进行比较大小,但因为编译环境不同(主要是jdk版本以及32位64位问题),可能会存在同样的代码编译后的结果大小不一样,如果同样的代码在不同的情况下编译出来的不一样,那问题可就有点麻烦了。