标签: legacy-code

编码Katas实践遗留代码的重构

最近几个月我对编码katas很感兴趣.我相信它们是磨练我的编程技巧和提高我在工作中编写的代码质量的好方法.

Katas可以在很多地方找到.喜欢..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

我发现这些是Katas的优秀资料库......我对其中一些人的尝试得到了极大的回报.

但是,我觉得到目前为止我见过的所有卡塔都有一个短暂的来临.他们似乎都不允许我练习重构坏代码.第一次学习如何编写干净的代码真是太棒了...但在我目前的工作中,我没有太多机会编写新代码.相反,我经常与遗留代码作斗争并试图弄清楚如何重构模块,消除依赖关系并减少耦合.

因此,我正在寻找一些可以用来磨练我重构遗留代码并将其转换为干净代码的技能的Katas.

有谁知道任何已存在的?我知道我在工作的时候会接受很多练习...但是我想磨练自己的技能,以便能够快速地看到如何分离依赖关系,并在课堂上分离关注点做得太多了.

refactoring legacy-code

119
推荐指数
3
解决办法
1万
查看次数

为什么将 free 的返回值转换为 void?

我正在阅读一本使用 C的书(Butenhof 的POSIX 线程编程,1997 年),我遇到了以下行:

(void)free(data);
Run Code Online (Sandbox Code Playgroud)

这里,data只是一个指向已分配结构的指针,

data = malloc(sizeof(my_struct_t));
Run Code Online (Sandbox Code Playgroud)

为什么是free被强制转换的结果void

根据我对 C 的理解,这似乎没有意义,原因有两个:

  • free 函数已经返回 void
  • 代码没有使用返回值(它甚至没有被分配给一个变量)

这本书写于 1997 年。这是某种遗产吗?

作者提到这些示例是在 Digital Unix 4.0d 上运行的,但如果您不打算使用该结果,我仍然无法想象有理由强制转换该函数的结果。

c free casting legacy-code void

84
推荐指数
3
解决办法
7053
查看次数

将单元测试添加到遗留代码

事实上,您是否曾将旧单元测试添加到遗留代码中?代码有多复杂,存根和模拟一切有多难?最终结果值得吗?

unit-testing legacy-code

77
推荐指数
7
解决办法
2万
查看次数

熟悉大型代码库的最佳方法是什么?

加入已经存在大型代码库的现有团队可能会令人生畏.什么是最好的方法;

  • 宽; 尝试从代码中全面了解所有内容如何链接在一起
  • 狭窄; 一次关注一小部分代码,了解它们如何完全工作
  • 选择一项功能,随着您的发展和学习
  • 尝试从类图和uml中获取洞察力(如果有的话)(并且是最新的)
  • 还有别的吗?

我正在研究目前大约20k行的C++应用程序和库(编辑:在宏观方案中很小!).在工业界,我想你会得到一位经验丰富的程序员的介绍.但是,如果不是这种情况,您可以做些什么来尽快开始增值?

-
答案摘要:

  • 在调试模式中逐步执行代码以查看其工作原理
  • 与比你更熟悉代码库的人配对,轮流成为编码人员和观看/讨论的人.在团队成员之间轮换合作伙伴,以便知识得到传播.
  • 写单元测试.首先断言您认为代码的工作方式.如果结果如你所愿,你可能已经理解了代码.如果没有,你有一个难题要解决,或者要进行调查.(谢谢Donal,这是一个很好的答案)
  • 以与上面类似的方式,通过现有的功能代码单元测试
  • 阅读UML,Doxygen生成的类图和其他文档,以获得对代码的广泛感受.
  • 进行小编辑或错误修复,然后逐步建立
  • 记下笔记,不要跳进去开始开发; 花时间理解比生成凌乱或不合适的代码更有价值.

这篇文章是一个部分重复的 - 最好的方式 - 熟悉自己与继承的代码库

legacy legacy-code codebase

73
推荐指数
7
解决办法
1万
查看次数

传统C/C++项目中的死代码检测

您如何在C/C++代码中进行死代码检测?我有一个非常大的代码库可供使用,至少10-15%是死代码.有没有基于Unix的工具来识别这个区域?有些代码仍然使用了很多预处理器,可以自动化处理吗?

c++ automation static-analysis legacy-code dead-code

68
推荐指数
5
解决办法
3万
查看次数

您如何处理对提高质量影响最大的遗留代码库?

