系统开发基础

时游大约 11 分钟

系统开发基础

软件工程概述

信息系统基本生存周期

  1. 可行性分析与项目开发计划
  2. 需求分析
  3. 概要设计
  4. 详细设计
  5. 编码
  6. 测试
  7. 维护

软件过程

  1. 软件过程改进-CMM

    1. 初始级:杂乱无章,甚至混乱,几乎没有明确定义的步骤,项目的成功依赖于个人的努力和核心任务的作用。

    2. 可重复级:建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。

    3. 已定义级:管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准过程。

    4. 已管理级:制定了软件过程和产品质量的详细度量标准。

    5. 优化级:加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈过程能不断持续地改进。

  2. 软件过程改进-CMMI阶段式模型

CMMI阶段式模型
CMMI阶段式模型
  1. 软件过程改进-CMMI连续式模型
CMMI连续式模型
CMMI连续式模型

软件开发方法

结构化方法

适合针对需求明确的项目

特点:

  1. 用户至上
  2. 严格区分工作阶段,每阶段有任务和结果
  3. 强调系统开发过程中的整体性和全局性
  4. 系统开发过程工程化,文档资料标准化
  5. 自顶向下,逐步分解(规划、需求分析、设计、编码、测试、运维)

原型法

适用于需求不明确的项目,帮助用户明确需求

面向对象方法

适用于复杂的大型项目

特点:

  1. 更好的复用性
  2. 关键在于建立一个全面、合理、统一的模型
  3. 分析、设计、实现三阶段的界限不明确

面向服务的方法

更高级别的面向对象方法

特点:

  1. 抽象级别:操作、服务、业务流程

Jackson

面向数据结构的方法

软件开发模型(必考、重点)

瀑布模型和V模型

瀑布模型

标准的结构化模型,需求明确, 以文档作为驱动的。

瀑布模型
瀑布模型

V模型

特点:

  1. 做需求分析时需要考虑验收测试、系统测试
  2. 做概要设计时要考虑集成测试
  3. 详细设计时需要考虑单元测试
  4. 测试过程贯穿始终
V模型
V模型

演化模型(原型模型、螺旋模型)

演化模型是迭代的过程模型,使得软件开发人员能够逐步开发出更完善的软件版本。非常适合于对软件需求缺乏准确认识的情况。

原型模型
原型模型
螺旋模型
螺旋模型

螺旋模型是由瀑布模型和演化模型结合,加入了风险分析。特别适用于庞大、复杂并且高风险的系统。

增量模型

增量模型
增量模型

喷泉模型

面向对象模型,以用户需求为动力,迭代无间隙

喷泉模型
喷泉模型

统一过程UP

统一过程UP
统一过程UP

初始->细化->构建->交付

敏捷方法

适合于小项目小团队,总体目标是尽可能早地、持续地对有价值的软件的交付,使得客户满意。

基本原则:

  1. 短平快的会议
  2. 小型版本的发布
  3. 较少的文档
  4. 合作为重
  5. 客户直接参与
  6. 自动化测试
  7. 适应性计划调整
  8. 结对编程
  9. 测试驱动开发
  10. 持续集成
  11. 重构

极限编程XP

极限编程
极限编程

其他敏捷开发方法

其他敏捷开发方法
其他敏捷开发方法

需求分析

需求分析的概念

需求分析的任务是多问题做分析,明确解决这个问题要做什么。

需求分析的过程:

  1. 问题识别
  2. 分析和综合
  3. 编制需求分析文档,产出需求规格说明书SRS
  4. 需求分析与评审

结构化分析的结果:一套分层的数据流图、一本数据词典、一组小说明( 也被称为加工逻辑说明)、补充材料

例题:软件开发过程中,需求分析阶段的输出包括数据流图、实体联系图、数据字典。而软件体系结构图是在整体架构设计阶段的产物。

需求的分类

需求的分类
需求的分类

需求分析的工具

数据流图DFD

数据流图基本概念
数据流图基本概念

数据流图是结构化分析的工具,遵循自顶向下、从抽象到具体的原则。

  1. 数据流:由一组固定成分的数据组成,表示数据的流向。每个数据流通常有一个适合的名词,反映数据流的含义。数据流必须和加工相关,即从加工流向加工、数据源流向加工、加工流向数据源

  2. 加工:描述了输入数据流到输出数据流之间的变换,也就是输入数据流做了什么处理之后变成了输出数据流。

  3. 数据存储(文件):用于表示暂时存储的数据,每个文件都有名字。流向文件的数据流表示写文件,流出的表示读文件。

  4. 外部实体:值存在于软件系统外的人员活组织

数据字典DD

数据字典
数据字典

数据字典有以下4类条目:数据流、数据项、数据存储和基本加工。

判定表、判定树 、结构化语言

Alt text
Alt text
结构化语言
结构化语言
判定表
判定表
判定树
判定树
例题
例题

系统设计

系统设计概述

软件设计的任务和活动

