软考架构-软件工程(3)

263 阅读10分钟

系统分析与设计

结构化方法

结构化开发方法针对软件生存周期各个不同的阶段,它有结构化分析 (SA)、 结构化设计 (SD)和结构化编程 (SP) 等方法。

1、结构化分析

结构化分析方法主要手段有:数据流图(DFD)、数字字典、结构化语言、判定表以及判定树等。 结构化分析的步骤如下:

  • 分析业务情况,做出反映当前物理模型的数据流图 (Data Flow Diagram,DFD);
  • 推导出等价的逻辑模型的 DFD;
  • 设计新的逻辑系统,生成数据字典和基元描述;
  • 建立人机接口,提出可供选择的目标系统物理模型的 DFD;
  • 确定各种方案的成本和风险等级,据此对各种方案进行分析;
  • 选择一种方案;
  • 建立完整的需求规约。

数据流图

数据流图(DFD)是一种需求建模方法,专注于过程和功能建模。它通过图形方式刻画和表示业务系统中的数据处理过程和数据流。这种方法的核心是数据流,即从应用系统的数据流动入手进行分析。 DFD建模方法的关键步骤包括:

  1. 抽象出主要业务流程。
  2. 分析输入数据,包括其来源、流向、加工过程及最终的结果。

这种方法通过层层追踪和分析,清晰地展现和描述系统的问题,为后续的设计、编码及实现系统功能奠定基础。

DFD方法包含四种基本元素:

  1. 数据流:表示数据的流向,箭头上标注信息或数据项。
  2. 处理/加工:表示对数据的转换和加工,用矩形框表示。
  3. 数据存储:表示以数据库或文件形式存储的数据,存取方向用箭头表示。
  4. 外部项:描述数据的提供者或使用者,如用户、其他系统等,用圆角框或平行四边形框表示。

建立DFD图的步骤包括:

  1. 明确目标和范围:首先,要清晰地描述目标系统的功能需求,并确定模型要描述的问题域。
  2. 建立顶层DFD图:这一步骤是构建整个模型的基础,它描述了系统的主要功能和边界。
  3. 构建第一层DFD分解图:根据逻辑功能,将顶层图中的处理进一步细化。
  4. 开发DFD层次结构图:继续对处理框进行分解,直到每个处理都足够具体和详细。在分解过程中,需要遵循一些原则,如保持模型深度均匀,按困难程度选择分解的对象等。
  5. 检查确认DFD图:最后,需要按照一系列规则检查DFD图,确保其正确性、一致性和完整性。

建立DFD图的主要目的是通过图形化的方式描述系统的功能需求,帮助开发人员更好地理解系统的工作流程,并为后续的设计和实现提供基础。通过逐层细化,可以将面向问题的术语逐渐转化为面向现实的解法,最终得到描述具体处理模块的DFD层次结构图。

数字字典

数据字典 (Data Dictionary) 是一种用户可以访问的记录数据库和应用程序元数据的目录。 数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述, 其目的是对数据流程图中的各个元素做出详细的说明。

  • 数据项:数据流图中数据块的数据结构中的数据项说明。
  • 数据结构:数据流图中数据块的数据结构说明。
  • 数据流:数据流图中流线的说明。
  • 数据存储:数据流图中数据块的存储特性说明。
  • 处理过程:数据流图中功能块的说明。

2、结构化设计

结构化设计 (Structured Design,SD) 是一种面向数据流的设计方法,它以SRS和SA阶段所产生的数据流图和数据字典等文档为基础,是一个自顶向下、逐步求精和模块化的过程。主要分为概要设计详细设计两个阶段,其中概要设计的主要任务是确定软件系统的结构,对系统进行模块划分,确定每个模块的功能、接口和模块之间的调用关系;详细设计的主要任务是为每个模块设计实现的细节。

3、结构化编程

结构化程序设计采用自顶向下、逐步求精的设计方法,各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口和一个出口。结构化程序设计的原则可表示为:程序=(算法)+(数据结构)。

4、数据库设计

数据库设计的内容包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护。其中概念结构设计主要采用E-R图来表示。 image.png

面向对象方法

面向对象的开发过程是用例驱动的、体系结构为中心的、迭代和渐增式的,主要包括需求分析、系统分析、系统设计和系统实现四个阶段,但各阶段之间的划分不如结构化开发方法清晰,而是迭代进行。

