【课程】08 软件工程基础

软件工程基本概念

软件定义与软件特点

计算机软件(Software)是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。GB/T11457-2006《信息技术 软件工程术语》中对软件的定义是:软件是与计算机系统的操作有关的计算机程序、规范及可能的相关文档的完整集合。软件在开发、生产、维护和使用等方面与计算机硬件相比存在明显的差异。软件的特点有:
①软件是一种逻辑实体,而不是物理实体,具有抽象性。
②软件的生产与硬件不同,它没有明显的制作过程。
③软件在运行、使用期间不存在磨损、老化问题。
④软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题。
⑤软件复杂性高,成本昂贵。
⑥软件开发涉及诸多的社会因素。

软件危机与软件工程

软件工程概念的出现源自软件危机。20世纪60年代末以后,“软件危机”这个词频繁出现。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。实际上,几乎所有的软件都不同程度地存在这些问题。具体地说,在软件开发和维护过程中,软件危机主要表现在:
①软件需求的增长得不到满足。用户对系统不满意的情况经常发生。
②软件开发成本和进度无法控制。开发成本超出预算,开发周期大大超过规定日期的情况经常发生。
③软件质量难以保证。
④软件不可维护或维护程度非常低。
⑤软件的成本不断提高。
⑥软件开发生产率的提高赶不上硬件的发展和应用需求的增长。
总之,可以将软件危机归结为成本、质量、生产率等问题。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念,开辟了工程学的新领域——软件工程学。软件工程就是试图用工程、科学和数学的原理和方法研制、维护计算机软件的有关技术及管理方法。
软件工程包括三个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。软件工程的核心思想是把软件产品(就像其他工业产品一样)看作是一个工程产品来处理。把需求计划、可行性研究、工程审核、质量监督等工程化的概念引入到软件生产当中,以期达到工程项目的三个基本要素:进度、经费和质量的目标。同时,软件工程也注重研究不同于其他工业产品生产的一些独特特性,并针对软件的特点提出了许多有别于一般工业工程技术的一些技术方法。代表性的有结构化的方法、面向对象的方法和软件开发模型及软件开发过程等。

软件过程与软件生命周期

软件过程是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。软件工程应确定方法使用的顺序、要求交付的文档资料、为保证质量和适应变化所需要的管理、软件开发各个阶段完成的任务。通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。一般包括可行性研究与需求分析、设计、编码、测试、交付使用以及维护等活动,如图所示。这些活动可以有重复,执行时也可以有迭代。
【课程】08 软件工程基础_第1张图片
图6-6 软件生命周期
软件定义阶段的任务是:确定软件开发工作必须完成的目标;确定工程的可行性。软件开发阶段的任务是:具体完成设计和实现定义阶段所定义的软件,通常包括总体设计、详细设计、编码和测试。其中总体设计和详细设计又称为系统设计,编码和测试又称为系统实现。软件生命周期各阶段的基本任务。
①可行性研究和计划制定。确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制定完成开发任务的实施计划。
②需求分析。对待开发软件提出的需求进行分析并给出详细定义。编写软件规格说明书及初步的用户手册,提交评审。
③软件设计。系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分配以及处理流程。在系统比较复杂的情况下,设计阶段可分解成概要设计阶段和详细设计阶段。编写概要设计说明书、详细设计说明书和测试计划初稿,提交评审。
④编码。编码是把软件设计转换成计算机可以接受的程序代码。即完成源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。
⑤软件测试。在设计测试用例的基础上,检验软件的各个组成部分。编写测试分析报告。
⑥运行和维护。将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。