概要设计和详细设计
1. 抽象化
2. 自顶向下
3. 信息隐蔽
4. 模块独立(高内聚、低耦合)
  1. 体系结构设计:定义软件系统各主要部件之间的关系。
  2. 数据设计:基于E-R图确定软件及设计的文件系统的结构及数据库的表结构。
  3. 接口设计:软件内部,软件和操作系统间以及软件和人之间如何通信,其主要依赖于分析阶段的数据流图。
  4. 过程设计:系统结构部件转换成软件的过程描述。确定软件各个组成部分内的算法及内部数据结构,并选定某个过程的表达形式来描述各种算法。

应用的工具:

  1. 输入输出(IPO)图
  2. PDL
  3. PAD
  4. 程序流程图
  5. N/S盒图

例题1:概要设计文档的内容包括:体系结构设计、数据库设计、逻辑数据结构设计

例题2:结构化开发方法中,过程设计主要包含对数据结构和算法的设计。

模块设计

原则:

  1. 保存模块的大小适中
  2. 尽可能减少调用的深度
  3. 多扇入,少扇出
  4. 单入口,单出口
  5. 模块的作用域应该在模块之内
  6. 功能应该是可预测的

核心原则:高内聚,低耦合

内聚性
内聚性
耦合性
耦合性

人机界面设计

黄金三原则:置于用户控制之下、减少用户的记忆负担、保持界面的一致性

架构设计

  1. 架构设计的核心问题是能否达到架构级的软件复用
  2. 架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个构件有效地组织成一个完整的系统
  3. 架构风格定义了用于描述系统的术语表和一组指导构建系统的规则
    1. 数据流风格:批处理序列、管道-过滤器
      1. 批处理序列

        构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在其前一步结束之后才能开始,且数据必须是完整的,以整体的方式进行传递。

      2. 管道-过滤器

        每个构件都有一组输入和输出,构建读输入的数据流,经过内部处理,产出输出数据流。这个过程通常是通过对输入数据的变换或计算来完成的,包括通过计算和增加信息以丰富数据、通过压缩和删除以精简数据、通过改变记录方式以转换数据和递增地转换数据等。这里的构件被称为过滤器,连接件就是数据流传输的管道,将一个过滤器的输出传到另外一个过滤器的输入。

    2. 调用/返回风格:主程序/子程序、面向对象、层次结构(MVC、C/S、B/S)
      1. 主程序/子程序:

        单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序,子程序通常可以合并为模块。过程调用作为交互机制,即充当连接件的角色。调用关系具有层次性,其语义逻辑表现为主程序的正确性取决于它调用的子程序的正确性。

      2. 面向对象:显示调用过程

        构件是对象,对象是抽象数据类型的实例。在抽象数据类型中,数据的表示和它们的相印操作被封装起来,对象的行为体现在其接受和请求的动作。连接件即是对象间交互的方式,对象是通过函数和过程的调用来交互的。

      3. 层次结构:

        构件组织是一个层次结构,连接件通过决定层间如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能见到与自己邻近的层。通过层次化结构,可以将大的问题分解为若干个渐进的小问题逐步解决,可以隐藏问题的复杂度。修改某一层,最多影响其相邻两层。 层次结构优缺点

        MVC架构
        MVC架构
    3. 独立构件风格:进程通信、事件驱动系统(隐式调用)
      1. 进程通信:

        构件是独立的过程,连接件是消息传递。构件通常是命名过程,消息传递的方式可以是点对点、异步或同步方式,以及远程过程调用等。

      2. 事件驱动系统(隐式调用):

        构件不直接调用一个过程,而是触发或广播一个或多个事件。构件中的过程在一个或多个事件中注册,当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。

    4. 虚拟机风格:解释器、基于规则的系统 解释器和基于规则的系统
    5. 仓库风格:数据库系统、超文本系统、黑板系统 仓库风格

系统测试(必考)

测试的基本概念及分类

系统测试的原则:

  1. 尽早、不断的进行测试
  2. 避免程序员自己测试自己设计的程序
  3. 既要选择合理的数据,又要选择无效、不合理的数据
  4. 修改后应进行回归测试
  5. 尚未发现的错误数量与该程序已发现错误的数量成正比

测试分类:

  1. 动态测试(机器运行):

    1. 黑盒测试
      1. 等价类划分
      2. 边界值分析
      3. 错误推测
      4. 因果图
    2. 白盒测试
      1. 基本路径测试
      2. 循环覆盖测试
      3. 逻辑覆盖测试
    3. 灰盒测试(黑盒+白盒测试)
  2. 静态测试(纯人工):

    1. 桌前检查
    2. 代码审查
    3. 代码走查

黑盒测试

  1. 等价类划分
    1. 确定无效和有效等价类
    2. 设计用力尽可能多的覆盖有效类
    3. 设计用例只覆盖一个无效类
  2. 边界值分析
    1. 处理边界情况时最容易出错
    2. 选取的测试数据应该恰好等于、稍小于或稍大于边界值

白盒测试(重点)

白盒测试
白盒测试
例题1
例题1
例题2
例题2

测试阶段划分

测试阶段
测试阶段
例题
例题

McCabe复杂度计算

环路复杂度计算
环路复杂度计算

边的个数 - 点个数 + 2 = V(G)

例题
例题
节点图
节点图

软件维护

软件维护
软件维护

软件文档

软件文档管理
软件文档管理

软件质量保证模型

软件质量保证模型
软件质量保证模型
例题
例题
上次编辑于:
贡献者: 15327360835
Loading...