西门子PLC模块CPU224CN
和用户都十分重视软件的质量,软件质量问题也是软件工程的核心问题之一。什么是软件质量?软件质量是一个复杂的概念,不同的人从不同的角度来看软件质量问题,会有不同的理解。人们经常说某某软件好用,某某软件功能全、结构合理、层次分明、运行速度快等。这些模糊的语言实在不能算作是软件质量评价,特别不能算作是对软件质量科学的、定量的评价。其实,软件质量,乃至于任何产品质量,都是很复杂的事物性质。随着计算机软硬件技术的发展,人们对软件质量的理解不断深化,软件质量的标准也在不断改变。按照ISO/IEC 9126-1991(GB/T 16260—1996)“信息技术软件产品评价质量特性及其使用指南”标准,对软件质量定义如下。
软件质量是与软件产品满足明确或隐含需求的能力有关的特征和特性的总和。其含义有以下4个方面。
• 能满足给定需求的特性。软件需求是衡量软件质量的基础,不符合需求的软件就不具备好的质量。设计的软件应在功能、性能等方面都符合要求,并可靠地运行。
• 具有所期望的各种属性的组合的程度,即软件结构良好,合理地利用系统资源,易读、易于理解,并易于修改,方便软件的维护。内部质量特征主要包括以下几个方面。
• 可维护性,修改一个软件系统,提高其性能或修正其错误的能力。
• 灵活性,修改系统使其能适应于不同的用途或环境的能力,而不必对系统进行特定的设计。
• 可移植性,能修改所设计的某一部分,使其能在其他环境下运行的能力。
• 可重用性,能将系统的一部分用于其他系统的难易程度。
• 可读性,能读懂或理解系统源代码的能力。
• 可测试性,对整个系统进行单元或系统测试以证实其满足所有需求性能的测试难易程度。
• 可理解性,能从整个系统水平或细节上理解整个系统的难易程度。
外部质量的定义是软件产品在规定条件下使用时满足需求的程度。外部质量是从外部观点出发的软件产品特性的总体,它是当软件执行时,更典型的是使用外部度量在模拟环境中,用模拟数据测试时,所被测量和评价的质量,即在预定的系统环境中运行时可能达到的质量水平。
外部质量特征主要包括以下几个方面。
• 正确性,整个系统受说明、设计和实现的错误的影响程度。
• 可用性,用户学会和使用系统的难易程度。
• 效率,对系统资源的*小利用,包括存储时间和执行时间。
• 可靠性,系统在一定条件下执行特定功能的能简单地说,软件测试就是为了发现错误而执行程序的过程。软件测试是一个找错的过程,测试只能找出程序中的错误,而不能证明程序无错。软件测试要求以较少的用例、时间和人力找出软件中潜在的各种错误和缺陷,以确保软件的质量。
在IEEE所提出的软件工程标准术语中,软件测试被定义为:“使用人工或自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清楚预期结果与实际结果之间的差别。”软件测试是与软件质量密切联系在一起的,软件测试归根结底是为了保证软件质量。通常软件质量是以“满足需
是否满足需求为目标。
软件测试在软件生命周期中占据重要的地位,在传统的瀑布过程模型中,软件测试仅处于运行维护阶段之前,是软件产品交付用户使用之前保的测试过程包含在软件生命周期的每个阶段中。在需求阶段,重点要确认需求定义是否符合用户的需要;在设计和编码阶段,重点要确定设计和编码是否符合需求定义;在测试和安装阶段,重点是审查系统执行是否符合系统规格说明;在维护阶段,要重新测试系统,以确定更改的部分和没更改的部分是否都正常工作。2. 软件测试的目的
软件测试的目的是为了保证软件产品的*终质量,在软件开发的过程中,对软件产品进行质量控制。测试可以达到很多目的,但*重要的是可以衡量正在开发的软件的质量。
测试是为了证明程序有错,而不能保证程序没有错误。事实上,在软件运行期间测试活动从未间断,只是在软件产品交付给用户之后,将由用户继续扮演测试的角色而已。Glen Myers在关于软件测试的**著作《The Art of Software Testing》中陈述了一系列可以服务于测试目标的规则,这些规则也是被广泛接受的,主要有以下3点。
• 测试是一个程序的执行过程,其目的在于发现错误。
• 一个好的测试用例很可能会发现至今尚未察觉的错误。
• 一个成功的测试是发现至今尚未察觉的错误的测试。
软件测试是以*少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。软件是由人来完成的,所有由人做的工作都不会是****的。软件开发是一个很复杂的过程,期间很容易产生错误。尽管软件从业人员、专家和学者付出了很多努力,但软件错误仍然存在。因此大家也得到了一种共识:软件中残存着错误,这是软件的一种属性,是无法改变的。所以通常说软件测试的目的就是为了发现尽可能多的缺陷,并期望通过改错来把缺陷统统消灭,提高软件的质量。
同时,测试不仅仅是为了发现软件缺陷和错误,也是为了对软件质量进行度量和评估,以提高软件的质量。软件测试是以评价一个程序或者系统属性为目标的活动,以验证软件满足用户的需求的程度,为用户选择与接受软件提供有力的依据。
此外,通过分析错误产生的原因还可以帮助发现当前开发工作所采用的软件过程的缺陷,以便进行软件过程改进。同时,通过对测试结果进行分析整理,还可以修正软件开发规则,并为软件可靠性分析提供依据。修复成本。但是需要注意,“尽早测试”并非盲目的提前测试活动,测试活动开展的前提是达到必须的测试就绪点。
(2)全面测试
软件是程序、数据和文档的集合,那么对软件进行测试,就不仅仅是对程序的测试,还应包括软件“副产品”的“全面测试”。需求文档、设计文档作为软件的阶段性产品,直接影响到软件的质量。阶段产品质量是软件质量的量的积累,不能把握这些阶段产品的质量将导致*终软件质量的不可控。
“全面测试”包含两层含义:第一,对软件的所有产品进行全面的测试,包括需求、设计文档,代码,用户文档等。第二,软件开发及测试人员(有时包括用户)全面的参与到测试工作中,例如对需求的验证和确认活动,就需要开发、测试及用户的全面参与,毕竟测试活动并不仅仅是保证软件运行正确,同时还要保证软件满足了用户的需求。
“全面测试”有助于全方位把握软件质量,尽*大可能的排除造成软件质量问题的因素,从而保证软件满足质量需求。
(3)全过程测试
“全过程测试”包含两层含义:第一,测试人员要充分关注开发过程,对开发过程的各种变化及时做出响应。例如开发进度的调整可能会引起测试进度及测试策略的调整,需求的变更会影响到测试的执行等等。第二,测试人员要对测试的全过程进行全程的跟踪,例如建立完善的度量与分析机制,通过对自身过程的度量,及时了解过程信息,调整测试策略。
“全过程测试”有助于及时应对项目变化,降低测试风险。同时对测试过程的度量与分析也有助于把握测试过程,调整测试策略,便于测试过程的改进。
(4)独立的、迭代的测试
“独立的、迭代的测试”包含两层含义:第一,应当将测试过程从开发过程中适当的抽象出来,作为一个独立的过程进行管理。软件开发瀑布模型只是一种理想状况。为适应不同的需要,人们在软件开发过程中摸索出了如螺旋、迭代等诸多模型,这些模型中需求、设计、编码工作可能重叠并反复进行的,这时的测试工作将也是迭代和反复的。如果不能将测试从开发中抽象出来进行管理,势必使测试管理陷入困境。第二,测试工作应该由独立的专业的软件测试机构来完成。通常,程序的设计者对自己的程序印象深刻,并总以为是正确的,倘若在设计时就存在理解错误,或因不良的编程习惯而留下隐患,那么程序员本人很难发现这类错