DVT和ADVT - 为数不多的DICOM测试工具说明AND下载

1、 前言
做DICOM研究、开发和应用的人,最头疼的就是没有充分的工具和手段来进行测试,所以无法知道自己的程序、软件是否正确,能否正确地与其他设备进行DICOM连接?连接出错的原因在哪里?改正的话该从哪里下手?实在自己搞不定的话如何寻求别人的帮助?如何向别的人正确描述自己,能够让别人正确的理解和明白你的真正问题所在?你总不能直接找到某台设备去连接和进行测试吧?事实上绝大多数人并没有这样的条件,即使有,你又怎么能保证这太机器测成功,另台机器也必然会成功呢?你又怎么能接更多的实际的设备呢?
说到底,以上问题可以汇集成一个问题:如何找到一套很好的工具来帮助自己进行DICOM的测试?这样的工具并不很多,但是还是有一些的,例如 CTN (Central Testing Nodes),这是一个基于Unix平台的开放源代码的测试包,对开发者来说可以直接用其源代码开发出自己的DICOM应用来(当然,版权或者是否能够用于商业用途这里不讨论),如果只是用来测试的,也可以找一台Unix或者Linux主机,把ctn包安装配置好,来作为测试工具。不过,很多人并不熟悉 Unix/Linux更不用说使用了。更通用的操作系统平台自然是Microsoft Windows,而windows下大家经常能听到的一个DICOM测试工具就是DVT(也有advt)的。
DICOM Validation Tool (DVT)是一个DICOM有效性测试工具,用来测试产品的DICOM兼容性。ADVT顾名思义就是Agfa提供的DICOM Validation Tool。那么ADVT和DVT的关系是什么呢?号称DVT是Agfa在其Advt 2.61版本上发展出来的一个完全免费共享的工具,目的是提供一套独立的工具,任何人都可以用来测试DICOM设备。所以二者虽然有不同,但基本上是可以通用的。DVT比ADVT多了不少扩展功能和有效法则的支持,以方便地支持DICOM标准的发展和扩展,例如它支持DICOM标准里新增加的安全相关的内容,另外DVT也提供了宏定义和更详细的信息提示。
DVT目前的最高版本是1.4(14002),可以在这里Dvt (14002)下载到关于二者的详细说明,可以参考agfa网站如下网页 http://www.agfa.com/healthcare/us/support/dicomconnectivity/ 和 DICOM Validation Tool (DVT) - Version 1.4 .

2、 介绍
DVT采用脚本方式,这样就可以让使用者通过自己定义的脚本来进行DICOM兼容性测试,它预定义了许多测试用例可以来检测不同的DICOM服务。
简单地说,DVT可以认为是一个DICOM服务类的模拟器(我称作模拟器或者虚拟机),可以当作SCU和/或SCP来用,当然,它也可以创建和检测 DICOM格式的文件。它最大的好处是可以详细地显示相关的各种信息(包括通讯、消息、错误/警告、提示、语法、数据、属性、参数等信息),通过这些信息,使用者可以找到问题所在,也可以作为学习DICOM的参考,这在极大程度上为开发测试人员提供了方便。综上所述,DVT既可以用做DICOM测试工具,也可以用做DICOM开发工具,还可以用做DICOM学习参考。
DVT的主要特性包括:
ü Data driven - tool core is independent of specific DICOM SOP Classes and Test Cases - allows future extension as the DICOM Standard evolves.
ü Capable of playing the role of SCU and SCP.
ü Generate / send and receive / validate DICOM encoded messages appropriate to the SOP Class being tested.
ü The conditions specified in DICOM are used for Module / Attribute validation where possible. During validation, when the condition cannot be evaluated logically, DVT displays the condition text to the User.
ü Provides clear test results - including a summary of errors / warnings.
ü High flexibility - access is provided to every single DICOM attribute and parameter.
ü Received image data can be stored in Media Storage Format (DICOM - part 10) or in raw Dataset Format.
ü Provides an Image(Object) Relationship Analysis for received objects.
ü Allows tests to be repeated exactly as before - regression tests to check backward compatibility issues.
ü Multi-platform support (Windows NT/2K) as Command-line and GUI applications.
ü Media File Validation.
ü Emulation for Verification, Storage and Print SOP Classes.
ü Support for TLS and SSL secure sockets.
以上内容可以从dvt附带的DvtGui.hlp帮助文件里获知。DVT软件同时也附带了PDF格式的DICOM Conformance Statement文档和使用手册。

