关键词:分析程序实质性分析程序重大错报风险审计证据认定
分析程序,是指审计人员在研究分析不同财务数据以及财务数据与非财务数据时,通过财务数据之间的相互关系,及非财务数据对财务数据的印证对财务信息的合法性、公充性作出评价。分析程序还包括在必要时对识别出的,与其他相关信息不一致或与预期值差异重大的波动或关系进行调查。
审计人员在不同环节实施分析程序的目的:(1)在进行风险评估程序时,通过对被审计单位及其环境的了解评估两个层次的重大错报风险。(2)在实施实质性程序时,当使用分析程序比细节测试更能有效地将认定层次的检查风险降至可接受的水平时,可将分析程序用作实质性程序。(3)为确定财务报表整体是否与其对被审计单位的了解一致,在审计结束或临近结束时使用分析程序对财务报表进行总体复核。分析程序的适用性:
一、分析程序在风险评估程序中的适用性
分析程序可以帮助审计人员发现财务报表中的异常变化,或者预期发生而未发生的变化,识别存在潜在重大错报风险的领域。进行风险评估时,审计人员应重点关注关键账户余额、趋势和财务比率的关系,对其形成一个合理的预期,与被审计单位已记录的金额、依据记录金额计算的比率或趋势相比较,如果分析程序的结果显示的比率、比例或趋势与审计人员对被审计单位及其环境的了解不一致,并且被审计单位管理层无法提供合理的解释,或者无法取得相关的支持性文件证据,则表明被审计单位的财务报表可能存在重大错报风险。例如:甲公司2010年度财务数据显示主要产品的销售收入增长较大,在生产成本中占较大比重的原材料成本大幅上升,毛利率亦有较大增长。审计人员通过对被审计单位及其环境的了解得知,该企业所在行业市场竞争激烈,预期销售收入很难有所增长。审计人员在此基础上分析的结果表明在销售收入不增长的情况下,由于销售成本的大幅上升,毛利率应有所下降,但财务信息显示的结果与审计人员实施分析程序的结果背道而驰,审计人员可能据此判断被审计单位的主营业务收入和主营业务成本存在重大错报风险。分析程序可以帮助审计人员识别那些表明被审计单位持续经营能力问题的事项。如:大海公司2010年度财务报表按照持续经营假设编制。但审计人员通过分析发现大海公司存在巨额对外担保,且有大额逾期债务无法偿还,在连续三个会计年度发生亏损的情况下又遭受水灾,主要财务指标显示其财务状况严重恶化,管理层采取的应对措施,未能有效改善大海公司的持续经营能力。因而无法判断该公司按照持续经营假设编制2010年度财务报表是否适当。风险评估程序中运用的分析程序所用数据汇总性比较强,主要是对财务报表中账户余额及其相互关系的分析,不足以提供很高的保证水平。在此阶段中实施分析程序要注意与询问、检查和观察程序相结合。
二、分析别程序在实质性程序中的适用性
将分析程序用作实质性程序是实质性分析程序。实质性程序包括细节测试和实质性分析程序。适当运用实质性分析程序可以减少细节测试的工作量,节约审计成本,降低审计风险,使审计工作更有效率、效果。如:N公司在某一会计期间对既定数量的员工支付固定工资,审计人员根据这一数据运用分析程序非常准确地估计出这一期间的工资总额,获取了财务报表中关于该项目的审计证据,从而减少了细节测试的范围。另外,像超市这样的零售企业,其毛利率是得到同行业广泛认同的,审计人员可以通过有效实施实质性分析程序,为已记录金额的合理性提供支持性证据。审计人员要针对评估的重大错报风险,确定对特定认定实施实质性分析程序的适当性。当评估的重大错报风险很低时,可能仅实施实质性分析程序足以获取关于某一认定的充分、适当的审计证据。鉴于实质性分析程序能够提供的精确度受到种种限制,评估的重大错报风险水平越高,审计人员应当越谨慎使用实质性分析程序。当评估的重大错报风险较大时(如:针对销售订单处理的内部控制存在缺陷)对与应收账款相关的认定,审计人员可能更多地依赖细节测试,而非实质性分析程序。针对特别风险(需要特别考虑的重大错报风险,如:舞弊;异常或超出正常经营过程的重大交易;重大关联方交易等)实施实质性程序时,由于应对特别风险需要获取具有高度相关性和可靠性的审计证据,此时审计人员仅实施实质性分析程序是不够的,必须与细节测试相结合才能获取充分、适当的审计证据。设计和实施实质性分析程序时审计人员应考虑可获得信息的来源、可比性、性质和相关性及与信息编制相关的控制,评价在对已记录金额或比率作出预期时所使用内部和外部数据的可靠性,关注意对已记录金额或比率作出预期时评价预期值是否足够精确以识别重大错报。数据的可靠性越高,预期的准确性也将越高,分析程序会更有效。
三、分析程序在总体复核中的适用性
【关键词】C#;可视化;编程;培养
软件开发需要大量的开发人员。软件公司都愿意招聘具有开发经验的开发人员,刚毕业的大学生,在学校的学习期间更多地关注书本上的理论知识,学与用相互脱节,很少具备实际软件开发能力和经验,结果造成一方面IT人才短缺,另一方面却又是相当一部分大学生求职无门。怎样采取措施,培养毕业生的软件开发能力,具有十分重要的现实意义。近年来,.NET技术在软件开发中占据极其重要的位置,C#作为一种面向对象的计算机语言,兼备C、C++、Java和VisualBasic等语言的优点,是进行.NET开发的首选语言,使用安全而又相对简单。
1理解和把握现代编程思想
采用面向对象的编程思想。相比结构性的程序,面向对象的程序结构体改称为类,成员分为公有和私有类型,并且出现类的继承和多态。面向对象的编程思想可以让程序更适合人的思维方法,有助于采用系统分析和软件工程的方式来完成。
其次,具备团队合作观念,重视人与人之间的沟通和理解能力。团队合作可以完成个人无法独立完成的大项目,另外集合众人智慧有利于产生新创意,在很大程度上可以实现优势的互补。团队中相互交流,在研发过程中遇到的困难才能最有效、最快地得到解决。
2项目的准备工作与需求分析
2.1制定项目实施标准
对于一个大型的系统工程来说,在开发过程中,从开始的需求分析到最终的代码实现、系统测试,会产生很多文档,这些文档要统一规范,确保在开发过程高效管理。在该环节采用任务实施主体多元化和实施内容多样化的形式。
2.2分析需求
所谓“分析需求”,是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。就是确定要计算机“做什么”,要达到什么样的效果。很多人认为需求分析是整个软件工程中最简单的一个步骤。但实际上,需求分析是整个开发过程中最关键的一个环节。如果不能做好需求分析,那么最后的软件产品很难达满足顾客的需要,也无法在规定的时间里完成项目。可把开发团队的人员分为两个小组,分别扮演用户与项目开发者角色,站在不同角度共同去分析需求。另外,深入用户进行调查研究,明确要开发产品的性能、功能需求等综合要求。
3项目实施
该阶段实质上就是进行系统设计,是把需求转化为软件系统的最重要的环节,设计的优劣在根本上决定了软件系统的质量。
3.1设计系统体系结构
体系结构就是软件的框架,优秀的体系结构意味着稳定和高效。最常见的体系结构是层次结构,大部分项目可以用层次结构表示:把事情分为多层,一层一层地去做,每一层次就是一个模块,高层的工作总是建立在低层的工作之上。分层结构中要处理好相邻层之间及上下层之间的接口。
刚开始练习编程题时,先把要解决的问题的过程大致分为几个大步骤,并且把每一步骤用简练的文字总结出来。然后在每一个大步骤中再细分若干中等步骤,接着再细分??这样逐步细化,直到细分得到的步骤与计算机编程语言中的某些语句(或功能模块)的功能一样或相近为止。把这些解决问题的步骤再适当地进行整理、完善和优化,就可以得到一个功能比较完整的,具有简单层次的解决问题的方案,这一过程为设计“程序文档”。文档中的每一步,基本对应着程序中的一个或一组语句.文档中的步骤顺序,基本对应着程序的流程。
3.2模块设计
在软件开发的过程中,项目按照模块化思想拆分成若干个相对独立的功能模块,如:变量定义块、初始化块、输入块、处理块、输出块等。一个大模块可分为多个独立的小模块,一个小模块的行数以不超过一个显示屏幕为准,便于分析程序。整个项目由几组或几位开发人员分别完成,最后合并成为一个大的功能块。软件的体系结构设计完成后,各个模块应应放在体系结构的什么位置、对应什么功能都已经确定。习惯上从功能上划分模块,保持各个模块的功能独立,从而提高模块的利用率且便于测试和维护。在相对独立的基础上确保各个模块能够进行信息交流和相互配合,增强在软件开发过程中相互配合的团队意识。
3.3算法设计
对于划分好的各个功能模块,它们之间相对独立,团队成员分工合作,设计算法,并将算法软化为事件、方法的具体任务代码,编写、调试可分别进行,然后将代码合起来。在此过程中主要强调项目实施注意事项,比如,使用公司内部的标准文档样式,唯一的用词标准、规范准确的程序书写,采用缩进式格式,合理充分地利用注释语句,增加程序的可读性,使其他编程者快速准确地了解本程序要解决的问题、解决问题的方法和思路。注意程序录入的技巧如对成对的符号,不管成对符号之间的内容,先输入成对符号,再输入成对符号之间的内容等。这将能使学生在开发过程中有效地避免很多不必要的麻烦
3.4软件界面设计
一个软件界面就如同人的外表,影响用户对软件的第一印象。象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好。Microsoftvisualstdio工具集成了C#语言的开发环境,可以快速地开发出各种形状的图形用户界面。界面设计中要保持一致性,在尊重用户习惯的基础上尽可能采用在相同应用领域中最流行的界面。
4项目测试与验收
众所周知,一个软件产品上线运营之前,都要进行严格的内部测试和公开测试。测试的目的是为了发现尽可能多的缺陷,并期望通过改错来把缺陷统统消灭,以期提高软件的质量。不论是对软件的模块还是整个系统,总有共同的内容要测试,如正确性测试,容错性测试,性能与效率测试,易用性测试,文档测试等。“白盒测试”是指开发人员从程序内部对上述内容进行测试,而“黑盒测试”是指独立的测试人员从程序外部对上述内容进行测试。项目测试完毕,可邀请用户进行验收。
5考核与评价
对于初学者来说,一个项目完成后,要邀请有经验的教师或开发人员对各个项目的实施情况进行合理的考核与评价,及时发现存在的问题与不足,快速积累开发经验,尽快适应企业需求。
由于.NET技术在软件开发中的应用广泛,容易上手,能有效地解决了大学生毕业时动手能力弱、实践经验少,而企业却大量需要“拿来即用”型的实战人才的要害症结。总之,树立良好的软件开发思想、熟练掌握和运用C#语言特性进行软件开发,同时培养良好的沟通能力、自觉的规范意识、独立分析问题解决问题的能力,将会使学生掌握良好的专业核心能力,很快具备行业认可的通用能力。
【参考文献】
[1]韩敬峰.基于Web的高校考试系统的设计构思[J].吉林教育学院学报,2010.
[2]张小刚.自行研制软件系统的可行性[J].中国农村教育,2004.
[3]胡晓光.在C语言教学过程中培养学生软件开发能力[J].天津市经理学院学报,2007.
摘要:内部审计人员的主要作用是独立、客观地评估银行活动,维持或提高银行的风险管理,有效的内部控制,公司治理。他们这样做的可靠性评估的有效性,充分性,以及会计,操作,和管理控制。下面笔者就从内部审计的程序来谈一谈内部审计。
关键词:内部审计;审计程序;审计方法;审计报告
一、内部审计程序
一个国家银行的内部审计程序包括政策管理内部审计功能的程序,包括风险审计程序和内部审计外包工作,如适用。而小银行的审计程序可能未发现的那些更正式,更复杂的银行,所有有效的审计程序应包括一个使命陈述或审计章程,风险评估,全面审计计划,审计周期,审计工作程序,抽样方法和技术,审计报告,跟踪活动,专业开发项目,和质量保证程序。
二、使命陈述或审计章程
使命陈述或审计章程应轮廓的目的,目标,组织,部门,和内部审计经理,审计部,审计人员和审计委员会的职责。特别是,合同应授予审计部门直接访问任何记录,文件的主动性和授权,或数据(包括管理信息系统和板/委员会分钟)需要有效地检测任何银行的活动或实体。授权还应包括访问和通信与该银行的任何职员。审计部门应制定章程,定期审查它的任何必要的改变。审计委员会应当批准或确认审计章程和章程,应当在银行。
三、风险评估
风险评估应该文件银行的重要业务活动及其相关的风险。这些风险评价的结果指导审计计划和审计周期和独立审计程序的范围和目标的发展。“风险评估和风险基础审计”一节,这本小册子提供风险评估的进一步细节。
四、总体审计计划
审核计划应包括内部审计的预算和计划过程,应说明审计目标,计划,编制,报。审计计划通常包括:整体和个人的审计目标,总结风险评估和合规问题的每个审核区或商业活动,时间和计划的内部审计工作频率,和资源预算(预算人员的工作时间)。审计委员会应当正式批准的总体审计计划至少每年一次。内部审计师应该提出任何更新的审计计划,审计委员会定期按照既定政策(虽然季度是典型的)。更新的审计计划应该比较实际的工作进行计划的审计和审计时间和解释的差异从批准的计划。
五、审计周期
审核周期应确定审计的频率。审计的频率通常是由风险评估的业务活动或领域需要审核和员工和可利用的时间。它通常是不实际审核每一个地区或业务活动每年。高风险领域,如资金,贷款,或投资/金融业务,通常比低风险的领域如银行担保的处所审核更频繁。此外,审计人员必须考虑的监管要求和指南。
六、审计工作方案
每个审计领域审计工作程序应建立范围和审计程序的时间,程度测试(包括选择要测试的项目标准),和结论的基础上。工作计划应详细,覆盖了银行经营的所有领域,并引导信息采集的审计师,记录程序执行,到达的结论,并出具审计报告。通过完成审计工作程序,内部审计师应该能够达到满足内部审计目标的结论。工作程序通常包括程序:适当的突击审计;控制选择审计记录;审查和评价的政策,程序,和控制系统;风险和控制评估;审查法律,法规,和裁决;样本选择方法和结果;验证选定的交易或平衡通过证明/总账明细记录相关的总帐/控制记录,检查文档,直接确认和适当的后续行动等。
七、抽样方法和技巧
抽样方法和技术来选择,验证,和测试交易,控制,和帐户结余被审核期间。审计工作计划应确定测试目标,达到目标的程序,并审查多少项目(即,所有项目在一组或一个项目的样品)。当审计师选择抽样审查,他们必须决定是否使用统计或统计抽样方法。审计人员经常使用统计抽样的小的人群时,内部控制是有效的,它是不符合成本效益的使用统计抽样。使用的审计统计抽样方法在量化是适当的,他们想推断具有一定的可靠性和精度,样品的特性是表示整个人口。在这两种情况下,审核员确定基于相关因素的样本大小,选择有代表性的样本,运用审计程序,评估的结果,与文献的结论。没有硬性规定,关于“代表性的样本大小适当。”表提供统计样本的基础上所需的精度和可靠性水平。当评估审计抽样过程,考官将审查审计有关的文件的采样目标,包括程序:建立采样目标,定义人口和审查的特点,确定样本大小,选取样本的方法,和评价样本结果/结果。
八、审计报告
审计报告应向董事会和管理是否一个部门,部门,或活动坚持的政策,程序,和适用的法律或法规,是否操作流程和内部控制是有效的,什么样的纠正行动的银行已经或必须采取。审计师必须以适当的方沟通的调查结果和建议和分发审核报告实际情况尽快完成相关工作。审计工作底稿应充分的文档和支持这些报告。通常有两种类型的审计报告如下。
审计活动的个体内部审计报告的结构应符合银行的内部审计职能的需要与被审核的部门。报告通常包含以下信息:的主要结果和结论的总结,包括对重大缺陷的根本原因识别;审计的范围和目标;详细审计结果,包括任何整体分配审计评级;建议,如果有,包括得到好处;管理的承诺,正确的材料的弱点。一般来说,个体的内部审计报告应立足于讨论审计问题;建立的标准是什么;目前存在什么问题;任何指出问题的根源;什么问题的影响或可能,和
建议纠正问题。
完成审核后,内部审计师通常与部门经理讨论草案的审核报告,纠正任何不准确的信息,达到管理层的承诺和行动的协议。最终的审计报告,再分发给管理人员有责任和权力实施所有建议的纠正行动。据审计委员会的报告,应准备的内部审计经理的常规部分(OCC建议至少每季度)和与审计委员会讨论报告。执行总结报告或审计信息包可能包括:会议的年度审计计划状态;在完成审核的方法;活动报告,并推迟或取消;招聘或培训报告;讨论重大会计问题和监管报告和结果;总结它和消费者的合规性审计;风险评估或总结的方法;跟踪优秀审计和控制问题的报告;和其他信息审计委员会或内部审计师认为适当的。
九、后续活动
跟踪活动应允许内部审计师在确定任何商定的行动和关注未来的审计活动的新领域的配置。审核员应执行后续活动的及时和结果报告董事会或审计委员会。跟进一般包括第一获取和审查管理的响应并确定纠正措施是及时和有效的。
十、专业发展计划
这些程序应提供银行的审计人员的继续教育机会和职业发展方向,内部培训,外部培(例如,正式或自学课程,由行业协会,提供专业协会,或其他供应商)。
十一、质量保证计划
在这样的程序,内部和外部定期评估内部审计部门的工作来帮助提高审计业务和银行提供的价值。审计或审计部门的业绩通常是与银行建立的标准来衡量,审计章程或使命声明,和任何其他标准确定适当的内部审计职能。(作者单位:河北经贸大学)
参考文献:
[1]郑志刚,2004,“公司治理机制理论研究文献综述”,《南开经济研究》第5期。
[2]王光远,2005,“关于中国内部审计准则的若干基本问题(代前言)”,载中国内部审计协会,2005,《中国内部审计规范》,中国时代经济出版社。
关键词:软件维护;软件的可维护性;可维护性复审
中图分类号:TP311.53文献标识码:A文章编号:1007-9599(2013)02-0000-02
软件维护工作处于软件生存周期的最后阶段,所有活动都发生在软件交付并投入使用之后,其费用有时高达软件总费用的80%。软件在运行过程中,测试阶段未能发现的潜在软件错误和设计缺陷、增加与其他程序的良好接口、新功能的添加、软件运行环境的变化等原因,都要求对软件进行维护。因此,应充分认识到软件维护工作的重要性,提高软件的可维护性,减少维护的工作量和费用,延长软件的使用寿命,让其创造更多的价值。
1软件维护概述
1.1软件维护
所谓软件维护是指软件系统交付使用后,为改正软件运行过程中发现的错误,或因满足新的需求而加入新功能的修改软件的过程。所有软件的维护申请都应采用标准化的格式,软件维护人员通常提供统一的维护申请单,由用户根据需要进行填写。维护人员将申请单提交给系统管理员进行评估,核准后,将之视为本次维护任务规划的依据。维护任务完成后,应保存好各项维护记录,利用这些记录可以构成一个维护数据库。
1.2软件维护的内容
软件维护的内容根据起因可分为四类。
(1)正确性维护。是指纠正软件在系统开发阶段已存在但系统测试阶段未能发现的错误。软件测试时,不可能排除软件系统中的所有错误,软件交付后,用户将成为新的测试人员,在使用过程中,一旦发现错误,可向维护人员报告并要求维护。该维护工作占维护总工作量的约五分之一。
(2)适应性维护。是指为适应环境的变化而进行的软件修改。一般应用软件的使用寿命较长,但计算机科学技术却发展迅速,硬件基本是一年半就一代,操作系统不断推出新版本,外部设备和系统其它元素也是频繁升级换代,这些都使得适应性维护工作成为必要且经常发生的行为。
(3)完善性维护。这是为扩充功能和改善性能而进行的软件修改。主要是对已有的软件增加一些原来在需求分析阶段中没有涉及到的新功能和性能特征。此外,还包括为提高软件处理效率,而进行的程序改进和优化工作。该方面的维护通常占整个维护工作量的一半以上。
(4)预防性维护。这是为了进一步改善应用软件的可靠性和可维护性,为今后进一步改进软件奠定基础。这类维护活动包括逆向工程和重构工程。目前该类维护工作相对较少,占全部维护工作的大约4%左右。
2软件的可维护性
软件的可维护性是指软件能够被理解,并纠正其中出现的错误和缺陷,以及为满足新的需求进行修改和扩充的容易程度。它是指导软件工程各阶段工作的一项基本原则。
2.1影响软件可维护性的因素
软件的可维护性是软件开发各阶段的关键目标,主要由三个方面的因素影响。
(1)可理解性。是指人们通过阅读程序源代码和软件相关文档,就能理解软件的结构、接口、功能和内部过程的容易程度。模块化和结构化的设计、详细的文档资料以及良好的高级程序设计语言等,都对改进软件可理解性有重要贡献。
(2)可测试性。是指人们论证软件正确与否的容易程度。它取决于软件容易理解的程度。良好的文档资料有利于测试,此外,软件的结构、高性能的测试工具以及周密计划的测试工序也是至关重要的。维护人员应能得到软件开发阶段用过的测试方案和用例,以便进行回归测试。
(3)可修改性。是指软件容易修改的程度。它与软件的设计原理和规则有直接关系,耦合、内聚、局部化、作用域与控制域等,都影响软件的可修改性。
以上三个可维护性因素关系密切。维护人员只有在正确理解程序的基础上才能对其进行修改,并且,如果不能进行完善的测试,则看似正确的修改也可能会引出其他故障。
2.2提高软件可维护性的方法
一个可维护的软件应是可理解的、可测试的、可修改的。但要同时很好地实现这三个目标,需要付出相当大的努力,而且也不一定能成功,因为这三个可维护性因素的相对重要性会随软件的用途和应用环境的变化而变化。因而,应对软件的可维护性因素赋予不同的优先级。这样不仅有助于提高软件的质量,也对软件生存周期的费用产生较大的影响。
(1)使用结构化程序设计技术。结构化程序设计可使软件各模块的结构和模块间的关系都相对标准化。
(2)选择维护性能好的程序设计语言。选择不同的程序设计语言,对软件的可维护性也有产生较大地影响。明显地,高级语言比低级语言更容易理解,但同样是高级语言,可理解性也有较大差异。比如,用户使用第四代编程语言开发应用软件和使用普通高级语言相比具有质量高、效率高、易理解、易扩展的优势。第四代编程语言采用面向对象思想设计的结构,因而可读性好,且由于继承特性的存在,即使需求发生变化,维护工作也只是在局部模块中进行,因而维护起来方便也成本低。
(3)健全文档。文档是影响软件可维护性的决定因素,一般包括用户文档和系统文档。由于软件系统在长期的使用过程中必然会经历多次修改,因而文档比程序代码更重要。文档结构要标准化、容易理解。对软件的任何修改都应在相应的文档中反映出来,即文档应与软件当前状况相对应,否则在以后的维护工作中,会增加维护工作的难度。
(4)可维护性复审。可维护性是所有软件都努力追求的一个基本特征,在软件工程的每一个阶段都应考虑提高软件可维护性的可能,在每个阶段结束前的技术审查和管理复审中,应着重对维护性进行复审。在需求分析阶段的复审中,应对将来可能修改和可以改进的部分加以注释和说明,对软件的可移植性加以讨论并考虑可能影响软件维护的系统界面;在设计阶段复审期间,应该从易于维护和提高设计总体质量的角度出发,全面评审总体结构设计、数据结构设计、过程设计和人机界面设计;代码复审阶段主要强调编程风格和内部文档这两个因素;测试复审中应注意暗示程序中可能需要做预防性维护的部分。正式的可维护性复审放在系统测试完成之后,称为配置复审。其目的是减少混乱,提高软件生存率。同时在完成每项维护工作之后,都应对软件维护本身进行仔细的复审。
3结束语
软件维护是软件生存周期的最后阶段,也是耗费时间和精力最多的阶段。在软件运行时,需有计划地对其进行改正性、适应性、完善性或预防性维护。软件的可维护性是衡量软件质量的重要指标,也是延长软件寿命的重要因素,本文在分析了影响软件可维护性因素的基础上,给出了提高软件可维护性的方法。
参考文献:
[1]张海藩.软件工程导论[M].北京:清华大学出版社,2003.7
[2]陈平,褚华.软件设计师教程[M].北京:清华大学出版社,2004.7
关键词:定义;因素;组织管理
一、软件测试的定义
软件测试(Softwaretesting)是软件生存期(Softwarelifecycle)中的一个重要阶段,是软件质量保证的关键步骤。通俗地讲,软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码进行最终复审的活动。1983年IEEE提出的软件工程术语中给软件测试下的定义是:"使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别"。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。
从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是"为了发现错误而执行程序的过程"。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
二、影响软件测试的因素
影响测试效率的因素除了测试方法之外,主要因素还有人为因素、软件类型、错误类型、测试充分度等。下面对这些因素作一个简要分析。
1.人为因素
软件测试中的许多工作是由人来完成的,因此,人为因素是影响测试效率的一个重要方面。这样的差异并非偶然,这是因为测试人员在应用一个测试方法时具有很大的灵活性,从而使测试人员的经验和学习能力可以有较大的发挥余地。所以只能采用越来越严格的测试方法和过程来有效地避免人为因素对测试效率的影响。
2.软件类型
软件类型也是影响测试效率的一个重要因素。即使是同一个测试者,测试不同类型的软件的效率和发现软件错误的能力也是不尽相同的。测试什么类型的软件的效率较高则因人而异,这往往与测试者的相关知识、经验与专业训练有关。
3.测试充分度
测试充分度反映了一个测试是否得到了良好的执行,它直接关系到测试的效率。1993年Frankl和Weiss发现,只有当充分度十分接近100%时,才能使测试发现错误的能力得到发挥。因此,在测试软件时,必须设法使充分度十分接近100%,否则将难以保证测试质量。
三、加强对测试工作的组织和管理
随着软件开发规模的增大、复杂程度的增加,以寻找软件中的错误为目的的测试工作就显得更加困难。然而,为了尽可能多地找出程序中的错误,生产出高质量的软件产品,加强对测试工作的组织和管理就显得尤为重要。
从软件的生存周期看,测试往往指对程序的测试,这样做的优点是被测对象明确,测试的可操作性相对较强。但是,由于测试的依据是规格说明书、设计文档和使用说明书,如果设计有错误,测试的质量就难以保证。即使测试后发现是设计的错误,这时,修改的代价是相当昂贵的。因此,较理想的做法应该是对软件的开发过程,按软件工程各阶段形成的结果,分别进行严格的审查。
虽然测试是在实现且经验证后进行的,实际上,测试的准备工作在分析和设计阶段就开始了。
1.测试的过程及组织
当设计工作完成以后,就应该着手测试的准备工作了,一般来讲,由一位对整个系统设计熟悉的设计人员编写测试大纲,明确测试的内容和测试通过的准则,设计完整合理的测试用例,以便系统实现后进行全面测试。
在实现组将所开发的程序经验证后,提交测试组,由测试负责人组织测试,测试一般可按下列方式组织:
(1)首先,测试人员要仔细阅读有关资料,包括规格说明、设计文档、使用说明书及在设计过程中形成的测试大纲、测试内容及测试的通过准则,全面熟悉系统,编写测试计划,设计测试用例,作好测试前的准备工作。
(2)为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试和验收测试。
(3)代码会审:代码会审是由一组人通过阅读、讨论和争议对程序进行静态分析的过程。会审小组由组长,2~3名程序设计和测试人员及程序员组成。会审小组在充分阅读待审程序文本、控制流程图及有关要求、规范等文件基础上,召开代码会审会,程序员逐句讲解程序的逻辑,并展开热烈的讨论甚至争议,以揭示错误的关键所在。实践表明,程序员在讲解过程中能发现许多自己原来没有发现的错误,而讨论和争议则进一步促使了问题的暴露。例如,对某个局部性小问题修改方法的讨论,可能发现与之有牵连的甚至能涉及到模块的功说明、模块间接口和系统总结构的大问题,导致对需求定义的重定义、重设计验证,大大改善了软件的质量。
(4)单元测试:单元测试集中在检查软件设计的最小单位-模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。由于模块规模小、功能单一、逻辑简单,测试人员有可能通过模块说明书和源程序,清楚地了解该模块的I/O条件和模块的逻辑结构,采用结构测试(白盒法)的用例,尽可能达到彻底测试,然后辅之以功能测试(黑盒法)的用例,使之对任何合理和不合理的输入都能鉴别和响应。高可靠性的模块是组成可靠系统的坚实基础
(5)集成测试:集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。
2.测试的人员组织
为了保证软件的开发质量,软件测试应贯穿于软件定义与开发的整个过程。因此,对分析、设计和实现等各阶段所得到的结果,包括需求规格说明、设计规格说明及源程序都应进行软件测试。基于此,测试人员的组织也应是分阶段的。
(1)软件的设计和实现都是基于需求分析规格说明进行的。需求分析规格说明是否完整、正确、清晰是软件开发成败的关键。为了保证需求定义的质量,应对其进行严格的审查。
此软件项目设计阶段的主要职责就是对软件工程的具体编程使用语言、如何选择操作系统以及运行平台等进行概要设计,并且还要选择适合的瀑布式开发方式,进而根据特定的市场需求对潜在的编程、模型进行选择。同时,还要对具体编程项目的分析情况以及设计编码情况进行正确量定,建立起科学合理的分析文档。此外,在此设计阶段还要对目标系统结构中的模块与接口、硬件和软件配置、数据具体结构等进行设计。
2编码单元测试与联合测试
软件开发测试人员一定要根据特定的软件开发工具以及具体研发人员的特长设定研究编码,并对每个软件测试单元和数据库定义进行相关操作,通过相应的语言开发工具来进行正确研发、调试、测试使软件更加符合用户的具体需求。软件开发者需要严格按照规定的程序将各个软件单元、模块以及硬件、网络和其它系统资源联系起来,通过集中化的测试来达到试运行的要求。在对系统集成和测试结果进行综合评审时,要对集成测试分析报告进行正确研究,确保结果的正确性。测试流程程如下图1所示。
3试运行以及后期维护
软件开发人员首先要在试运行之前选择合适的应用和试点范围,在做好各项试点记录后对运行支持的系统进行总结。此外,还要做好各项数据转换、系统切换工作,确保新旧系统能够正常运行。等新开发软件程序投入应用后,需要进行后期维护操作,并辅以适当的修改。主要包括有以下三大主要步骤:第一,分析和理解软件工程程序、修改程序、重新验证程序。其中分析和理解程序这项维护操作的核心目的是能够准确把握程序的功能和目标,这对于提高软件的正确性具有重要意义。第二,修改程序。要有计划、有目的、有规则性地对软件进行修改,通过对相关程序设计的认真修改来切实达到应用性效果。第三,重新验证程序。对软件程序进行重新验证的目的就是通过对其进行修改来进一步提高其正确性。
4结语