如何在软件测试阶段有效的提高软件质量 软件测试中如何保证软件质量

作者&投稿:年建 (若有异议请与网页底部的电邮联系)
From:柠檬班学习群:333782754
在实际工作中,可通过以下几个途径提高软件的可测试性:减少并控制需求的变更;加强软件可测试性的设计;重视并规范技术文档的编写。
1 减少并控制需求的变更
用户需求可分为如下三个层次:基本需求、预期需求和扩展需求三类。其中预期需求是明示的,而基本需求和扩展需求是非明示的。所谓扩展需求是指这些特征在用户的期望范围之外,并且当其存在时将是非常令人满意的。由于种种原因,软件的需求不确定性是客观存在的,是不可避免的,软件规模越大,研制周期越长,需求的不确定性就越大。软件需求不确定性原因主要包括:用户在表述需求时常常带有不确定性与模糊性;随着开发进程的推进,用户对所建应用系统理解的不断深入,对原来模糊的或非明示的需求有了新的认识,随时会提出需求的变更;由于开发人员的领域知识的局限性,导致引发对需求的误解;用户需求的获取过程与描述形式往往采用非形式化的自然语言,以及自然概念中存在的本质矛盾,使需求的规范描述发生困难。
(1)识别项目需求
识别项目需求是项目成功的关键,为了减少需求的不确定性,首先应充分认识确定需求的重要性,通过与用户的沟通,使用户能充分认识到软件需求的变更对软件质量、进度和成本的影响,积极参与到确定软件需求的活动中,达到在进行软件设计前尽量确定软件需求的目的。同时在识别项目需求时,除了用户明示的需求外,还需关注用户基本需求,用户基本需求常常体现在项目的领域知识、项目所在行业的相关标准等方面。实践证明,开发人员对领域知识掌握的程度直接影响到项目需求的确定,开发人员通过对领域知识的积累有助于项目需求的确定。
(2)需求文档化及需求评审
按照软件工程化要求,用户应该向研制方正式提交需求文档,研制方根据用户需求进行需求分析形成产品需求,用户需求及产品需求均需文档化并经过评审,以尽早发现不合理的需求。
(3)需求管理、需求变更的控制
在系统研制过程中应对需求进行管理,首先建立需求库及需求跟踪矩阵,在需求跟踪矩阵中反映研制各阶段工作产品与需求的对应关系,并对需求进行需求的双向跟踪。
(4)采用软件需求管理工具
采用需求管理工具,可以提高需求管理工作流程的自动化程度,使需求管理可以在项目实施过程中得到有效地推行。需求管理工具可以在整个项目生命周期内,帮助团队有效地协作,将需求的变更信息及时传送到团队的每个成员,可以使跨项目团队的所有成员都能掌握必要的需求详细信息,并对软件项目规划、项目跟踪与监督实施管理。

2 加强软件可测试性设计
在项目设计阶段应注重对软件可测试性的设计。项目负责人可根据项目具体情况对软件可测试性提出具体要求,对软件注释率、软件模块规模、模块圈复杂度、基本圈复杂度、操作数的个数以及过程出口个数等进行规定,在软件设计及编程阶段严格按照规范执行,可有效地提高软件测试效率。实践证明,如果在项目设计阶段不进行软件可测试性的设计,待软件完成后再根据可测试性要求对软件进行修改完善常常需要花费巨大的人力和物力,同时大量修改对软件质量也会带来不利影响。

3 重视并规范技术文档的编写
技术文档不仅是开发人员进行信息交流的手段,也是测试人员进行测试的依据。所以软件相关文档应描述明确详细,组织合理,并根据需求和设计的变更及时更新。同时为了给独立测试人员提供更多的信息,在技术文档中可增加各软件模块的重要程度、重用性及测试历史等信息,使得独立测试人员可以合理分配精力,对重要软件进行重点测试,减少不必要的重复劳动,提高测试效率。

3、软件测试方法与组织

3.1 软件测试方法
软件模块级测试分为白盒测试和黑盒测试。黑盒测试注重于测试软件的功能性需求,试图发现功能缺陷或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误及初始化和中止等类型的错误。白盒测试依赖对程序细节的严密检验,对软件的逻辑路径进行测试,在不同的程序点检验“程序的状态”以判定预期状态或待验证状态与真实状态是否相符。在软件测试中,常常结合黑盒和白盒两种测试方法,相互补充。