软件工程的目标与原则

  1. 软件工程的目标
    软件工程的目标是,在给定成本、进度的前提下,开发出具有时效性、可靠性、可移植性、可追踪性和可操作性且满足用户需求的产品。基于软件工程的目标,软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。
    (1) 软件开发技术
    软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境,其主体内容是软件开发方法学。软件开发方法学是根据不同的软件类型,按不同的观点和原则,对软件开发中应遵循的策略、原则、步骤和必须产生的文档资料都作出规定。从而使软件的开发能够进行进入规范化和工程化的阶段,以克服早期的手工方法生产中的随意性和非规范性做法。
    (2) 软件工程管理
    软件工程管理包括软件管理学、软件工程经济学、软件心理学等内容。软件工程管理是软件按工程化生产时的重要环节,它要求按照预先制定的计划进度和预算执行,以实现预期的经济效益和社会效益。统计数据表明,多数软件开发项目的失败,并不是由于软件开发技术方面的原因,它们的失败是由于不适当的管理造成的。因此人们对软件项目管理重要性的认识有待提高。软件管理学包括人员组织,进度安排、质量保证、配置管理、项目计划等。
  2. 软件工程的原则
    为了达到上述的软件工程目标,在软件开发过程中必须遵循软件工程的基本原则,这些原则适用于所有的软件项目。这些基本原则包括抽象信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
    ①抽象。抽取事物最基本的特性和行为,忽略非本质细节,采用分层次抽象,自顶向下,逐层细化的方法,控制软件开发过程中的复杂性。
    ②信息隐蔽。采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。
    ③模块化。模块是程序中相对独立的成分,一个独立的编程单位应有良好的接口定义。模块的大小要适中,模块过大会使模块内部的复杂性增加,不利于对模块的理解和修改,也不利于模块的调试和重用。模块太小,会导致整个系统表示过于复杂,不利于控制系统的复杂性。
    ④局部化。要求在一个物理模块内集中逻辑上相互关联的计算资源,保证模块间具有松散的耦合关系,模块内部有较强的内聚性,这有助于控制解的复杂性。
    ⑤确定性。软件开发过程中所有概念的表达应是确定的、无歧义且规范的。这有助于人与人的交互不会产生误解和遗漏,以保证整个开发工作的协调一致。
    ⑥一致性。包括程序、数据和文档的整个软件系统的各模块应使用已知的概念、符号和术语;程序内外接口应保持一致,系统规格说明与系统行为应保持一致。
    ⑦完备性。软件系统不丢失任何重要成分,完全实现系统所需的功能。
    ⑧可验证性。开发大型软件系统需要对系统自顶向下,逐层分解。系统分解应遵循容易检查、测评、评审的原则,以确保系统的正确性。

软件开发工具与软件开发环境

  1. 软件开发工具
    早期的软件开发除了一般的程序设计语言,尚缺少工具的支持,致使编程工作量大,质量和进度难以保证,导致人们将很多的精力和时间花费在程序的编制和调试上,而在更重要的软件的需求和设计上反而得不到必要的精力和时间投入。软件开发工具的完善和发展将促使软件开发方法的进步和完善,促进软件开发的高速度和高质量。软件开发工具的发展是从单项工具的开发逐步向集成工具的发展的,软件开发工具为软件工程方法提供了自动的或半自动的软件支撑环境,同时软件开发方法的有效应用也必须得到相应工具的支持,否则方法将难以有效地实施。
  2. 软件开发环境
    软件开发环境或称软件工程环境,是全面支持软件开发全过程的软件工具集合。这些软件工具按照一定的方法和模式组合起来,支持软件生命周期内的各个阶段和各项任务的完成。
    计算机辅助软件工程(Computer Aided Software Engineering, CASE)是当前软件开发环境中富有特色的研究方向和发展方向,CASE将各种软件工具、开发机器和一个存放开发过程信息的中心数据库组合起来,形成软件工程环境。CASE的成功产品将最大限度地降低软件开发的技术难度,并使软件开发的质量得到保证。

结构化分析方法

软件开发方法是软件开发过程中所遵循的方法和步骤,其目的在于有效的得到一些工作产品及程序和文档,并且满足质量要求。软件开发方法包括分析方法、设计方法和程序设计方法。结构化方法经过三十多年的发展,已经成为系统成熟的软件开发方法之一。结构化方法包括已经形成了配套的结构化分析方法、结构化设计方法和结构化编程方法,其核心和基础是结构化程序设计理论。