当您在遗留代码库中工作时,随着时间的推移会产生哪些影响,从而提高代码库的质量?

  • 删除未使用的代码
  • 删除重复的代码
  • 添加单元测试以改善覆盖率低的测试覆盖率
  • 跨文件创建一致的格式
  • 更新第三方软件
  • 减少静态分析工具(即.Findbugs)生成的警告

代码库是由许多开发人员编写的,他们多年来具有不同的专业知识水平,许多领域未经测试,有些领域不可测试,而且没有花费大量时间编写测试.

legacy refactoring legacy-code

39
推荐指数
4
解决办法
3657
查看次数

有关使用遗留代码的建议

我需要一些关于如何使用遗留代码的建议.

不久前,我被赋予了向报告应用添加一些报告的任务.早在2005年就用Struts 1编写了.没什么大不了的,但是代码非常混乱.没有使用Action表单,基本上代码是一个巨大的动作,里面有很多if-else语句.此外,这里没有人具备这方面的功能知识.我们碰巧在我们的合同中有它.

我对此非常不满意,不知道如何继续.这个应用程序是看不见的:很少有人(但都非常重要)使用它,所以他们在阅读代码,标准等时不关心我的眼睛是否流血.

但是,我认为应该支付技术债务.我该怎么办呢?继续沿if-else道路前进,或者尝试以正确的方式执行此要求,忽略项目的其余部分?开始一个巨大的重构,冒着我的最后期限?

refactoring legacy-code

37
推荐指数
2
解决办法
6751
查看次数

在Windows 7/8/10上安装VB6

可能重复:
在Windows 7上有没有人在Visual Studio 6上取得成功?
VB6 IDE是否在Windows 7 64位上运行?

我在Windows 7上安装VB6时遇到了问题.我发现它是一个传统的IDE,我在网上的研究并没有那么大的帮助.每次我尝试在Windows 7上安装VB6时,除了通知我兼容性问题的警报外,安装程序会在接近结束时运行并失败,安装过程最终会失败.当进行另一次尝试时,某些dll文件可能无法访问.

这些只是我访问过的一些链接,希望获得解决方案,甚至只看到一些面包屑:
- 如何在Windows 7上安装VB6
- 在Windows 7 64位上安装VB6

在有人说,"为什么在Microsoft Windows Visual Studio的新版本出现时,你为什么要在Windows 7上安装VB6",VB6仍然需要维护和更新现有的遗留系统.

那么问题是,有没有办法在Windows 7上安装VB6而没有兼容性问题?是否更好的安装虚拟盒并在XP中运行VB6 IDE?还是有其他一些我没有遇到的方法可能适用于这种困境?

谢谢和亲切的问候,

克雷格

vb6 legacy installation legacy-code windows-7

34
推荐指数
2
解决办法
21万
查看次数

PHP中的死代码检测

我有一个代码非常混乱的项目 - 这里和那里有很多重复和死代码.

前一段时间单元测试的代码覆盖率为零,但现在我们尝试以TDD方式编写所有新代码,并通过单元测试覆盖"旧"代码来降低技术债务(测试最后技术).

业务逻辑的复杂性非常高,有时候没有人可以回答是否使用了某些方法.

如何找到这种死代码方法?广泛的伐木?更高的测试覆盖率?(这不是很容易,因为客户想要新的功能出来)

php refactoring code-coverage legacy-code

33
推荐指数
2
解决办法
1万
查看次数

在大型Java堆转储中查找内存泄漏的方法

我必须在Java应用程序中发现内存泄漏.我对此有一些经验,但希望就此采用方法/策略方面的建议.欢迎任何参考和建议.

关于我们的情况:

  1. 堆转储大于1 GB
  2. 我们有5次堆转储.
  3. 我们没有任何测试案例来激发这一点.它仅在至少一周使用后发生在(大规模)系统测试环境中.
  4. 该系统建立在内部开发的遗留框架之上,存在许多设计缺陷,无法统计它们.
  5. 没有人深入理解框架.它已被转移到印度的一个人,他几乎没有跟上回复电子邮件.
  6. 我们已经完成了快照堆转储,并得出结论,没有一个组件随着时间的推移而增加.一切都在慢慢增长.
  7. 以上指出了我们的框架是本土的ORM系统,它可以无限制地增加其使用.(这个系统将对象映射到文件?!所以不是真正的ORM)

问题: 帮助您成功捕获企业级应用程序中的泄漏的方法是什么?

java enterprise methodology memory-leaks legacy-code

29
推荐指数
3
解决办法
3万
查看次数