第1章 软件开发和测试文档要求 1.1软件开发过程概述 随着计算机应用的深入,软件的规模、复杂程度不断提高,软件开发团队分工合作越来越复杂、越来越不容易控制,迫使人们不断深入地研究软件开发的规律和特点。在长期的研究与实践过程中,产生了许多类型的软件生存周期模型,通过这些模型可以跟踪、控制和改进软件的开发过程,有效地提高软件的质量。 软件生存周期模型是一个描述软件产品开发、运行和维护中有关过程、活动和任务的框架。软件生存周期模型确立了软件开发活动之间的关系,是软件开发过程的概括,也是软件工程的重要内容。 例如,图11所示W模型一般是高可靠性软件开发时的首选模型。主要是便于客户实时监控项目的进展情况,同时为软件开发顺利开展建立信心和必要的沟通协调机制。 W模型主要是突出验证与确认过程伴随着软件开发活动,验证与确认的手段可以是分析、评审和测试等方式。 图11W模型示意图 W模型强调软件验证与确认伴随着整个软件开发周期,而且验证与确认的对象不仅是程序,还应包括需求、设计等阶段的工作产品,也就是说,验证与确认是和开发同步进行的。同时,可采用测试的方式对完成的代码进行不同级别的测试。W模型有助于尽早地、全面地发现问题。例如,在需求分析完成后,测试人员就可参与到对需求的验证和确认活动中,以便及时地找出存在的错误;同时,对需求的验证与确认也有利于了解掌握项目情况和测试风险,及早制定应对措施。 不论采用何种软件开发模型,软件开发过程都应包括用户需求分析、系统分析、系统设计、软件需求分析、软件设计、软件编码、软件测试和验收与交付。各活动的主要内容如下所述。 (1) 用户需求分析。用户需求分析主要是收集用户对系统的需求,包括功能、性能、用户界面、安全性等内容。用户需求分析后应形成研制任务书或研制总要求/合同/协议等。 (2) 系统分析。系统分析是根据用户需求对系统功能、性能、接口和运行环境等进行定义的过程,完成系统分析后应编写系统规格说明和接口需求规格说明。 (3) 系统设计。系统设计是根据系统需求以配置项为单位进行设计,划分系统的组成,明确每个配置项的功能、性能、接口和安全性要求等。如果是复杂系统应先将系统划分为子系统,再进行子系统设计,划分配置项,并编写系统设计说明和接口设计说明。 〖1〗软件开发与测试文档编写指南〖1〗第1章软件开发和测试文档要求(4) 软件需求分析。软件需求分析的任务是以软件配置项为单位开展软件需求分析工作。根据软件研制任务要求、系统设计说明和接口设计说明,细化、确定被开发软件的功能、性能、接口、可靠性、安全性以及运行环境等要求,编写软件需求规格说明。 (5) 软件设计。软件设计分为概要设计和详细设计。概要设计根据软件需求规格说明,设计软件的结构,设计全局数据库和数据结构,编写软件概要设计说明;详细设计是对概要设计中产生的单元描述程序算法、接口、数据结构和数据库的详细设计(若需要),编写软件详细设计说明,其详细程度应达到根据详细设计说明能够进行软件实现的程度。 (6) 软件编码。软件编码的任务是根据软件详细设计说明、数据库设计说明进行编码和调试。 (7) 软件测试。软件测试分为单元测试、集成测试、配置项测试和系统测试。测试过程中需要制定测试计划,编写测试说明,测试执行过程中需要记录实测结果。如果有问题需要形成软件问题报告,最后还应编写测试报告。如果有回归测试时,还需要制定回归测试方案,记录回归测试的实测结果。 (8) 验收与交付。验收与交付工作主要由用户组织完成,软件开发单位需要配合软件验收测试,准备需要移交的软件产品,包括软件代码、可执行程序、文档和数据等,并保证移交的产品符合软件研制任务要求中规定的所有内容。 另外,在整个开发过程中还需要开展项目管理、配置管理和质量保证活动。相应地,需要制定软件开发计划、软件配置管理计划和软件质量保证计划,项目阶段结束、里程碑到达和项目结束时,应编写研制阶段/里程碑报告和软件研制总结报告。 1.2相关术语 本书中使用的相关术语和缩略语如下。 (1) 软件单元,是软件配置项设计中的一个独立的、可测试的元素,指软件配置项中的一个类、对象、模块、函数、子程序或者数据库。 (2) 集成测试,是指把软件单元组装成软件配置项或把配置项组装成系统所进行的测试。 (3) 回归测试,是指在软件更改之后,对更改及更改所影响的软件单元、软件配置项、系统以及集成过程进行的有选择的再测试,用以验证更改后的软件单元、软件配置项、系统仍满足规定的需求,且更改未引起不希望的有害效果。 (4) 委托方,是指软件开发或测试工作的交办方。 1.3软件开发文档要求〖1〗1.3.1文档的作用为了保证软件开发、使用和维护等环节的有效管理和软件开发人员与用户等之间的交流,软件开发过程中需要编写不同的文档,文档编写贯穿于软件开发整个生命周期。文档编写是软件开发项目成功的基础,软件文档的编写在软件开发活动中占有突出的地位和相当的工作量。高质量的软件文档对软件开发活动的意义也十分显著。 软件文档是软件的重要组成部分,在软件管理人员、开发人员、维护人员和用户之间发挥着重要的桥梁作用。同时,软件文档使不可见的软件变得可视和可控,具体表现如下。 (1) 项目管理的依据。软件文档展示了软件开发过程的进度和项目的预期目标。同时,将不可见的软件变得可视和可控,使项目管理人员能够确定项目的既定目标是否实现,并进行后续工作计划的安排。 (2) 技术交流语言。软件开发活动包括系统分析与设计、软件需求分析、软件设计和测试等,大型工程项目一般将这些活动安排给不同的人员完成。此时,每个活动产生的文档就成为各类人员沟通和交流的语言。 (3) 项目质量的保证。软件文档是保证软件项目质量的重要手段,也是进行项目质量审查和评价的依据。软件测试需要按照需求、设计文档开展,也是评估软件是否正确实现功能、性能等的评判标准。 (4) 培训资料。软件文档为运行、维护人员提供软件的信息,使其能够掌握软件的功能、性能,了解操作要求等。 (5) 维护的技术支持。软件文档为维护人员提供软件维护必需的信息。 (6) 组织资产。软件文档是组织的重要资产,记录了软件开发过程中的全部信息,便于组织积累资产,不断提高组织的软件开发能力。 1.3.2软件文档标准 软件文档的标准主要包括: GB/T 8567—2006《计算机软件文档编制规范》,规定了软件需求规格说明、软件设计说明、软件测试文档、软件质量保证计划和软件配置管理计划等文档的编写要求。 GB/T 9385—2008《计算机软件需求规格说明规范》,描述了软件需求规格说明所必须的内容和质量要求。 GB/T 9386—2008《计算机软件测试文档编制规范》,规定了软件测试文档的编写要求,对测试过程的完备性给出了检查标准。 GJB 438B—2009《军用软件开发文档通用要求》,规定了军用软件开发文档编写的种类、结构、格式和内容等要求。 这些标准对软件文档的作用和意义进行了说明,并对各种文档的编制都作了详细要求。 1.3.3软件文档的种类 表11中给出了软件开发和测试活动中常用的20种文档和文档标识。表11文档类型和标识 序号标识文 档 名 称序号标识文 档 名 称1SSS系统规格说明11SPD软件详细设计说明2IRS接口需求规格说明12DBDD数据库设计说明3SSDD系统设计说明13STP软件测试计划4IDD软件接口设计说明14STD软件测试说明5SDTD软件研制任务书15STR软件测试报告6SDP软件开发计划16SRTP软件回归测试方案7SCMP软件配置管理计划17SPS软件产品规格说明8SQAP软件质量保证计划18SVD软件版本说明9SRS软件需求规格说明19SUM软件用户手册10SSD软件概要设计说明20SDSR软件研制总结报告本书将介绍下列软件文档的编写要求和编写指南。 (1) 《系统规格说明》。《系统规格说明》描述系统或子系统的需求,以及确保满足各需求所使用的方法。系统外部接口相关需求,可引用一个或多个《接口需求规格说明》。《系统规格说明》的编写指南见第2章。 (2) 《接口需求规格说明》。《接口需求规格说明》描述作用于一个或多个系统、硬件配置项(HWCI)、计算机软件配置项(CSCI)、人工操作,或者其他系统部件之间的需求,从而实现这些实体间的一个或多个接口。《接口需求规格说明》可用来补充《系统需求规格说明》和《软件需求规格说明》,构成系统和CSCI 设计与合格性测试的基础。《接口需求规格说明》的编写指南见第5章。 (3) 《系统设计说明》。《系统设计说明》描述系统的系统级设计决策与体系结构设计。《系统设计说明》与其相关联的《软件接口设计说明》和《数据库设计说明》,共同构成系统实现的基础。《系统设计说明》的编写指南见第6章。 (4) 《软件接口设计说明》。《软件接口设计说明》描述一个或多个系统、HWCI、CSCI、人工操作,或者其他系统部件的接口特性。可作为《系统设计说明》《软件设计说明》和《数据库设计说明》的补充。《软件接口设计说明》及与其相关的《接口需求规格说明》用于接口设计决策的交流和控制。《软件接口设计说明》的编写指南见第7章。 (5) 《软件研制任务书》。《软件研制任务书》描述软件开发的目的、目标、主要任务、功能及性能指标、设计约束、质量控制、验收和交付、软件保障,以及进度和里程碑等要求,是软件开发的基础和依据。《软件研制任务书》的编写指南见第3章。 (6) 《软件开发计划》。《软件开发计划》描述软件开发工作的计划。软件开发活动包含新开发、修改、重用、再工程、维护和由软件产品引起的其他所有活动。软件开发计划的内容包括软件开发过程、所使用的方法、每项活动的途径、项目的进度、组织及资源的可视性和监督工具。软件开发计划是动态的,随着项目的进展,在出现重大偏差或者在里程碑处应进行分析,必要时重新策划并修订软件开发计划。《软件开发计划》的编写指南见第18章。 (7) 《软件配置管理计划》。《软件配置管理计划》描述在项目中如何实施软件配置管理。《软件配置管理计划》的编写指南见第19章。 (8) 《软件质量保证计划》。《软件质量保证计划》描述在项目中采用的软件质量保证的措施、方法和步骤。《软件质量保证计划》的编写指南见第20章。 (9) 《软件需求规格说明》。《软件需求规格说明》描述对CSCI的需求,以及确保满足每个需求所使用的方法。与CSCI 外部接口有关的需求既可在《软件需求规格说明》中描述,也可在引用的一个或多个《接口需求规格说明》中描述。《软件需求规格说明》的编写指南见第4章。 (10) 《软件概要设计说明》。《软件概要设计说明》描述CSCI 级设计决策和CSCI 体系结构设计,与《软件详细设计说明》《接口设计说明》《数据库设计说明》一起,共同构成软件实现的基础。《软件概要设计说明》的编写指南见第9章。 (11) 《软件详细设计说明》。《软件详细设计说明》描述CSCI每个单元的详细设计,与《软件概要设计说明》《接口设计说明》《数据库设计说明》一起,共同构成软件实现的基础。《软件详细设计说明》的编写指南见第10章。 (12) 《数据库设计说明》。《数据库设计说明》描述数据库的设计以及存取或操纵数据所使用的软件单元。《数据库设计说明》是实现数据库及相关软件单元的基础。《数据库设计说明》的编写指南见第8章。 (13) 《软件测试计划》。《软件测试计划》描述对CSCI 和软件系统或子系统进行测试的计划。软件测试计划的内容包括测试环境、要执行的测试、测试活动的进度。委托方可根据软件测试计划评估CSCI和软件系统或子系统测试的策划是否充分。《软件测试计划》的编写指南见第11章。 (14) 《软件测试说明》。《软件测试说明》描述执行CSCI、系统或子系统测试所需的测试准备、测试用例及测试过程。委托方根据《软件测试说明》可评估所执行的测试是否充分。《软件测试说明》的编写指南见第12章。 (15) 《软件测试报告》。《软件测试报告》是对CSCI、系统或子系统进行测试的记录。委托方根据《软件测试报告》可评估测试及其结果。《软件测试报告》的编写指南见第13章。 (16) 《软件回归测试方案》。《软件回归测试方案》描述进行CSCI、系统或子系统回归测试的计划和回归测试用例。《软件回归测试方案》的编写指南见第14章。 (17) 《软件产品规格说明》。《软件产品规格说明》描述或引用可执行软件、源文件以及软件保障信息。《软件产品规格说明》的内容包括CSCI的设计信息,以及编译、构建和修改规程等。《软件产品规格说明》 可用于为CSCI 订购可执行软件和(或)源文件,是CSCI 主要的软件保障文档。《软件产品规格说明》的编写指南见第15章。 (18) 《软件版本说明》。《软件版本说明》标识并描述由一个或多个CSCI组成的软件版本,用于发布、追踪以及控制软件版本。《软件版本说明》的编写指南见第16章。 (19) 《软件用户手册》。《软件用户手册》描述操作该软件的用户如何安装与使用CSCI、相关的CSCI、软件系统或子系统。《软件用户手册》可能还包括软件运行的某些特殊方面,例如特定位置或任务的说明等。如果软件由用户操作且具有用户接口以获取联机用户输入或解释输出显示,则需要《软件用户手册》。如果软件是一个硬件软件系统中的嵌入式软件,则该系统的用户手册可能包括了《软件用户手册》的内容,不必单独编写《软件用户手册》。《软件用户手册》的编写指南见第17章。 (20) 《软件研制总结报告》。《软件研制总结报告》描述软件整个开发情况,包括任务来源与开发依据、软件概况、开发过程、满足任务指标情况、质量保证情况、配置管理情况、测量与分析等,以及给出软件是否可以交付给委托方使用的结论。《软件研制总结报告》的编写指南见第21章。 1.4软件文档裁剪指南 软件开发过程中产生的文档可根据软件特点、用户要求等对其进行裁剪。裁剪的依据首先应根据用户要求,其次应根据软件规模和关键等级来决定。本节按照GJB 8000—2003《军用软件开发能力等级要求》对软件规模等级进行划分。 1.4.1软件规模等级 按照代码行进行软件规模等级划分见表12。表12代码行软件规模等级划分定义 规模等级嵌入式软件非嵌入式软件巨100 000≤n1 000 000≤n大30 000≤n<100 000300 000≤n<1 000 000中5000≤n<30 00050 000≤n<300 000小500≤n<50005000≤n<50 000微n<500n<5000注: n为以C语言为例的代码行数(不记空行、注释行等)。按照功能点进行软件规模等级划分见表13。表13功能点软件规模等级划分定义 规模等级嵌入式软件非嵌入式软件巨1000≤FP10 000≤FP大300≤FP<10003000≤FP<10 000中50≤FP<300500≤FP<3000小5≤FP<5050≤FP<500微FP<5FP<50注: FP是功能点估算方法估算出的功能点数。1.4.2软件关键等级 软件关键等级的划分原则见表14。表14软件关键等级划分 软件关键等级软件失效可能的影响Ⅰ级(A)灾难性影响,出现下列情况之一: (1) 人员死亡; (2) 系统报废; (3) 基本任务失败; (4) 重大泄密或核心数据损坏、遗失等; (5) 环境灾难; (6) 重大经济或社会损失续表 软件关键等级软件失效可能的影响Ⅱ级(B)严重性影响,出现下列情况之一: (1) 人员严重伤害; (2) 系统严重损坏; (3) 基本任务的主要部分无法完成; (4) 严重泄密或重要数据损坏、遗失等; (5) 环境严重破坏; (6) 严重经济或社会损失Ⅲ级(C)轻度影响,出现下列情况之一: (1) 人员轻度伤害; (2) 系统轻度损坏; (3) 对完成任务有轻度影响; (4) 一般泄密或一般数据损坏、遗失等; (5) 环境轻度破坏; (6) 轻度经济或社会损失Ⅳ级(D)轻微影响,出现下列情况之一: (1) 对人员的伤害或系统的损坏可忽略; (2) 虽然执行任务有障碍但是能够完成; (3) 数据损坏或遗失程度等可忽略; (4) 对环境的破坏可忽略; (5) 经济或社会损失和忽略注: 决定成败的任务为基本任务。 1.4.3文档的裁剪 文档的裁剪应在项目策划时,根据用户要求、软件规模等级和关键等级等确定。文档裁剪的示例如表15所示。表15文档裁剪示例 性质 文档规模等级关键等级巨、大、中小、微A、BC、D系统规格说明接口需求规格说明系统设计说明软件接口设计说明☆☆☆☆☆☆软件研制任务书√√√√软件开发计划√软件质量保证计划√软件配置管理计划√☆☆☆续表 性质 文档规模等级关键等级巨、大、中小、微A、BC、D软件需求规格说明√√√√软件概要设计说明√软件详细设计说明√数据库设计说明√☆☆☆软件测试计划√软件测试说明√☆√√☆软件测试报告√√√√软件产品规格说明√√√√软件版本说明√√√√软件用户手册根据软件本身的性质选择软件研制总结报告√√√√注: 当软件同时适用于几个类别时,按最高的要求处理。如果软件设计包括数据库设计,应编写数据库设计说明。√为独立文档,☆为可合并文档。 第二篇 第二篇软件需求文档 需求是软件开发的基础。软件产品用来解决现实世界中的某个或某些问题,而软件需求表达了需要和置于软件产品之上的约束。好的需求是项目成功的必要条件。不正确地理解需求、不准确地描述需求、未能有效地控制需求变更等将不可避免地导致开发费用的增加、交付的延迟和产品质量的低下,也就无法达到客户满意。 需求分析的主要目的是: 与客户和其他相关方在系统的工作内容方面达成并保持一致,定义系统用户的需要和目标,使系统开发人员能够更清楚地了解系统需求、定义系统边界,为软件实施计划、系统成本和进度估算提供基础。 确定大型软件系统的需求是一项艰巨的任务,用户、系统分析人员和软件开发人员往往需要进行反复讨论和协商,才能使得需求逐步精确化、一致化和完全化。 需求分析的主要活动包括需求分析与规范、需求变更管理及需求跟踪管理。需求分析与规范活动的目标是确定待开发软件的功能需求、性能需求和运行环境约束,编制需求规格说明书。软件的功能需求应指明软件必须完成的功能;软件的性能需求包括软件的安全性、可靠性、可维护性、精度、错误处理、适应性等;软件系统在运行环境方面的约束指待开发的软件系统必须满足的运行环境方面的要求。 需求变更管理活动贯穿于项目全过程。需求变化是难以避免的,有许多原因可能导致需求变更,其中最重要的原因是系统生存环境在不断变化,而待开发的软件系统必须跟上这种变化。在项目策划期间,要与客户商讨变更出现时需要遵循的变更流程;变更出现时,要有变更申请及得到批准的过程;另外,要记录跟踪变更的实施情况。 需求跟踪管理活动的目标是确保所有的需求都在最后交付的产品中得以体现,同时交付产品中的每一功能都源自于用户的原始需求。需求跟踪使得需求确认成为可能,也使得对需求变更的影响进行分析有了基础。 〖1〗软件开发与测试文档编写指南〖1〗第二篇软件需求文档软件需求文档主要包括系统规格说明、软件需求规格说明以及接口需求规格说明、研制任务书等。在编制系统规格说明、软件需求规格说明文档时需注意,应选择适合的方法正确而恰当地定义软件的功能、性能等所有软件需求。当使用结构化方法时,主要采用数据流图(DFD)、控制流图(CFD)、状态转换图(STD)、处理说明与数据字典(DD)等方法来表示有关功能、信息模型;当使用面向对象方法时,主要采用用况图、顺序图、状态图、类图、包图等方法来表示有关功能、信息模型。功能需求的定义应包括每项功能的目的、输入、处理和输出,并覆盖所有异常情况的处理要求和应急措施。文档应包括软件所采用的与业务相关的数学模型、处理流程、容错和异常处理要求。还应对软件的处理时间、吞吐量和占用空间等进行初步分析。 软件需求文档编制的质量要求主要有: 完整性,指的是包括全部有意义的功能、性能、设计约束和外部接口方面的需求描述,所有可能环境下各种可能的输入数据定义,以及合法和非法输入数据的处理方案等;准确性,指的是对软件需求的描述要明确无误,保证每一项需求只有一种解释,不能有二义性;一致性,指的是各项需求的描述不矛盾,所采用和描述的概念、定义、术语统一化、标准化;可验证性,指的是不使用不可度量的词(例如“通常”“一般”“基本”等)描述需求,保证描述的每一项需求都能通过检查判断是否满足。