需求分析与需求分析方法

  1. 需求分析
    软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。需求分析的任务是发现需求、求精、建模和定义需求的过程。需求分析将创建所需的数据模型、功能模型和控制模型。
    需求分析阶段的工作可以概括为四个方面:
    ①需求获取。需求获取的目的是确定对目标系统的各方面需求。涉及的主要任务是建立获取用户需求的方法框架,并支持和监控需求获取的过程。需求获取涉及的关键问题有:对问题空间的理解;人与人之间的通信;不断变化的需求。需求获取是在同用户的交流过程中不断收集、积累用户的各种信息,并且通过认真理解用户的各项要求,澄清那些模糊的需求,排除不合理的,从而较全面的提炼系统的功能性和非功能性需求。一般功能性和非功能性需求包括系统功能、物理环境、用户界面、用户因素、资源、安全性、质量保证及其他约束。要特别注意的是,在需求获取过程中,容易产生诸如于用户存在交流障碍,相互误解,缺乏共同语言,理解不完善,忽视需求变化,混淆目标和需求等问题,这些问题都将直接影响到需求分析和系统后续开发的成败。
    ②需求分析。对获取的需求进行分析和综合,最终给出系统的解决方案和目标系统的逻辑模型。
    ③编写需求规格说明书。需求规格说明书作为需求分析的阶段成果,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。
    ④需求评审。在需求分析的最后一步,对需求分析阶段的工作进行复审,验证需求文档的一致性、可行性、完整性和有效性。
  2. 需求分析方法
    常见的需求分析方法有:
    ①结构化分析方法。主要包括:面向数据流的结构化分析方法(Structured Analysis, SA),面向数据结构的Jackson方法(Jackson System Development Method, JSD),面向数据结构的结构化数据系统开发方法(Data Structure System Development Method, DSSD)。
    ②面向对象的分析方法(Object-Oriented Method, OOA)。从需求分析建立的模型的特性来分,需求分析方法又分为静态分析方法和动态分析方法。

结构化分析方法

  1. 关于结构化分析方法
    结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用。它是20世纪70年代中期倡导的基于功能分解的分析方法,其目的是帮助弄清用户对软件的需求。结构化分析方法的实质是着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。
    结构化分析的步骤如下:
    ①通过对用户的调查,以软件的需求为线索,获得当前系统的具体模型;
    ②去掉具体模型非本质因素,抽象出当前系统的逻辑模型;
    ③根据计算机的特点分析当前系统与目标系统的差别,建立目标系统的逻辑模型;
    ④完善目标系统并补充细节,写出目标系统的软件需求规格说明;
    ⑤评审直到确认完全符合用户对软件的需求。
  2. 结构化分析的常用工具
    (1)数据流图
    数据流图是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统的功能建模。数据流图从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。
    (2)数据字典
    数据字典是结构化分析方法的核心。数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。数据字典把不同的需求文档和分析模型紧密的结合在一起,与各个模型的图形表示配合,能清楚地表达数据处理的要求。
    概括地说,数据字典的作用是对DFD中出现的被命名的图形元素的确切解释。通常数据字典包含的信息有:名称、别名、何处使用/如何使用、内容描述、补充信息等。例如对加工的描述应包括:加工名、反映该加工层次的加工编号、加工逻辑及功能简述、输入/输出数据流等。
    (3)判定树
    使用判定树进行描述时,应先从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树。
    (4)判定表
    判定表与判定树相似,当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于某一组条件取值的组合而引发的,使用判定表描述比较适宜。