3.2 软件测试人员
软件测试可由软件开发人员、独立测试人员或用户进行。在组织软件测试时,可根据不同人员的特点进行组织,使得各类测试相互补充。
软件开发人员熟悉软件需求及被测软件,清楚各软件模块的重要程度和相互关系,了解各软件模块以前的测试及修改等历史情况,可以有针对性地进行测试;软件开发人员和用户交流较为方便,在测试中能够发现与需求不一致的软件错误。但是开发人员急于证明他们的程序是毫无错误的,是按照用户的需求开发的,而且完全能够按照预定的进度和预算完成,这将影响开发人员完成相关测试任务。
独立测试人员应具备较强的测试理论水平和测试经验,熟练掌握软件测试工具,并知悉被测软件的功能需求才能够对软件进行系统全面的测试。但独立测试人员有时会缺乏相应领域的专业知识,主要测试依据是用户的技术要求及开发人员在软件研制过程中形成的文档,一方面这些文档中缺乏对用户基本需求的描述;另一方面,独立测试人员常常需通过开发人员来进行需求的理解,因此在软件测试中有时无法发现软件不满足需求方面的错误。但这种错误往往从用户角度来看是最严重的。同时,独立测试人员由于对各软件模块的重要性及相互关系了解不深。有时会影响测试效率。
在条件允许的情况下,软件完成后可提交用户试用。用户在试用中根据实际使用需求进行操作,其中包括各种正常操作流程和非正常操作流程。用户试用可有效检验软件是否满足用户需求,同时在用户试用中对软件的可靠性等方面也同步进行了测试。因为用户试用方式同实际使用方式非常接近,所以通过用户试用获得好评的软件基本可以满足今后的实际使用要求。

3.3 提高软件测试效率的方法
为了提高软件测试效率,测试人员需要熟悉掌握软件涉及的领域知识,了解软件各项功能的重要程度和成熟程度,掌握测试理论和工具;用户是验证需求正确性的主导力量,应充分发挥用户的积极作用。
在组织软件测试时,可通过以下几个方面提高软件测试效率:
根据不同测试人员的特点进行测试分工,单元测试应以软件开发人员为主进行,以保证每个单元能够完成设计的功能。在很多情况下,集成测试也可以开发人员为主进行。当软件体系结构完成后,独立测试机构介人;
软件测试人员应注重与用户的沟通,及早发现需求分析、理解不合理的问题,避免今后花费大量的资源和时间进行改正;
对于软件开发人员,需加强测试方法的培训,提高自我测试的效率;
在选择独立测试人员时,尽量选择比较熟悉了解被测软件相关领域知识的人员;
独立测试人员应该在软件开发的需求阶段就参与项目的研制,以便更好地制定测试计划、确定测试目标及编写测试用例。通过找出项目中关键的模块和出错率高的模块,可使测试首先集中在最重要的部分,避免发生把过多时间花费在非重要模块的测试而没有时间测试重要的模块的情况;
被测软件在测试中发现了问题,要进行有组织的分析研究,然后权衡利弊进行规范化修改,避免反复修改,反复测试;
规范软件配置管理,通过管理及技术手段,对软件和文档版本进行控制,保障软件测试的有效性。

4、结束语

实践证明,通过提高被测软件的可测试性,以及合理组织软件测试工作,可以有效地提高软件测试效率。随着软件测试的重要性得以承认,软件测试阶段在整个软件开发周期中所占的比重也日益增大。为了将缺陷和错误消灭在萌芽之中,软件测试将逐步发展成为软件开发每一阶段都要进行而且需要反复进行的活动。软件测试中大量的工作是机械的、重复的、枯燥的和非智力的,但逐步加强软件自动化测试的研究和推广将是今后软件产业的发展趋势。

软件测试可提高软件质量,测试应该在软件开发过程的哪些阶段被实施~

测试在不同阶段都有实施,在需求编写完成后,可以针对需求进行文档测试,编写测试用例;在开发阶段,每个单个功能点开发完成,可以进行单元测试;程序基本开发完成以后(60%以上),进行集成测试;全部开发完成并且集成测试或者系统测试完成之后,可以进行验收测试;之后还有对已经可以投入使用的系统进行性能测试安全性测试等等。不是很全面,但是基本差不多。