3、 使用
我们从一个实际的例子来看看如何使用,一个DICOM接收的例子(Storage SCP),这是一个Emulator的例子
1、 系统要求
要求Windows 2000/NT操作系统/64M以上内存/100M以上剩余空间/以太网(TCP/IP网络协议)/如果你还需要测试DICOM光盘,还需要有个CD ROM驱动器
2、 安装系统
在机器上安装DVT V14002,安装完成后,应有可执行程序(.exe)、一套标准的SOP类定义文件(.DEF)和一套测试示例(.DS/.TS/.DSS),以及各种脚本和帮助文档等
3、 执行dvtgui.exe
a) 开始-)程序-》DICOM Validation Tool
b) 进入后,Session菜单-》Open-> DVT\emulators\storage\scp\test001.ses,把系统预设的Storage SCP装载进来(注:系统预设了3个emulator,分别是Storage SCU(即DICOM发送),Storage SCP(即DICOM接收)和Print SCP(模拟DICOM打印机)
c) 装载成功后,左边栏显示该模拟器的全部相关定义(.DEF)文件,你可以通过鼠标右键点击查看该文件的内容
d) 设置参数:Session菜单-》Session Properties
这里的一些基本参数,可以不用理会,主要的参数是Product Role参数,这里设置成Requester,具体什么意思和如何设置可以查看帮助,单击ACSE Properties按钮,这里是设置DICOM的通讯参数,主要是设置AE Title和端口号(local listen)。注意Called AE和Calling AE这两个AE Title分别对应对方和自己的AE Title,一般AE Title可以随便设置,很多设备并不对此加以检查,但是DVT检查到AE不正确是,会有一个错误提示“WRN Calling AE Title not correct - expected "DVT" - received "AAA"。设置完成后就可以启动运行。
e) 开始运行:Action菜单-》Emulators-》Run Storage SCP Emulator
DICOM接收程序开始运行,这时你可以将与本机器连接的DICOM发送设备上的图象发送过来
f) 查看结果:在dvt右边栏里会显示详细的网络连接和接收信息,主要包括以下几条:
i. 接收到的ASSOCIATE-RQ消息
ii. 接收到的ASSOCIATE-AC消息
iii. 如果成果接收,文件保存在emulators\storage\scp\xxxxxx.dcm
iv. File Meta Information
v. 接收到的C-STORE-RQ CT Image Storage SOP Class
vi. 发送的C-STORE-RSP消息
vii. 接收到的RELEASE-RQ消息
viii. 发送的RELEASE-RP
结果信息保存在emulators\storage\scp\001_001_em_res.txt文件里,可以查看获得更详细的信
4、 配置
a) 可以在Session菜单的Test Properties里配置模拟器的各种信息,包括要记录哪些信息、文件编码和存储格式、以及支持的消息和Transfer Syntax(传输句法)等
b) 可以在Session菜单的Enviroment里修改环境设置,主要是各种路
5、 Script例子
前面是一个emulator的例子,现在说Script例子。顾名思义,script就是要你自己来写脚本。Dvt已经附带了很多脚本可以供你参考,这里简单说明
a) Script模式下,首先需要有一个运行的session,在session里首先有预先装载(load)的预定义文件Definition Files(.DEF),在该定义文件的支持下,需要运行某个预先写好的脚本文件(.DS/.TS/.DSS),就可以起到相同的测试作用
b) 可以打开一个已有的session,例如scripts\storage\scp\test001.ses,可以看到其Definitions包括三个预定义,分别是CharacterSet.def,SecondaryCaptureImage Storage.def,FileMeta.def。它还有9个脚本文件(scripts下的.ds和.dss)
在Action菜单里通过Execute DICOM (super)Script来选择执行其中的一个脚本,或者通过Parse DICOM (super)Script来选择分析其中的一个脚本。
同样,在左栏Scripts下具体一个脚本文件(.cs/.css)上单击右键可以查看该脚本,双击左键可以直接运行该脚本。需要注意的是,脚本打开查看情况下不能运行,不许关闭该脚本的查看模式才可以运行,关闭方法是File菜单的Close
c) 可以新建一个新的session,例如scripts\storage\scp\test002.ses,首先需要加载预定义(.def),在Action菜单里通过Load Definitions来选择加载的定义文件(注意:加载后要保存)。
对脚本的加载,则需要在Session菜单里设置该Session的脚本路径(DICOM Script Directory),然后把需要的脚本文件(.ds/.ts/.dss)直接放到该路径下就可以。同样地,在Action菜单里通过Execute DICOM (super)Script来选择执行其中的一个脚本,或者通过Parse DICOM (super)Script来选择分析其中的一个脚本。

