2

随着越来越多的努力将软件分成独立的层并使用动态发现和依赖注入将它们解耦,确定系统中的哪个“层”导致“应用程序”的系统范围故障变得越来越困难。

单元测试通过确保构成一个层的所有“模块”按预期工作来提供帮助。但是单元测试的编写方式是通过使用诸如存根和模拟之类的技术来隔离每个“模块”。

考虑下面的简单示例:

L1。数据库-> L2。数据库层-> L3。Windows 服务 -> L4。客户端应用程序

例如,如果数据库引擎关闭,则系统将无法正常运行。很难判断数据库引擎是否真的停机或数据库层 (L2) 代码中是否存在错误。要检查,您必须启动某种数据库管理工具来检查数据库引擎是否正在运行。

我们试图实现的是一个开发者工具,可以在系统“出现问题”时启动,该工具将“查询”每一层的“完整性”或“诊断”数据。该工具将提供软件层列表及其“完整性状态”。然后它将能够立即说,X 层是问题的原因(即数据库引擎已关闭)。

当然,每一层都将负责提供自己的“诊断方法”,该工具可以查询。

我想我们在这里试图实现的是某种“集成测试”框架或可以在运行时使用的类似框架(而不是像单元测试那样的编译/构建时间)。灵感来自拥有自己的“车载诊断”的物理设备,如汽车。软件领域的一个很好的例子是每次打开计算机时都会运行的开机自检。

有没有人看到或听到过这样的事情?任何建议或指示肯定会有很大帮助!

4

1 回答 1

0

您可以有一个公共接口,每个层都将作为 WCF 服务实现。通过这种方式,您可以连接到每一层并对其进行诊断。提供此诊断可能很有用,但如果您想在任何地方(每一层)实现它,那将是另一件事可能会失败 - 您将如何诊断?您的系统会充斥着 WCF 服务,这并不好,因为它需要大量维护并且不太稳定。此外,它需要大量的工作来实施。

我建议的替代方法是建立一个良好的日志记录系统。最低要求是让每个模块在所有catch部分中都记录一个错误,但我建议更多,尤其是出于调试目的。我推荐使用免费且非常灵活的 Log4Net。它在不需要时不记录是有效的,这意味着您可以将记录级别设置为高,即使在生产代码中也不会影响性能。您可以在运行时通过更改配置文件中的设置来更改日志记录级别。我经常使用 Log4Net,它运行良好。

一旦你有了你的代码日志记录,你就可以配置 Log4Net,以便所有日志都进入一个中央数据库。然后,您将有一个地方可以相对容易地诊断发生了什么,发生了什么失败,异常或消息在哪里以及是什么。您甚至可以设置在出现问题时发送电子邮件。

于 2012-07-05T17:37:57.287 回答