软件在没有发布之前的开发过程主要分为需求分析、设计、编码和验证四个阶段,最终的软件质量与这四个阶段的各自质量之间的关系如果用C语言来表达的话应当是: 最终的软件质量 = 需求分析质量 && 设计质量 && 编码质量 && 验证质量 即,最终的质量来自于各阶段质量之“与”,只要其中一个环节质量是差,则产品的整体质量都将是差,千万不要认为是“或”的关系。由此看来每一个阶段的质量都起着决定性的作用。 以上提及的四个阶段的质量将引出以下几个软件质量保证的关键要素。 完备的需求分析 需求分析的目的是让项目组明白要做什么,是决定所开发出来的软件应当是“长什么样的”,显然完备的需求分析是高质量软件的前提。如果所开发出来的软件与用户所希望的并不一致,那不可能让用户说“这个软件的质量很好” 。如果方向不对,软件开发得再“好”也没有意义。需求分析失误所带来的开发成本是高昂的,这一点在《软件工程》这类书籍中都会提及,因此,整个行业对于需求分析的重要性都具有足够的认识。当然,知道其重要性与如何获得完备的需求分析又是两回事,至于如何做好需求分析请读者参考相关书籍。 需求分析如果出现失误的话有一个特点—— 它一定会暴露!只不过存在是暴露在软件开发过程中还是在用户手中之别。因此,需求分析所造成的问题尽管严重,但它能被发现进而能得到项目组的重视,从而也一定能被修复,只是不同阶段发现这类问题所花费的成本将有所不同。 设计 设计阶段是通过设计方法找出软件实现更好的方法,注意这里是“更好”两个字,而不是强调最好。 不良设计并不会象需求分析失误那样很容易暴露出其本质,相反,它所暴露出的更多是表象,比如逻辑复杂、维护时举步为艰等等。如果参与者不具备一定的洞察力以发现隐藏在现象背后的不良设计本质,则很有可能身受其害却不能自拔,还以为“本来就有那么复杂”。 项目的开发是一个逐步演进的过程,项目组成员对于需求的理解也是逐步加深的,一开始合适的设计到后面看来很有可能就不够全面或显得力不从心,如果仍沿用以前的设计则自然将暴露出它的不足,进而会出现需要更高的维护成本。重构思想的提出,就是用于帮助项目演进设计的,当然,在运用重构方法时,应尽可能保证项目有足够的单元测试用例,以预防重构时又引入新的缺陷。重构不只是一个词,其核心应当是一个方法论,一个用于优化设计的方法论。 编程好习惯 设计阶段输出的结果就是蓝图,但好的蓝图并不能保证最后的质量一定就好。拿造房子打个比方,图纸设计得再好,如果建造时用的材料不过关,那最终的房子一定好不了。那软件开发中的“建筑材料”又是什么呢?就是程序员所编写的代码。如何保证其质量呢?这需要通过良好的编程习惯去保证。 在现实的项目中,设计有可能与编码会有一定的揉合,即通过进行一定的编码来辅助设计。这种实践方式并不影响这里将设计与编码分为两个质量保证关键要素。 验证 验证很容易让人想到质量保证的常用方法之一,即测试。但验证应当包含更多的内涵,比如求证软件需求是用户所希望的就是其中的一种。 对于验证的理解仍需要拿房屋的建造作为一个比方,以便加深理解。在房屋的建造过程中,当建筑材料到了工地以后,需要对其进行检验,以保证它的质量是合格的,否则不能用于建造。对应于软件开发,这个阶段就是单元测试。当软件工程师编写了代码以后如何保证代码的行为是其所希望的呢?那只能通过单元测试去验证。房子建造好了以后,还得对房子进行整体的验收以确保其最终是合格的。比如抽查墙壁所使用的水泥与沙的配比是合适的。虽然水泥和沙在进入工地时都经过了质检且是合格的,但在建造的过程中需要按一定的比例混合它们以作建筑粘合剂,而混合比例将确定粘合强度。在软件开发过程中,软件集成测试就如同房子在建造好了以后的验收。 从上面的比方能得出几个结论。第一,在软件开发过程中单元测试是必不可少的。它的缺少如同将没有检验过的建筑材料用于建造一样。第二,单元测试应当在集成测试之前完成。有的项目在一开始时并没有单元测试流程,但后来发现需要增加这个环节,于是出现了集成测试完成了以后,再进行单元测试这种情形。这种情形还是有点怪怪的,这如同房子已造好了,再将墙打掉去检查里面的砖是否是好的一样。“将墙打掉检查砖”这种行为的勇气虽然可佳,但是如果尽早地在项目中部署单元测试就能避免这种怪现象的发生。 集成(包括开发集成和系统集成)测试在软件行业被广泛采用以保证软件质量,但单元测试对于软件质量保证的重要性在整个行业还缺乏广泛的、深刻的认识,其更多地被当作是负担而不是一种有效的质量保证手段。