软件需求规格说明书

  1. 软件需求规格说明书的作用
    软件需求规格说明书的作用是:
    ①便于用户开发人员进行理解和交流。
    ②反映出用户问题的结构,可以作为软件开发工作的依据和基础。
    ③作为确认测试和验收的依据。
    ④为成本估算和编制计划进度提供基础。
    ⑤软件不断改进的基础。
  2. 软件需求规格说明书的内容
    软件需求规格说明应重点描述软件的目标,软件的功能需求、性能需求、外部接口、属性及约束条件等。功能需求是软件需求规格说明,给出软件要执行什么功能的详尽描述。性能需求是指定量的描述软件系统应满足的具体性能需求,即各种软件功能的速度、响应时间、恢复时间。外部接口指软件如何与人、系统的硬件及其他硬件和其他软件进行交互。属性是指与软件有关的质量属性,如正确性、可用性、可靠性、安全性、可维护性等。约束条件包括影响软件实现的各种设计约束,如使用的标准、编程语言、数据库完整性方针、资源限制、运行环境等方面的要求。
  3. 软件需求规格说明的特点
    软件需求规格说明是确保软件质量的有力措施,衡量软件需求规格说明书质量好坏的标准、标准的优先级及标准的内涵是:
    ①正确性。体现待开发系统的真实要求。
    ②无歧义性。对每一个需求只有一种解释,其陈述具有唯一性。
    ③完整性。包括全部有意义的需求,功能的、性能的、设计的、约束的、属性或外部接口等方面的需求。
    ④可验证性。描述的每一个需求都是可以验证的,即存在有限代价的有效过程验证确认。
    ⑤一致性。各个需求的描述不矛盾。
    ⑥可理解性。需求说明必须简明易懂,尽量少包含计算机的概念和术语,以便用户和软件人员都能接受它。
    ⑦可修改性。SRS的结构风格在需求有必要改变时,是易于实现的。
    ⑧可追踪性。每一个需求的来源、流向是清晰的,当产生和改变文件编制时,可以方便的引证每一个需求。

结构化设计方法

软件设计的基本概念

  1. 软件设计的基础
    软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即软件设计是确定系统的物理模型。
    从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。
    软件设计的一般过程是:软件设计是一个迭代的过程;先进行高层次的结构设计,后进行低层次的过程设计;穿插进行数据设计和接口设计。
  2. 软件设计的基本原理
    软件设计过程中应遵循软件工程的基本原理。软件设计的基本原理与有关概念可概括为:
    (1)抽象
    人类在认识复杂问题时使用的很有效的思维工具是抽象。抽象是把事物本质的共同特性提取出来而暂时忽略他们的细节及它们之间的差异。软件设计中考虑模块化解决方案时,可以定义多个抽象级别。抽象的层次从软件的总体设计到详细设计到编码逐层降低。软件工程过程的每一步都是对软件求解的上一层抽象的一次精化。
    (2)逐步求精和模块化
    逐步求精和模块化概念与抽象密切相。逐步求精是人们解决复杂问题时常采用的一种方法,即化繁为简,分而治之,将大而复杂的问题分解成许多容易解决的小问题,则原来的问题就容易解决。在软件设计中,这种逐步求精就是对模块的划分。一般将一个软件系统模块化划分后形成的结构是模块的分层结构。
    (3)信息隐蔽和局部化
    信息隐蔽是指,所设计的模块使得其所包含的信息对于不需要这些信息的模块是不能访问的。局部化和信息隐蔽概念密切相关。所谓局部化,是指把一些关系密切的软件元素物理的放得彼此靠近,例如在模块中使用局部数据就是如此,实际上隐蔽的不是有关模块的一切信息,而是模块的实现细节。局部化有助于实现信息隐蔽。
    (4)模块独立性
    模块独立性的概念是抽象、模块化、信息隐蔽和局部化的直接结果。模块的独立性是指软件模块的编写和修改应使其具有独立功能,且与其他模块的关联尽可能少。换句话讲,设计软件结构时,应使得每个模块仅完成一个相对独立的特定子功能,并且与其他模块关联最少且接口简单。
  3. 结构化设计方法
    与结构化需求分析方法相对应的是结构化设计方法。结构化设计就是采用最佳的可能方法设计系统的各个组成部分以及各成分之间的内部联系的技术。也就是说,结构化设计是这样一个过程,它决定用哪些方法把哪些部分联系起来,才能解决好某个具体有清楚定义的问题。
    结构化设计方法的基本思想是将软件设计成由相对独立、单一功能的模块组成的结构。

