我继承了一个没有单元测试的遗留Web应用程序.我想补充一些,但我不知道从哪里开始.我应该将它们添加到旧代码中吗?或者只是新的代码?如果该代码与遗留代码交互怎么办?你会建议什么?
我们在工作中遇到大量遗留存储过程的问题.你们推荐任何可以帮助你更好地理解这些程序的工具吗?某种逆向工程,它识别过程间依赖性和/或过程与表依赖性.可以是免费或商业工具.
谢谢!
注意:这个问题已经过广泛编辑,以使其更具相关性,为了完整性,最后保留原始问题.
在构建新的iOS应用程序时,应该使用哪种策略来确定要支持的操作系统版本?支持传统操作系统版本有哪些实际考虑因素.是否有可靠的统计数据来支持丢弃遗留支持的业务案例?
如果我构建一个新的iOS应用程序,我应该支持5.0之前的iOS版本,还是不再需要?有关iOS 5.0采用率的可靠和最新数据吗?
我正在使用Visual Studio 2012来开发我的项目,我也安装了Visual Studio 2010 - 这使我可以选择在Visual Studio 2012中使用VC++ 10编译器(项目属性),但我也安装了Visual C++ 6并且在某种程度上Visual Studio 2012中不存在使用VC++ 6编译器的选项,如何添加此选项(手动)?
什么是最好的,最好是用于自动生成Java单元测试的免费/开源工具?我知道,单元测试实际上不能用于记录和驱动系统设计的普通TDD单元测试.但是,如果您拥有庞大的遗留代码库并想知道您需要进行的更改是否会产生不必要的,模糊的副作用,则自动生成的单元测试非常有用.
列出所有可用的.NET 2.0程序集的最佳方法是什么?
所需列表的一个示例是当您在.NET选项卡中执行"添加引用..."时,MS Visual Studio会显示一个.
我读过Visual Studio使用自己的目录配置和GAC另一个和.NET安装另一个.有关如何以计算机可移植方式知道此目录的位置的任何想法(例如,另一台计算机可能在D:驱动器中安装了Windows)?
从列出的信息来看,它必须是Assembly.Loadxxxx()它.
注意:它应该以编程方式完成,而不是使用gacutil(例如,除非它提供了C#API).所有这一切的目的是创建一个自定义动态脚本编辑器,以便您了解获取此信息的必要性.
我目前正在使用由另一个部门开发的框架作为基础开发的项目.我们目前正在我们的部门引入质量标准(最后,yay!),但目前无法将这些标准引入其他部门.因此,我们正在努力对抗一个持续不断移动的目标,既没有API稳定性,也没有稳定的释放,这至少是一种压力.
由于我们首先尝试解决问题,因此我们希望确保自己能够抵御"上游"即框架代码的变化.我们设想了硬模块依赖:
到目前为止,这是计划.现在的问题是:
use Module我们只能定义应该使用的最低版本代码.我需要将我的数据库容器与我的服务器容器连接.现在我只是简单介绍遗留参数--link,它完美无缺
$> docker run -d -P --name rethinkdb1 rethinkdb
$> docker run -d --link rethinkdb:db my-server
Run Code Online (Sandbox Code Playgroud)
但是,如果这个参数最终会被删除,我该怎么办呢?
以下是Grunt文件中livereload块的样子:
livereload: {
options: {
open: true,
middleware: function(connect, options, middleware) {
var optBase = typeof options.base === "string"
? [options.base]
: options.base;
return [
[
require("connect-modrewrite")(["!(\\..+)$ / [L]"])
].concat(
optBase.map(function(path) { return connect.static(path); })
),
connect.static(".tmp"),
connect().use("/bower_components", connect.static("./bower_components")),
connect().use("/app/styles", connect.static("./app/styles")),
connect.static(appConfig.app)
];
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我的网址有'.' (期间),Grunt无法重新加载页面.我在我的Angular应用程序中使用HTML5模式并且工作正常.
请问我能知道哪一部分
[
require("connect-modrewrite")(["!(\\..+)$ / [L]"])
].concat(
optBase.map(function (path) { return connect.static(path); })
)
Run Code Online (Sandbox Code Playgroud)
导致它失败,我该如何解决这个问题?
注意:仅在页面重新加载时失败.我第一次访问它工作的路线,然后如果我点击刷新它失败.
自从我使用java遗留代码以来,这是几个月,这是我正在处理的一些事情:
一开始我很困惑,我发现很难在遗产中使用TDD.在做了几周的katas并练习我的单元测试和嘲讽技巧之后,我的恐惧感降低了,我感到更加自信.最近我发现了一本书:有效地使用遗产,我没有看过它,我只是看了一下目录,我发现了一些对我来说很新的东西,The Seams.显然,这在遗产工作中非常重要.
我认为这个Seams可以帮助我打破依赖关系并使我的代码可以测试,这样我就可以增加代码覆盖率并使我的单元测试更精确.
但我有很多疑惑:
下面我想粘贴一个我今天做的例子,我试图打破一个依赖,目的是使代码可以测试,最后增加测试覆盖率.如果你看到一些错误,如果你能评论一下,我将不胜感激?
这就是遗留代码在开始时的样子:
public class ABitOfLegacy
{
private String sampleTitle;
String output;
public void doSomeProcessing(HttpServletRequest request) {
String [] values = request.getParameterValues(sampleTitle);
if (values != null && values.length > 0)
{
output = sampleTitle + new Date().toString() + values[0];
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我只是添加一个调用该方法并断言该变量输出的单元测试,在调用后有一定的值,那么我会犯一个错误,因为我不是单元测试,我会做集成测试.所以我需要做的是,摆脱我在参数中的依赖.为此,我用接口替换参数:
public class ABitOfLegacy
{
private String sampleTitle;
String output;
public void doSomeProcessing(ParameterSource request) {
String [] values = request.getParameters(sampleTitle);
if (values != null && …Run Code Online (Sandbox Code Playgroud) legacy ×10
unit-testing ×3
.net ×2
java ×2
angular ×1
asp.net ×1
assemblies ×1
compilation ×1
database ×1
dependencies ×1
docker ×1
gruntjs ×1
ios ×1
javascript ×1
module ×1
perl ×1
tdd ×1
visual-c++-6 ×1