4、 深入
4.1 配置文件(5种:.SES/.DEF/.DS(.TS)/.DSS/.H)
4.1.1 Session File:每个测试Session的描述和配置定义文件(.SES),是执行测试的最基本平台,这里我把它称作模拟器(虚拟机),它包括三种不同类型
ü Emulator:模拟形式的模拟器
ü Scripting:脚本形式的模拟器
ü Media:DICOM文件格式模拟器
4.1.2 Definition File:定义文件(.DEF)
根据DICOM标准第3、4章,定义一个DICOM(Meta)SOP Class的DIMES命令及其IODs,这是模拟器运行所需要的前提条件。
4.1.3 DICOMScript:脚本文件(.DS/.TS)
测试所用脚本,划分为SCU/SCU/FSC三种不同角色的脚本,是模拟器运行的脚本
4.1.4 DICOMSuperScript:脚本集(.DSS)
列出测试所需要的一系列脚本文件名,是模拟器运行的脚本集
4.1.5 IncludeFiles:头文件(.h)
定义模拟器运行所包含的各种映射
4.2 工作模式
无论是哪一种运行模式(Emulator/Scripting/Media),DVT都是以脚本形式工作,脚本按Send和Receive命令形式,可以处理ACSE(6个低层R/R请求/响应消息)或DIMSE(高层C/N请求/响应消息)消息。发送时每个参数/属性都是可控制的,并且错误和异常也是可控的,这对测试非常有用。
为了方便使用,DVT已经将所有的ACSE/DIMSE/DICOM Command/Data Object数据保存在其数据仓库里,可方便地调用维护和更新。并且有一套管理(创建/删除/导入/导出/读/写/重用)的命令。
4.3 工作
除非你明白了DVT怎么工作,否则它看上去还是比较复杂的,你的主要工作包括3部分,配置运行参数,调整脚本和检查运行结果。
4.3.1 配置运行参数
4.3.2 调整脚本
主要是修改脚本文件,以满足你自己的测试需要,脚本文件可以从dvt的数据仓库里提取、复制和修改,当然如果你足够牛的话也可以自己来修改,但是这绝对是费力不讨好的事情,既然已经有现成的,还何必什么都要自己重头做起来呢,要知道,人类文明的进步是靠懒人推动的。
脚本调整的主要内容包括对Command和IOD内容的调整,因为你要接的不同设备和产品对DICOM的规定是有差异的,比如A设备要求某个字段是必须的 (TYPE 1)的,而在B设备里该字段则可能是不需要的(TYPE 3)的,那么在DICOM标准里呢?它是Type 2的,这时候你就要根据不同设备,调整这样的参数和属性。同时调整不同的参数和属性,也可以检测对方或者你的软件的稳定性和宽容性。
4.3.3 检查运行结果
运行结果详细地写入到Result File里,你可以从其中看到运行中全部的需要信息,理解这些信息需要一些DICOM知识。
4.4 dvt已有脚本
目前dvt附带的脚本包括了主要的DICOM服务的测试,基本已经可以满足一般的测试需要,包括
ü Storage Commit的SCU/SCP
ü Mpps的SCU/SCP
ü Print的SCU/SCP
ü Query/Retrieve的SCU/SCP
ü SR Report的SCU/SCP
ü Storage的SCU/SCP
ü verification的SCU/SCP
ü worklist的SCU/SCP
5、 后记
本文的主要目的是为了概述DVT,让大家能有个整体的了解后,能够知道该怎么去使用它。DVT自带的脚本和模拟器基本能够满足一个不很理解DICOM的人达到其用来测试DICOM通讯连接的目的,但是并不能保证他/她能够完全理解其中的意义。完整的DVT文档和帮助可以在DVT安装软件里的帮助信息和DVT 自带的示范脚本里学习到,这里不做更深入详细的说明。更深入的理解和更熟练的使用(例如:如何自己编写脚本)等需要对DICOM的深入学习和理解,冰冻三尺,非一日之寒,这里没有捷径,想熟悉了解DICOM还是要通过自己的不断努力。如果朋友们有什么意见、建议、更正和补充,非常欢迎大家与我交流,让我能够完善它,能够给更多的朋友提供更多更好的资源和帮助。
(原作者联系方式是dyjia@163.net, QQ:2670136, MSN:gladacer@hotmail.com)

