注册登录才能更好的浏览或提问。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
医用软件的质量控制 (下) 韩峰 张继武
韩峰先生,上海交通大学生命科学技术学院生物医学工程专业硕士研究生;张继武先生,博士,柯达医疗全球研发中心总经理,大亚太区研发总监,上海交通大学兼职教授、博士生导师。
关键词: 医用软件 过程控制 软件测试 DICOM标准确认和验证 四 软件测试应用
软件测试是保证软件质量和可靠性的重要手段。在西方软件发达国家,软件测试受到普遍重视。统计数据表明,在国际著名IT企业中,软件测试的费用占到了整个开发过程费用的40%以上。特殊情况下,对于性命攸关的软件,如飞行控制、核反应堆监控软件等,其测试费用甚至高达所有其它软件工程阶段费用总和的3~5倍。由此可见软件测试在软件开发过程和提高软件质量上的作用。软件测试虽有助于提高软件的质量,但是提高软件的质量不能依赖于测试。 1. 软件测试实践 从软件的生存周期看,测试往往指对程序的测试,这样做的优点是被测对象明确,测试的可操作性相对较强。但是,由于测试的依据是规格说明书、设计文档和使用说明书,如果设计有错误,测试的质量就难以保证。即使测试后发现是设计的错误,这时修改的代价是相当昂贵的。因此,应当采取的做法是对软件的开发过程各阶段形成的结果,分别进行严格的审查,最后再进行完整的功能测试。 a.测试的组织和过程 为了保证软件的开发质量,软件测试应贯穿于软件定义与开发的整个过程。因此,对分析、设计和实现等各阶段所得到的结果,包括需求规格说明、设计规格说明及源程序都应进行软件测试。测试人员应该从项目开始阶段就可以介入到项目中去,一方面可以从需求分析开始就对所要开发的软件产品有充分的认识;另一方面也可以及早进行测试的计划和测试方案的设计。基于此,测试人员的组织也应是分阶段的。 (1)需求分析规格说明评审:需求分析规格说明是否完整、正确、清晰是软件开发成败的关键。为了保证需求定义的质量,应对其进行严格的审查。所以测试人员应和系统分析员,软件开发管理者,软件开发人员和用户一起对需求分析规格说明进行评审。同时,在这一阶段测试人员也需要制定测试计划。 (2)设计评审:软件设计是将软件需求转换成软件表示的过程。主要描绘出系统结构、详细的处理过程和数据库模式。按照需求的规格说明对系统结构的合理性、处理过程的正确性进行评价,同时利用关系数据库的规范化理论对数据库模式进行审查。所以测试人员应和系统分析员、软件开发管理者、软件开发人员一起对设计进行评审。同时,这一阶段测试人员可以按照需求分析和涉及文档进行测试方案的制定以及测试用例的设计。 (3)程序的测试:程序测试是整个软件开发过程中交付用户使用前的最后阶段,是软件质量保证的关键。程序测试在软件生存周期中横跨两个阶段:通常在编写出每一个模块之后,就对它进行必要的测试,称为单元测试。编码与单元测试属于软件生存周期中的同一阶段。这一阶段结束后,进入软件生存周期的测试阶段,对软件系统进行各种综合测试。测试工作由专门的测试组完成,测试组设组长一名,负责整个测试的计划、组织工作。测试组的其他成员由具有一定的分析、设计和编程经验的专业人员组成。 b. 测试方法的应用 (1)技术评审:对于需求分析和设计文档进行的测试方法是技术评审。技术评审(Technical Review)的目的是尽早地发现工作成果中的缺陷,并及时消除缺陷,从而有效地提高产品的质量。 技术评审的组成和过程: (a)准备评审。由评审主持人确定评审的时间、地点和内容并召集评审小组成员。同时准备被评审的文档和内容。 (b)举行评审会议。作者扼要地介绍工作成果。评审员根据“检查表”认真查找工作成果的缺陷。作者回答评审员的问题,双方要对每个缺陷达成共识(避免误解)。作者和评审员共同讨论缺陷的解决方案。对于当场难以解决的问题,由主持人决定“是否有必要继续讨论”或者“另定时间再讨论”。评审小组给出评审结论和意见。 (c)跟踪与审核作者修正工作成果,消除已发现的缺陷。评审主持人(或者指定审查员)跟踪每个缺陷的状态。直到工作成果合格为止。 实施技术评审的主要好处有:技术评审在需求分析和设计阶段执行,不必等到软件可以运行之际,就可以尽早消除缺陷降低缺陷的累积效应,通过消除工作成果的缺陷而提高产品的质量。 (2)单元测试:单元测试集中在检查软件设计的最小单位—模块上,由开发人员进行交叉测试,避免开发人员测试自己编写的程序。通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。由于模块规模小、功能单一、逻辑简单,测试人员有可能通过模块说明书和源程序,清楚地了解该模块的I/O条件和模块的逻辑结构,采用结构测试(白盒法)的用例,尽可能达到彻底测试,然后辅之以功能测试(黑盒法)的用例,使之对任何合理和不合理的输入都能鉴别和响应。高可靠性的模块是组成可靠系统的坚实基础。 (3)集成测试:集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。 (4)系统测试:系统测试又称功能测试,它检查软件的功能是否符合规格说明。由于正确性是软件最重要的质量因素,所以其测试也最重要。 在系统测试之前,测试人员应完成下列工作: (a)为测试软件系统的输入信息设计出错处理通路; (b)设计测试用例,模拟错误数据和软件界面可能发生的错误,记录测试结果,为系统测试提供经验和帮助; (c)参与系统测试的规划和设计,保证软件测试的合理性。 系统测试应该由若干个不同测试组成,目的是充分运行系统,验证系统各部件是否都能正常工作并完成用户需求的功能。下面简单讨论几类系统测试。 (1)功能测试:功能测试主要检查系统功能完成的情况。根据测试用例文档,将所有的测试用例都在软件上运行,还可以猜测用户可能进行的操作对软件进行测试。 (2)恢复测试:恢复测试主要检查系统的容错能力。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复。对于自动恢复需验证重新初始化、检查点、数据恢复和重新启动等机制的正确性;对于人工干预的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内。 (3)安全测试:安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。例如,①想方设法截取或破译口令;②专门定做软件破坏系统的保护机制;③故意导致系统失败,企图趁恢复之机非法进入;④试图通过浏览非保密数据,推导所需信息等。理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。 (4)性能测试:软件部分满足功能要求,也未必能够满足性能要求,虽然从单元测试起,每一测试步骤都包含性能测试,但只有当系统真正集成之后,在真实环境中才能全面、可靠地测试。性能测试是为了完成这一任务。 2. 软件缺陷的分析和管理 通过软件测试发现软件中的缺陷以后,如何对这些缺陷进行分析和管理是非常重要的。 a. 软件缺陷的类别 测试的过程中发现的软件缺陷主要在以下几个方面。 (1)功能错误:表现为不能实现用户要求的功能或者得到的结果和用户所要求的不一致。常见的功能错误有:配置环境时出错;数据库读写出错;软件对图像处理出错等。这些错误产生的主要原因就是软件编码的错误,隐含在软件的任何位置或任何操作步骤中。这一类的错误比较严重,需要开发人员及时修复并在下一版本中进行验证。 (2)用户界面错误:用户比开发或测试人员在接触界面上要花费更多时间。表面上不重要的方面的影响会变得越来越大,最终甚至会掩盖了产品的有用的方面。所以尽管用户界面错误对于软件实现功能的影响不是最大,但其涉及到用户使用软件的友好程度,也应该得到足够的重视。 常见的用户界面的错误有: (a)输入无合法性检查和值域检查,允许用户输入错误的数据类型,并导致不可预料的后果。 (b)界面中的信息不能及时更新,不能正确反映数据状态,甚至对用户产生错误的误导。如:数据库中剩余记录个数;参数设置对话框中的预设值等。 (c)用户界面显示的字符、图表和数据不正确或有乱码出现。 (d)用户界面的控件消失、显示错误或显示重叠,甚至控件的功能失效。 (3)稳定性问题:当软件运行到一定程度后就会出现稳定性问题。表现在机器出现死机;不断申请但不完全释放资源,系统性能越来越低;出现一些不能重现的错误等。此类问题对用户造成的影响比较大,尤其是对于医用软件。对医务人员来说,出现这样的问题可能或对病人有一定的损害。所以对于这类问题要在测试中密切关注,一旦出现一定要解决问题。 b.软件缺陷管理 建立软件缺陷管理系统是非常有效的管理软件缺陷的方法。在这套系统中,能够记录软件开发过程中发现的缺陷,管理缺陷的活动周期,记录缺陷的变化情况。系统还提供了强大的查询和统计功能,能帮助企业管理者、项目负责人全面地掌握产品的完成情况、稳定性和健壮性。 笔者公司使用了Clear Quest系统进行软件缺陷管理。当测试团队在测试中发现了缺陷以后,就可以将该缺陷记录在Clear Quest系统中,记录的主要内容包括缺陷出现的软件和硬件环境,描述缺陷导致的结果,缺陷重现的步骤,并对缺陷的严重程度划分等级。之后,由项目开发组的成员一起决定软件缺陷的严重等级,并将软件缺陷的修复工作分配给相应的开发人员。开发人员修复缺陷后,由测试人员验证通过后将该缺陷关闭。 在实践中使用Clear Quest系统进行软件缺陷管理之后,提高了对软件缺陷的管理和控制,主要表现在: (1)避免测试人员发现的软件缺陷遗漏或因时间长后遗忘; (2)避免测试人员将发现的软件缺陷向不同的开发人员或项目经理做重复的解释,提高了效率; (3)便于项目经理对软件缺陷进行查询和统计,掌握软件产品的质量。 3. DICOM标准确认和验证 DICOM(Digital Imaging & COm-munication in Medicine)是医疗设备之间连接的工业标准。DICOM是在美国产生、发展的,并被欧洲各国、日本等发达国家和地区接受,从而被列入国际标准。在我国,DICOM是唯一被接受的医疗影像国际规范。DICOM已经成为国际医疗影像设备的图像通信/交流的唯一规范。 DICOM是医学图像信息系统领域中的核心,它主要涉及到信息系统中最主要也是最困难的医学图像的存储和通信,可直接应用在放射学信息系统(RIS)和图像存储与传输系统(PACS)中。DICOM也是研究和开发具有网络连接功能,实现信息资源共享的新型医疗仪器的技术基础。医疗仪器在朝着自动化、智能化发展的同时,也在向着具有通信能力的遥控遥测和信息远程获取的网络功能发展,医疗仪器既是医疗信息系统中的信息源,又是系统中的信息使用者,是信息系统中的一个主要环节,网络化的医疗仪器对医学信息系统的重要性是不言而喻的 开发医用软件为了满足医院的要求,能够在医院的信息和数字化系统中进行有效通讯,就一定要满足DICOM标准。然而,DICOM标准本身并没有包含如何验证软件是否与标准一致,DICOM标准要求软件出具一份一致性声明描述软件与DICOM标准的一致性内容。所以在软件被第三方测试之前,内部会先对软件一致性说明描述的软件与DICOM标准一致的内容进行确认和验证。 笔者公司内部进行DICOM标准确认和验证所采用的方法是根据软件的一致性声明编写测试用例,运用内部不同的设备和软件包括GCPACS系统、CR和DR设备等搭建测试环境进行测试。 所采用的DICOM标准的验证和确认主要测试以下几项内容:各种医疗设备的连通性,图像和信息传输到其它设备上后显示的准确性和质量以及整个医院信息系统的工作流程。所以测试过程也分为三个方面: (1)连通性测试:这一测试主要针对的是相互连接的设备之间是否可以通讯,设备上的信息和图像是否可以正确的传输。按照事先编写的测试用例,运用设备上的数据进行测试。 在测试的过程中出现的问题主要有:设备间的通讯要求被拒绝;某些数据不能传输;数据传输出错等。对测试中发现的问题进行修改后可以保证软件与其它设备之间的连通性。 (2)图像显示测试:这一测试针对的主要是经过传输的软件在其它设备上显示时的质量。主要方法是通过某一设备得到一幅数字化图像,然后将该图像传输到工作站或其它设备显示。 在测试的过程中出现的问题主要有:显示的图像特征与原图像不一致;图像上的注解和评论与原图像不一致等等。 (3)工作流程测试:这一测试针对的是整个系统的工作流程。模拟医院信息系统的运行状态,完成所有可能的操作的测试,如图像和信息在不同设备上的接收、传输、存储和显示等。 经过这三方面的测试之后就要出具一份测试报告,报告的内容包括测试验证的所有一致性声明中的功能,发现的缺陷和修复情况等。 进行DICOM标准的确认和验证,可以达到以下几个方面的目标: (1)确认所发布的软件的DICOM标准一致性声明的功能可以实现; (2)确认所发布的软件和设备能够接收和传输图像和信息,其与其它设备的连接能够实现; (3)确保的软件显示接收的图像接近于或高于原图像的质量。 4. 测试总结 实行软件测试,由于测试的内容很多,测试的周期持续了整个开发过程,占了整个软件开发项目中很大的成本。但测试的益处也是显而易见的。软件开发初始阶段的测试,尽可能早的发现尽量多的缺陷,降低了缺陷的累积效应,同时也降低了修改缺陷所要花费的成本。软件开发后期阶段的完整测试,将软件中的缺陷尽可能多的找出并修复,使软件产品正式提交给用户或投入市场时确保产品完成了用户所要求的所有功能,确保产品满足性能和效率的要求,确保产品是健壮的和适应用户环境的,从而赢得客户的信任和市场。 当然,发布出去的软件在使用过程中出现缺陷也是不可避免的,软件零缺陷是个理想而不能实现的目标,所以要掌握软件测试的成本和代价,不可以无限制的投入软件测试,追求零缺陷这一不可能实现的目标。 五 总结 软件质量控制是一个涉及面很广的课题,甚至可以说软件工程中所有的理论、方法和技术围绕的中心都是低成本、高效率的开发高质量软件。而其中软件过程技术和软件测试技术又是制约影响软件质量的关键因素。因此本文从这两个方面展开研究和阐述。 对软件过程技术的研究着眼于软件过程的改进。笔者对CMMI(软件能力成熟度模型)进行了深入的研究,在分析总结软件企业实施CMMI的经验和教训的基础上,根据实际情况,提出了我们公司相应的CMMI的实施策略,阐述了实施过程中遇到的问题以及解决方案,并说明了实施效果,这些对于国内软件企业开展CMMI活动都将具有借鉴意义。 软件测试方面,本文不但阐述了软件测试的目的、原则,并对其在项目开发中的运用作了详细阐述,同时也详细阐述了医用软件的DICOM标准的确认和验证的测试内容和过程。 由于采用先进的开发方法,进行规范的过程管理,软件项目都能够按照计划,合乎CMMI的标准顺利完成,交给客户试用,反馈的质量问题相比以前的项目大大减少。而公司现在也基本建立了一套软件质量保障体系,拥有了自己的质量控制管理工具,确立了适合本企业的软件过程模型,制定了一系列的开发规范、产品模板和管理制度,积累了公司自己的软件产品和软件过程数据,并在项目开发中不断改进和完善软件过程。 (全文完) 来源:《世界医疗器械》 出版日期:2007年1月
|