软件测试的意义是什么
答:问题一:软件测试的意义和作用是什么 软件测试是为了发现错误而执行程序的过程。目的是为了在投入生产性运行之前,尽可能多地发现并排除软件中潜藏的错误,从而提高软件的质量 问题二:软件测试是什么以及目的 软件测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。软件测...

软件测试的原则???
答:2、IPO原则 测试用例由测试输入数据和与之对应的预期输出结果这两部分组成。3、独立测试原则 独立测试原则。软件测试工作由在经济上和管理上独立于开发机构的组织进行。程序员应避免检査自己的程序,程序设计机构也不应测试自己开发的程序。软件开发者难以客观、有效地测试自己的软件,而找出那些因为对需求的...

软件测试分为哪几个阶段,每个阶段都是干什么的?
答:? 按照开发阶段划分,软件测试可分为单元测试、集成测试,系统测试和验收测试。 单元测试:针对每个单元的测试, 以确保每个模块能正常工作为目标。 集成测试:对已测试过的模块进行组装,进行集成测试。目的在于检验与软件设计相关的程序结构问题。 确认(有效性)测试:是检验所开发的软件能否满足...

零基础如何学习软件测试?
答:主要是协议之类的(如netbeUI协议,IPX/SPX,TCP/IP,OSI等这些协议),然后在把app跟web测试的测试方法及流程,测试思路,前后台的逻辑分析,包括测试点及测试的范围,都细心标记,主要是工具的结合使用。这样能为你后续的工作提高效益,也不至于出现在工作中不知道怎么介入和开展工作的情况。三、软件测试...

测试分为哪几个阶段?
答:问题一:软件测试分为哪几个阶段,每个阶段都是干什么的?? 按照开发阶段划分,软件测试可分为单元测试、集成测试,系统测试和验收测试。 单元测试:针对每个单元的测试, 以确保每个模块能正常工作为目标。 集成测试:对已测试过的模块进行组装,进行集成测试。目的在于检验与软件设计相关的程序结构问题。 确认(有效性)...

软件测试的步骤
答:4、准备测试环境和测试数据,包括测试系统部署的硬件环境和软件环境;5、执行测试用例,提交测试过程中发现的bug,并通过版本迭代进行回归测试,验证相关的bug;6、完成内部软件系统的功能测试,系统测试之后,系统趋于稳定,提交客户进行验收测试;7、编写软件测试报告;8、对测试过程进行总结,并将测试过程中...

软件测试主要做什么工作?
答:第二步.完成产品的集成测试与系统测试 软件测试分四个阶段:单元测试、集成测试、系统测试、验收测试。把各段或各模块的代码合成到一个组合当中,合成之后就叫做集成。集成测试就是测合成之后的诊断代码以及整个模块,更重要的是要测合成之后的数据传输,也就是测两者之间的接口有没有完成正确的数据传输。...

软件测试工程师工作总结
答:软件质量越来越受到人们的关注,软件测试作为新兴行业有很多不完善的地方。下面我整理了软件测试工程师 工作 总结 ,希望对你有帮助。 软件测试工程师工作总结篇一 现在软件测试工作越来越收到企业的重视,许多人员也投入到软件测试的行列中来,软件测试工程师的队伍越来越壮大。但是如何成为一名优秀的软件测试工程师呢?这...

我们应该在软件流程的什么阶段开始性能测试?
答:本来想进来看看别人的高论,不过有些失望,我来说点靠谱的吧。一般是在系统测试的阶段和验收测试的阶段做正式的性能测试。在此之前,做的性能测试都只能参考,不能作为结论。只能算是开发过程中的性能调优而已。原因是系统平台不一样时性能测试的结果不准确。

软件生命周期划分成哪些阶段?
答:4、软件编码阶段:是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。5、软件测试阶段:在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。6、软件运行和维护阶段:是...