6、 相关资源

感谢Agfa公司提供这样好的工具和资源,以及他们无私的共享精神,我从他们的网站上获得了许多帮助和学习的启示,以下是一些有用的资源连接:
http://www.agfa.com/healthcare/us/support/dicomconnectivity/
DVT说明:http://www.agfa.com/en/he/landing/index.jsp?table=NAVSUPPORT&navguid=E032400677486E3D3A3065AC4BA09646&contentguid=A98DA0B71423C0D9A27EE7A0D844680A

DVT软件下载站点:http://www.agfa.com/en/he/landing/index.jsp?table=NAVSUPPORT&navguid=E032400677486E3D3A3065AC4BA09646&contentguid=92140F7CC50F4CB1E0D12B3D58BBB387

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/CS_D_N/archive/2009/05/18/4195974.aspx

转载于:https://www.cnblogs.com/okaimee/archive/2010/12/17/1909102.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高阶函数 实现sum(2)(3) 柯里化

<!DOCTYPE html><html><head><meta charset"utf-8" /><title>高阶函数 实现sum(2)(3)</title></head><body><script type"text/javascript">function add() {var args [].slice.call(arguments);v…

设置和重置ssh key

查看本地是否有已经生成好的ssh key $ cat ~/.ssh/id_rsa.pub 若有,先删除: $ cd ~ $ rm -rf .ssh 重新生成ssh key ssh-keygen -t rsa -C "youemailexample.com" 提示输入密码或确认密码 直接全部回车即可 查看新生成的ssh key $ cat ~/.ssh/id_rsa.pub 然后获取到密…

小程序 自定义组件报错[“usingComponents“][“my-list“] 未找到

根据官网案例写了一个自定义组件&#xff0c;引入时总是报这个错误。 后面在社区里面找到了解决办法&#xff0c;把上面配置中改成&#xff1a;"my-list": "/components/my-list/my-list" 就可以了。 具体原因&#xff1a;官方文档上的自定义组件是 4 个文…

编写干净的测试–验证或不验证

在编写使用模拟对象的单元测试时&#xff0c;请遵循以下步骤&#xff1a; 配置我们的模拟对象的行为。 调用测试的方法。 验证是否已调用模拟对象的正确方法。 第三步的描述实际上有点误导&#xff0c;因为通常我们最终会验证是否调用了正确的方法以及未调用模拟对象的其他…

http 请求报文和响应报文

1、请求报文 示例&#xff1a; 2、响应报文 示例&#xff1a; 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

小程序 封装table组件

实在是懒得自己封装了&#xff0c;就在网上找了一下别人封装好的&#xff0c;这里主要参考的是 灰信网上的一篇文章&#xff0c;我在他的基础上改了一下样式&#xff0c;动态生成列表每一列列宽。 表格可左右横向滑动 一、子页面 table.wxml <scroll-view class"ta…

服务器--停止启动服务,查看日志文件

停止启动服务 ./shutdown.sh 停止掉当前服务 ./startup.sh 启动当前服务 例如&#xff1a; Tomcat服务器&#xff1a;在apache-tomcat-7.0.82/bin 目录下&#xff0c;sh shutdown.sh 停止掉当前服务&#xff0c;sh startup.sh 启动当前服务 查看日志文件&#xff1a; Tomcat查看…

linq 解决winForm中控件CheckedListBox操作的问题。(转载)

1.获取CheckedListBox选中项的文本的字符串&#xff0c;并用分隔符连接。系统没有提供相应的属性&#xff0c;方法。 这里我们利用3.0的特性给其来个扩展方法,如下&#xff1a; public static stringGetCheckedItemsText(thisCheckedListBox box) { stringre…

一个在自己的线程中运行测试的JUnit规则

有时&#xff0c;能够在单独的线程中运行JUnit测试会很有帮助。 特别是在编写与封装的ThreadLocal或类似对象交互的集成测试时&#xff0c;这可能会派上用场。 单独的线程将隐式确保每次测试运行都未初始化threadlocal的与线程相关的引用。 这篇文章介绍了提供此类功能的JUnit …

linux LVS管理之keepalive

Keepalive01: ! Configuration File for keepalivedglobal_defs {notification_email { ##接收邮件的地址&#xff1b;就是说通知邮件应该发送给谁&#xff0c;通常写自己的地址rootlocalhost ##收件人&#xff0c;表示发送给本机的root用户}notification_email_from k…

Glass Fish 4.0.1中的Jersey SSE功能

Glass Fish为各种Java EE规范捆绑了不同的参考实现&#xff0c;例如&#xff0c;CDI的Weld&#xff0c;JSF的Mojarra&#xff0c;WebSocket的Tyrus&#xff0c;JAX-RS的Jersey。 Glass Fish 4.0.1即将发布&#xff0c;并计划涵盖许多组件/模块的更新&#xff0c;这些组件/模块当…

canvas1:简单介绍、开始使用、画直线+虚线

目录 一、简单介绍 二、开始使用 三、画直线、虚线 3.1 画直线 1. 画直线的步骤&#xff1a; 2. 设置直线的样式 3. 绘制多条直线 3.2 画虚线 四、整理使用到的方法&#xff1a; 参考了廖雪峰老师的笔记。 一、简单介绍 Canvas是 HTML5新增的组件&#xff0c;它就像…

Test of etco

Test of etco 转载于:https://www.cnblogs.com/yanjunz/archive/2010/12/22/1913852.html

js setTimeout和setInterval区别

1、区别 2、示例代码 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-equiv"X-UA-Compatibl…

将Android源码集成到Eclipse中的方法

1、 首先&#xff0c;下载Android源码&#xff1a; Android 2.0源码下载地址&#xff1a;http://download.csdn.net/source/2931366 Android 2.1源码下载地址&#xff1a;http://download.csdn.net/source/2931364 2、 然后&#xff0c;新建一个名为【sources】的文件夹&#x…

为GWT设置开发环境

介绍 这是旨在用Java开发跨平台移动应用程序的系列文章的一部分 。 在此博客文章中&#xff0c;我们将了解GWT是什么&#xff0c;并为GWT设置开发环境。 GWT是一个开源开发工具包&#xff0c;用于开发基于浏览器的复杂Ajax应用程序。 使用GWT&#xff0c;您可以用Java开发Rich…

vue slot的使用

一、自定义组件中多个 slot 很久之前就想把表格封装了&#xff0c;奈何那时太过担心自己的技术。今天趁着劲头大致看了一下&#xff0c;把表格封装了&#xff0c;倒是比想象中的要简单很多 O(∩_∩)O 哈哈~ 暂且不考虑细节&#xff0c;大致封装表格要考虑的有&#xff1a;是否…

虫师Selenium2+Python_6、Selenium IDE

P155——创建测试用例录制脚本编辑脚本定位辅助P159——Selenium IDE 命令在浏览器中打开URL&#xff0c;可以接受相对路径和绝对路径两种形式openopen(url)单击链接、按钮、复选框和单选框click(elementLocator)模拟键盘的输入&#xff0c;向指定的input中输入值type(inputLoc…

flow 静态类型检查 js

1、flow介绍 https://ustbhuangyi.github.io/vue-analysis/prepare/flow.html#为什么用-flow 2、使用 &#xff08;1&#xff09;安装flow &#xff08;2&#xff09;项目目录的test.js文件 类型推断&#xff1a; /*flow*/function split(str) {return str.split( )}split(1…

coreleft函数

函数名: coreleft   功 能: 返回未使用内存的大小   用 法: unsigned coreleft(void);   程序例:   #include <stdio.h>   #include <alloc.h>   int main(void)   {printf("The difference between the highest allocated block and\n");…