1、面向对象分析

面向对象分析方法(OOA)原则包括:抽象、封装、继承、分类、聚合、关联、消息通信、粒度控制、行为分析。基本步骤:

  • 确定对象和类。这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的描述,它包括 如何在一个类中建立一个新对象的描述。
  • 确定结构。结构是指问题域的复杂性和连接关系。类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。
  • 确定主题。主题是指事物的总体概貌和总体分析模型。
  • 确定属性。属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。
  • 确定方法。方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择的方法本身 都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。

2、面向对象设计

面向对象设计方法 (Object-Oriented Design,OOD) 是 OOA方法的延续,其基本思想包括抽象、封装和可扩展性,其中可扩展性主要通过继承和多态来实现。在OOD 中,类可以分为3种类型:实体类、控制类和边界类

3、面向对象编程

面向对象程序设计 (Object Oriented Programming,OOP) 是一种计算机编程架构。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。 OOP达到了软件工程的3个主要目标:重用性、灵活性和扩展性。 OOP= 对象+类+继承+多态+消息,其中核心概念是类和对象。OOP的基本特点有封装、继承和多态

4、数据持久化与数据库

在多层软件设计和开发中,为了降低系统的耦合度,一般会引入持久层 (Persistence Layer), 即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联,持久层的设计实现了数据处理层内部的业务逻辑和数据逻辑的解耦。

软件测试

软件测试方法的分类有很多种,以测试过程中程序执行状态为依据可分为静态测试 (Static Testing,ST) 和动态测试 (Dynamic Testing,DT); 以具体实现算法细节和系统内部结构的相 关情况为根据可分黑盒测试、白盒测试和灰盒测试3类;从程序执行的方式来分类,可分为人 工测试 (Manual Testing,MT) 和自动化测试 (Automatic Testing,AT)

1、测试方法

  • 静态测试。静态测试是被测程序不运行,只依靠分析或检查源程序的语句、结构、过程等来检查程序是否有错误。即通过对软件的需求规格说明书、设计说明书以及源程序做结构分析和流程图分析,从而来找出错误。例如不匹配的参数,未定义的变量等。
  • 动态测试。动态测试与静态测试相对应,是通过运行被测试程序,对得到的运行结果与预期的结果进行比较分析,同时分析运行效率和健壮性能等。这种方法可简单分为3个步骤:构造测试实例、执行程序以及分析结果。
  • 黑盒测试。黑盒测试将被测程序看成是一个黑盒,工作人员在不考虑任何程序内部结构和特性的条件下,根据需求规格说明书设计测试实例,并检查程序的功能是否能够按照规范 说明准确无误的运行。其主要是对软件界面和软件功能进行测试。对于黑盒测试行为必须加以 量化才能够有效的保证软件的质量。
  • 白盒测试。白盒测试主要是借助程序内部的逻辑和相关信息,通过检测内部动作是否按照设计规格说明书的设定进行,检查每一条通路能否正常工作。白盒测试是从程序结构方面 出发对测试用例进行设计。主要用于检查各个逻辑结构是否合理,对应的模块独立路径是否正常以及内部结构是否有效。常用的白盒测试法有控制流分析、数据流分析、路径分析、程序变异等。根据测试用例的覆盖程度,分为语句覆盖、判定覆盖、分支覆盖和路径覆盖等。
  • 灰盒测试。灰盒测试介于黑盒与白盒测试之间。灰盒测试除了重视输出相对于输入的正确性,也看重其内部的程序逻辑。但是,它不可能像白盒测试那样详细和完整。它只是简单 地靠一些象征性的现象或标志来判断其内部的运行情况,因此在内部结果出现错误,但输出结果正确的情况下可以采取灰盒测试方法。因为在此情况下灰盒比白盒高效,比黑盒适用性广的 优势就凸显出来了。
  • 自动化测试。自动化测试就是软件测试的自动化,即在预先设定的条件下自动运行被 测程序,并分析运行结果。总的来说,这种测试方法就是将以人驱动的测试行为转化为机器执 行的一种过程。

2、测试阶段

从阶段上划分,软件测试可以分为单元测试、集成测试和系统测试,系统测试中又包含了多种不同的测试种类,例如功能测试、性能测试、验收测试、压力测试等。