概要设计

  1. 概要设计的任务
    (1)设计软件系统结构
    在需求分析阶段,已经把系统分解成层次结构,而在概要设计阶段,需要进一步分解,划分为模块以及模块的层次结构。划分的具体过程是:
    ①采用某种设计方法,将一个复杂的系统按功能划分成模块。
    ②确定每个模块的功能。
    ③确定模块之间的调用关系。
    ④确定模块之间的接口,即模块之间传递的信息。
    ⑤评价模块结构的质量。
    (2)数据结构及数据库设计
    数据设计是实现需求定义和规格说明过程中提供的数据对象的逻辑表示。数据设计的具体任务是:确定输入、输出文件的详细数据结构;结合算法设计,确定算法所必需的逻辑数据结构及其操作;确定对逻辑数据结构所必需的那些操作的程序模块,限制和确定各个数据设计决策的影响范围;需要与操作系统或调度程序接口所必须的控制表进行数据交换时,确定其详细的数据结构和使用规则;数据的保护性设计:防卫性、一致性、冗余性设计。
    (3)编写概要设计文档
    在概要设计阶段,需要编写的文档有:概要设计说明书、数据库设计说明书、集成测试计划等。
    (4)概要设计文档评审
    在概要设计中,对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义的正确性、有效性,各部分之间的一致性等都要进行评审,以免在以后的设计中出现大的问题而返工。
  2. 面向数据流的结构化设计方法
    (1)数据流类型
    ①变换型。变换型是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。
    ②事务型。在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理。这些处理能够完成该作业要求的功能,这种数据流就叫做事务。
    (2)面向数据流设计方法的实施要点和设计过程
    第1步:分析确定数据流图的类型,区分是事务型还是变换型。
    第2步:说明数据流的边界。
    第3步:把数据流图映射成程序结构。
    第4步:根据设计准则对产生的结构进行细化和求精。
  3. 设计的准则
    大量软件设计的实践证明,以下的设计准则可以借鉴为设计的指导和对软件结构图进行优化。这些准则是:
    ①提高模块独立性。
    ②模块规模适中。
    ③深度、宽度、扇出和扇入适当。
    ④使模块的作用域在该模块的控制域内。
    ⑤应减少模块的接口和界面的复杂性。
    ⑥设计成单入口、单出口的模块。
    ⑦设计功能可预测的模块。

详细设计

  1. 程序流程图
    程序流程图是一种传统的应用广泛的软件过程设计表示工具,通常也称为程序框图。程序流程图表达直观、清晰,易于学习掌握,且独立于任何一种程序设计语言。
  2. N-S图
    为了避免流程图在描述程序逻辑时的随意性与灵活性,1973年Nossi和Shneiderman发表了题为“结构化程序的流程图技术”的文章,提出了用方框图来代替传统的程序流程图,通常也把这种图称为N-S图。
  3. PAD图
    PAD图是问题分析图(Problem Analysis Diagram)的英文缩写。它是继程序流程图和方框图之后,提出的又一种主要用于描述软件详细设计的图形表示工具。
  4. PDL
    过程设计语言(PDL)也称为结构化的英语和伪码,它是一种混合语言,采用英语的词汇和结构化程序设计语言的语法,类似编程语言。

软件测试

软件测试的目的和定义

GB/T11457-2006《信息技术 软件工程术语》采用IEEE的定义:
①在规定条件下运行系统或构件的过程:在此过程中观察和记录结果,并对系统或构件的某些方面给出评价。
②软件项目的过程:检测现有状况和所需状况的不同,并评估软件项目的特性。该定义说明了软件测试是一项验证和评估活动,其目的是基于满足规定的需求来保证软件的质量。

软件测试的准则

  1. 所有测试都应追溯到需求
  2. 严格执行测试计划,排除测试的随意性
  3. 充分注意测试中的群集现象
  4. 程序员应避免检查自己的程序
  5. 穷举测试不可能
  6. 妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。

软件测试方法与技术综述

  1. 静态测试与动态测试
    (1)静态测试
    静态测试包括代码检查、静态结构分析、代码质量度量等。静态测试可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。经验表明,使用人工测试能够有效的发现30%到70%的逻辑设计和编码错误。
    (2)动态测试
    动态测试不实际运行软件,主要通过人工进行。动态测试是基于计算机的测试,是为了发现错误而执行程序的过程。或者说,是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程。
  2. 白盒测试方法和测试用例设计
    白盒测试方法也称结构测试或逻辑驱动测试。它是根据软件产品的内部工作过程,检查内部成分,以确认每种内部操作符合设计规格要求。白盒测试把测试对象看做一个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息来设计或选择测试用例,对程序现有的逻辑路径进行测试。通过在不同点检查程序的状态来了解实际的运行状态是否与预期一致。所以,白盒测试是在程序内部进行,主要用于完成软件内部操作的验证。
    白盒测试的基本原则是:保证所测模块中的每一独立路径至少执行一次;保证所测模块所有判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;验证所有内部数据结构的有效性。
    白盒测试的主要方法有逻辑覆盖,基本路径测试等。
  3. 黑盒测试方法和测试用例设计
    黑盒测试方法也称功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试与验证。黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明。所以,黑盒测试是在软件接口处进行,完成功能验证。黑盒测试只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当的接收输入数据而产生正确的输出信息,并且保持外部信息的完整性。
    黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法、因果图等,主要用于软件确认测试。

软件测试的策略

  1. 单元测试
    单元测试是对软件设计的最小单位——模块进行正确性检验的测试。单元测试的目的是发现各模块内部可能存在的各种错误。单元测试的依据是详细设计说明书和源程序。
  2. 集成测试
    集成测试是测试和组装软件的过程,它是在把模块按照设计要求组装起来的同时进行测试,主要目的是发现与接口有关的错误。集成测试的依据是概要设计说明书。
  3. 确认测试
    确认测试的任务是验证软件的功能和性能及其它特性是否满足了需求规格说明书中确定的各种需求,以及软件配置是否完全、正确。
  4. 系统测试
    系统测试是将通过测试确认的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、支持软件、数据和人员等其他系统元素混合在一起,在实际运行环境下对计算机系统进行一系列的集成测试和确认测试。由此可知,系统测试必须在目标环境下运行,其功用在于评估系统环境下软件的功能,发现和捕捉软件中潜在的错误。

程序的调试

基本概念

  1. 程序调试的基本步骤
    (1)错误定位
    从错误的外部表现形式入手,研究有关部分的程序,确定程序中出错位置,找出错误的内在原因。确定错误位置占据了软件调试绝大部分的工作量。
    (2)修改设计和代码,以排除错误
    排错是软件开发过程中一项艰苦的工作,这也决定了调试工作是一个具有很强技术性和技巧性的工作。软件工程人员在分析测试结果的时候会发现,软件运行失效或出现问题,往往只是潜在错误的外部表现,而外部表现与内在原因之间常常没有明显的联系。如果要找出真正的原因,排除潜在的错误,不是一件易事。因此可以说,调试是通过现象,找出原因的一个思维分析的过程。
    (3)进行回归测试,防止引进新的错误
    因为修改程序可能带来新的错误,重复进行暴露这个错误的原始测试或某些有关测试,以确认该错误是否被排除、是否引进了新的错误。如果所作的修正无效,则撤销这次改动,重复上述过程,直到找到一个有效的解决方法为止。
  2. 程序调试原则
    (1)确定错误的性质和位置时的注意事项
    ①分析思考与错误征兆有关的信息。
    ②避开死胡同。
    ③只把调试工具当作辅助手段来使用。
    ④避免用试探法,最多只把它当做最后手段。
    (2)修改错误的原则
    ①在出现错误的地方,很可能还有别的错误。
    ②修改错误的一个常见失误是只修改这个错误的征兆或这个错误的表现,而没有修改错误本身。
    ③注意修正一个错误的同时有可能会引入新的错误。
    ④修改错误的过程将迫使人们暂时回到程序设计阶段。
    ⑤修改源代码程序,不要改变目标代码。

软件调试方法

  1. 强行排错法
    作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。
  2. 回溯法
    该方法适合于小规模程序的排错。即一旦发现了错误,先分析错误征兆,确定最先发生“症状”的位置,然后,从发现“症状”的地方开始,沿程序的控制流程,逆向跟踪源程序代码,直到找到错误根源或确定错误产生的范围。
  3. 原因排除法
    原因排除法是通过演绎和归纳,以及二分法来实现的。

你可能感兴趣的:(#,课程,软件工程)