Reliabilityassuranceinthelifecycleofsoftware??
?
摘要:本文将软件过程视为一个周而复始又螺旋推进的进化过程,软件一个版本的生存期看作是这个进化过程的一个周期,并依时序分为初始过程、开发过程、验证与确认过程、运行和维护过程。文中提出软件全生存期可靠性保证的设想及不同阶段可靠性保证的活动和事项。只有在软件全生存期内通过采用可靠性工程技术方法和加强对生存期中各阶段及每个阶段各环节的管理、检查、监督、控制,才可能实现软件产品预期的可靠性目标并使之获得有序而持续的改善。
主题词:软件过程软件生存期可靠性
引言?
随着计算机功能越来越强,软件规模越来越大,结构也越来越复杂。如何保证软件产品的质量和可靠性是自软件危机爆发近三十年来人们一直探求解决而至今仍未获得圆满解决的难题,因软件可靠性问题而发生重大、甚至灾难性事故时有所闻。究其原因是软件的复杂性与相对落后的软件生产方式与生产手段的矛盾未能得到根本解决。经过近三十年的摸索,发明了很多保证软件可靠性的技术、方法和工具,其中比较公认的有效途径是改进软件生产过程,引入工程化的生产方式,加强过程控制与监督,以保证软件生产过程的稳定和预防问题发生。本文将软件过程视为一个周而复始又螺旋推进的进化过程,软件一个版本的生存期看作是这个进化过程的一个周期。通过采用可靠性工程技术方法和加强对软件生存期内各阶段及每个阶段各环节的管理、检查、监督、控制,来保证软件产品的可靠性并使之获得有序而持续的改善。
1.软件生存期过程
软件生存期是软件产品从孕育阶段开始到退出使用所经历的时间历程。软件生存期过程是软件生存期内为实现软件项目或产品的预期目标而有计划进行的一系列活动或实施工作任务的总和。依时序软件生存期过程可分为初始过程、开发过程、验证与确认过程、运行和维护过程。
初始过程是软件产品孕育阶段的相关活动,包括提出初步的软件功能和可靠性、安全性等要求规范,开发单位的选择与评估,开发合同文件的准备等。初始过程是软件可靠性保证的基础。开发过程从系统分析开始到完成系统测试期间为开发满足用户要求的软件产品而开展的相关活动,包括系统分析、软件需求分析、软件设计、编码与单元测试、软件集成测试和系统测试以及中间环节的评审、检查、计划、管理等活动,软件可靠性在开发过程实现。
验证与确认过程是确认已完成开发的软件产品与软件需求分析及用户要求的一致性而进行的测试、验证和检查活动。软件可靠性在验证与确认过程得到检验,此外该过程还可以促进开发商在开发过程落实可靠性保证的技术、方法和措施。?
运行与维护过程指与软件运行相关的活动,为用户提供所需的技术支持和服务、故障或改进需求信息的采集、反馈和控制活动等。软件可靠性在该过程得到维持和提高。
KekaoXing.com
软件产品在经历上述四个过程后便完成了一个生存期、当改进需求及完成的修改累积到一定量后,将导致软件版本升级或用新的功能更强大、更完善的软件取代原来的软件,从而开始一个新的软件生存期。新的生存期不是原来生存期的简单重复,而是建立在更高基础上的一种回归现象。
2.软件生存期的可靠性保证?
2.1初始过程的可靠性保证工作
初始过程是软件一个生存期的开始,该过程的可靠性保证工作包含以下三方面内容:
2.1.1数据收集和分析
收集分析软件上一个生存期或现有类似软件的使用数据,根据待开发软件的功能要求、规模或复杂性、使用特点、开发可利用的资源(如经费、时间、可重用的软件、开发工具)等,提出待开发软件合理的可靠性要求,即在当前技术水平下是可实现的,而且在可利用的开发资源范围内进行了优化并能满足用户的需要。
[[i]本帖最后由goodrel于2007-3-522:14编辑[/i]]
a.程序设计方法应采用公认的工业标准,如面向对象的程序设计;
b.选用的软件工具符合公认的工业标准并能获得供应商的良好支持;
c.编制符合规范的设计文档,建立文档评审和会签制度;
d.采用先进的技术方法,如利用网络工作站来提高开发组的工作质量和效率;
e.设计评审,确认详细设计正确、恰当地细化了概要设计,完整又不多余地反映了用户或系统对软件的最终需求,可靠性要求在设计中得到考虑,可靠性设计的方法和原则得到恰当应用。
f.软件的设计、实现和检测人员的合理分工。
2.2.4软件测试
软件测试是为发现程序错误而执行程序的过程,也包括检查程序实现与设计要求的一致性。软件测试的真正目的是剔除软件隐含错误,提高软件的正确性,从而保证可靠性,本身便是软件开发过程中可靠性保证的一个重要环节。软件测试可靠性保证主要体现为保证测试质量、测试完备性和充分性而采用的方法和过程上,包括:
a.编制完善的测试文档,包括测试计划、测试说明和测试报告;?
b.建立问题记录、分析和纠正规范和程序修改控制与工作版本管理制度;
c.采用自测、互测与专测相结合的工作方式;
d.选择恰当的测试策略:在层次上首先和重点要做好单元测试,然后逐级上溯到软件产品级测试和系统测试;在测试方法上,要动态测试(执行程序)与静态分析相结合;在权重选择上,要一般测试与重点测试(关键功能点测试)相结合
中国可靠性网KekaoXing.com
e.选择恰当的测试和分析工具;
f.测试评审,包括测试准备工作评审和测试结果评审。
2.3验证与确认过程的可靠性保证
广义的验证与确认过程应包括从软件需求定义开始各阶段设立的评审和检查,活动本身便是可靠性保证工作的内容,操作中应注意的事项:
a.根据开发进程设立的节点按时评审或检查;
b.评审或检查应遵循用户和开发商都接受的程序、规范或指南;
c.预先确定通过和不通过的标准;
d.参与评审的人员是相应领域的专家,且与被评审对象为非直接利益相关者;?
e.评审或检查应严格认真,实事求是;
f.评审结束给出明确的结论。
下面所说的验证与确认过程,指一些专用软件(如某些军用软件),在开发商完成全部开发工作,正式交付用户使用前对软件功能、可靠性和其它特性满足开发合同和软件需求分析确认的要求而进行的检查、测试和评估活动。由于这是对软件产品最后一次审验并决定产品可否交付,因此不仅对交付的软件产品的质量和可靠性起把关作用,而且能够促进开发商在软件开发过程中扎扎实实地贯彻落实可靠性保证的方法和措施。验证与确认过程可靠性保证应注意的事项:
a.应由与软件开发商和用户无利益相关的软件测评专业机构承担软件产品的验证与确认工作,以保证审验结果的客观与公正;
KekaoXing.com
b.测评机构应与开发商共同拟制一份验证与确认活动的指导文件,确认工作内容和程序,双方的职责、权利和义务,可利用的资源和限制条件,故障(或错误)的识别、隔离和处理程序,数据处理方法,合格判据等;
c.审查开发商的测试文档,选择典型的测试用例,如等价类测试用例、边值分析测试用例等,进行复测;
d.不仅检查、运行计算机程序,还要审验随程序交付的各类文档;
e.系统运行检测,即在真实或模拟真实的物理环境下,输入系统任务剖面典型的及特别的事件,检查软件与系统的各类接口关系,软件的功能和可靠性是否满足系统要求;
f.评审,对各项审验结果进行检查,给出评价意见和验证确认的结论。
2.4运行和维护阶段的可靠性保证?
由于人们认识事物需要一个过程,因此在一定的时限内不可能提出绝对完善的软件需求,此外软件测试受开发周期和开发成本控制的限制,不可能达到完全测试。因此交付运行的软件仍然是不完善的产品,表现为:
a.随着时间的推移,用户的需求扩展了,软件的原有功能已不能完全满足用户的要求;
b.软件接受任务域内各种随机输入时,潜藏的错误也会不时地暴露出来。
因此在软件运行与维护阶段的可靠性保证工作的目标是维持软件产品的可靠性并使之获得有序和持续地改善,同时也为软件下一个生存期积累数据。该阶段的可靠性保证工作相关事项是:
a.开发商和用户形成利益相关的合作关系;
b.开发商提供及时的技术支持和服务;
c.建立并运行故障报告、分析和纠正措施系统;
d.软件的修改和补充应严格遵循配置管理的规定;
e.及时更新的用户文档;?
f.开发组与软件直接用户定期的交流;
g.建立软件运行与维护档案。
缩写说明:
I:软件审查(SoftwareInspection)?
V&V:验证和确认活动(VerificationandValidationActivity)
IV&V:独立验证和确认活动(IndependentV&V)
SRR:系统需求评审(SystemRequirementReview)
SDR:系统设计评审(SystemDesignReview)?
SSR:软件规格说明评审(SoftwareSpecificationReview)
PDR:概要设计评审(PreliminaryDesignReview)
CDR:关键设计评审(CriticalDesignReview)
Kekaoxing_com
TRR:(TestingReadinessReview)
FCA:功能配置检查(FunctionalConfigurationAudit)
PCA:物理配置检查(PhysicalConfigurationAudit)
FQR:正式鉴定评审(FormalQualificationReview)
结束语?
本文将软件过程视为一个周而复始又螺旋推进的进化过程,软件某一版本(类似硬件产品的“代”)的生存期看作是这个进化过程的一个周期,并按时序分为初始过程、开发过程、验证与确认过程、运行与维护过程。可靠性保证工作包括可靠性工程技术应用和可靠性管理两方面。可靠性工程技术应用指软件开发运用的可靠性设计、分析、评估的技术、方法和工具,可靠性管理指软件开发的计划、规范以及各阶段的评审、检查、监督、控制。软件可靠性保证工作应贯穿软件生存期的始终,落实到各阶段的每个环节。唯有这样,软件生存期中影响软件可靠性的各种因素才能得到控制,才能获得可靠性有保证且能得到有序而持续改进的软件产品。
2.1.2开发商的选择和能力评估?
要开发可靠性有保证并能达到用户预期目标的软件产品,开发商的选择至关重要。选择开发商的依据是对其开发能力的评估。一个合格的开发商,除了拥有一支合格的专业技术队伍(管理专家、开发工程师、测试工程师等)外,还应建立一套完善(至少是比较完善)的软件质量保证体系,保证软件开发过程是稳定的和可重复的,不受随机因素影响。此外开发商已开发软件产品的可靠性水平以及在产品生存期内为用户提供技术支持和服务的能力,也是评估开发商能力的重要内容。?
目前对软件开发商能力评估主要引用两个模型,即国际标准化组织推出的ISO9000模型和美国软件工程研究所(SEI)推出的能力成熟度模型(CMM)。ISO9000模型主要由ISO9001“质量体系—设计、开发、生产、安装和服务的质量保证模式”、ISO9000-3“质量体系——应用ISO9001进行开发、供应与维护软件的指南”、ISO9004-1“质量管理和质量体系要素—指南”三个标准文件描述,其中心思想是建立并实施规范的文件化的质量体系,控制软件开发所有过程的质量,预防不合格发生。CMM模型把软件开发商的能力按过程成熟度划分为五个等级,规定了每个等级的要求、特征和达到要求的建议。两个模型的共同本质是要求软件开发商建立稳定的、可重复的并能获得不断改进的软件开发过程。
www.Kekaoxing.com中国可靠性
2.1.3合同准备?
在与开发商谈判开发合同阶段,用户应把软件的可靠性要求、验收条件和方法、在软件生存期需要开发商提供的技术支持和服务等,明确地写入合同条款中,这样开发商在开发阶段开始就要考虑这些要求并落实到开发活动中,也为软件的验证与确认以及开发商参与运行和维护阶段软件的可靠性保证工作提供依据。
2.2开发过程的可靠性保证?
开发过程是开发商在规定的可用开发资源范围内,为实现软件功能及用户要求的其它特性而进行的所有开发、管理及相关活动。开发过程的可靠性保证工作是软件产品达到预期可靠性要求的关键。开发过程按时序又可分为若干阶段,如图1所示。由于软件产品开发的特殊性,可靠性保证工作要点是使每个阶段的开发活动,凡是影响产品可靠性的因素都应得到严格控制,核心是预防问题发生,而不是在发生问题后依靠纠正措施来解决问题。而一旦发生了问题,则要求及时得到解决。?
2.2.1系统需求分析?
系统需求分析描述系统的功能、结构、运行模式和环境、内外接口、设计限制等与影响软件需求有关的内容,产生描述准确和完全自相适的功能规范,其中包括系统对软件的可靠性要求。软件的可靠性问题很大一部分是由需求定义不正确或不完整引起的,良好的系统需求分析是正确和完整定义软件需求的必要条件。该阶段的可靠性保证工作体现在系统需求分析评审上,通过评审确认软件开发商完整、正确地了解了系统的功能、结构、运行模式和环境、内外接口、设计限制等要求。
Kekaoxing_com
2.2.2软件需求分析和概要设计?
软件需求分析是开发商对开发软件的功能、可靠性和其它特性满足用户或系统需求提供的一份说明。概要设计描述软件总体设计考虑,构造软件产品的基本框架。这是两个不同又有关联的开发阶段,每个阶段结束均应设立评审点,确认软件需求分析准确、完整和完全自相适,每个需求都恰当地映射到软件的框架中。当软件需求一时难定义清楚时,可以在需求分析的概要设计之间进行多次迭代,直到软件需求完全反映了用户或系统的要求。由于定义错误在后续开发活动中不易发现而且还会被放大和扩散,所以“一开始就做正确”是软件开发可靠性保证的要决。?
2.2.3软件详细设计、实现?
详细设计是在概要设计的框架内详细描述程序中各单元、功能模块的设计细节和程序的层次结构、接口关系,同时还应考虑程序的维护、测试和验证要求。程序实现是编码员将程序设计蓝图用选定的编程语言和工具转变为计算机能识别和执行的指令集。该阶段的可靠性保证工作包括: