2024-10-22
软件设计师
0
请注意,本文编写于 247 天前,最后修改于 235 天前,其中某些信息可能已经过时。

目录

软件开发模型
瀑布模型SDLC
原型模型、演化模型、增量模型
螺旋模型
V模型
喷泉模型
快速开发模型RAD
构件组装模型CBSD
统一过程UP(RUP)
敏捷开发方法
信息系统开发方法
结构化法
原型法
面向对象方法
面向服务方法
需求工程
需求分类与需求获取
系统设计
结构化设计
基本原则
内聚与耦合
系统结构 模块结构
软件测试
测试的原则
测试的类型
测试用例设计
测试阶段
McCabe复杂度
软件维护
软件过程改进
CMMI:能力成熟度模型
项目管理
面向对象
设计原则
UML
设计模式
概念
创建型模式
结构型模式
行为型模式
数据流图DFD
基本概念
数据字典
平衡原则
解题技巧
案例分析
试题1
试题2
数据库设计
数据库设计过程
ER模型
实体间联系类型
答题技巧
案例分析
试题1
试题2
UML建模
用例图
类图与对象图
顺序图
活动图
状态图
通信图
案例分析
试题1
试题2

软件开发模型

瀑布模型SDLC

image.png

强调了文档化标准化,把结构化的各种方法和特点表现得淋漓尽致

改进瀑布模型:添加回溯阶段

image.png

瀑布模型容易存在问题的根本原因:需求阶段无法完全把控

适用场景:需求明确二次开发

原型模型、演化模型、增量模型

image.png

原型模型:在项目开发初期构造一个简易系统,可以是界面,也可以有功能,针对需求不明确的情况

原型法往往只用于需求分析阶段

把原型通过很多的演化和调整形成最终产品,为演化模型

螺旋模型有原型、演化、瀑布的特征

原型的思想和瀑布模型的思想得到增量模型,例如先把核心做出来,然后一部分一部分进行所有的内容

螺旋模型

image.png

  • 融合了多种模型的特征
  • 引入了风险分析

V模型

image.png

体现出阶段的对应关系,希望提早发现问题

喷泉模型

喷泉模型最大的特点是面向对象

image.png

快速开发模型RAD

瀑布模型和构件化开发模型组合形成的模型

image.png

构件组装模型CBSD

把软件开发中的各个模块考虑做成构件,再把构件进行组装,极大提高了软件开发的复用性,缩短开发时间,减少成本,提高可靠性

image.png

统一过程UP(RUP)

image.png

敏捷开发方法

敏捷开发方法不是一个模型,而是一组模型

image.png

信息系统开发方法

结构化法

  • 用户至上
  • 严格区分工作阶段,每阶段有任务与成果
  • 强调系统开发过程的整体性和全局性
  • 系统开发过程工程化,文档资料标准化
  • 自顶向下,逐步分解(求精)

原型法

  • 适用于需求不明确的开发
  • 包括抛弃式原型和演化式原型

面向对象方法

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

面向服务方法

  • SO方法有三个主要的抽象级别:操作、服务、业务流程
  • SOAD分为三个层次:基础设计层(底层服务构件)、应用结构层(服务之间的接口和服务级协定)、业务组织层(业务流程建模和服务流程编排)
  • 服务建模:分为服务发现、服务规约和服务实现三个阶段

需求工程

需求分类与需求获取

image.png

系统设计

结构化设计

基本原则

image.png

内聚与耦合

内聚类型描述
功能内聚完成一个单一功能,各个部分协同工作,缺一不可
顺序内聚处理元素相关,而且必须顺序执行
通信内聚所有处理元素集中在一个数据结构的区域上
过程内聚处理元素相关,而且必须按特定的次序执行
瞬时内聚(时间内聚)所包含的任务必须在同一时间间隔内执行
逻辑内聚完成逻辑上相关的一组任务
偶然内聚(巧合内聚)完成一组没有关系或松散关系的任务
耦合类型描述
非直接耦合两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的
数据耦合一组模块借助参数表传递简单数据
标记耦合一组模块通过参数表传递记录信息(数据结构)
控制耦合模块之间传递的信息中包含用于控制模块内部逻辑的信息
外部耦合一组模块都访问同一全局简单变量,而且不是通过参数表传递该全局变量的信息
公共耦合多个模块都访问同一个公共数据环境
内容耦合一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口

系统结构 模块结构

image.png

软件测试

测试的原则

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

测试的类型

  • 动态测试
    • 黑盒测试法
    • 白盒测试法
    • 灰盒测试法
  • 静态测试
    • 桌前检查
    • 代码走查
    • 代码审查

测试用例设计

  • 黑盒测试
    • 等价类划分:考虑程序模块的功能,把数据进行汇总,哪些数据可以分为一类,覆盖面比较全面
    • 边界值分析:测试边界值(给出一个区间,边界值:正好在端点的两个值,略小于端点和略大于端点的值)
    • 错误推测
    • 因果图:由果分析因
  • 白盒测试
    • 基本路径测试
    • 循环覆盖测试
    • 逻辑覆盖测试
      • 语句覆盖:设计的测试用例要让所有的语句都被执行,层次低
      • 判定覆盖:所有判定的真假分支都被覆盖
      • 条件覆盖:条件中所有的条件的真假判定都被覆盖
      • 条件判定覆盖
      • 修正的条件判断覆盖
      • 条件组合覆盖
      • 点覆盖
      • 边覆盖
      • 路径覆盖:所有可行的路径都被覆盖

测试阶段

image.png

单元测试后进行集成测试,确认测试和系统测试的顺序是不确定的

McCabe复杂度

image.png

计算有向图G的环路复杂度公式为:V(G)=mn+2V(G)=m-n+2

V(G)是有向图G中的环路个数,m是G中的有向弧数(),n是G中的节点数(

将语句抽象为环路,对于分叉的地方,可以抽象为节点,也可以不抽象为节点,不影响环路复杂度的结果计算

软件维护

软件维护是生命周期的一个完整部分。

可以将软件维护定义为需要提供软件支持的全部活动,这些活动包括在交付前完成的活动,以及交付后完成的活动。交付前完成的活动包括交付后运行的计划和维护计划等;交付后的活动包括软件修改、培训、帮助资料等

可维护性:

  • 易分析性
  • 易改变性
  • 稳定性
  • 易测试性

维护类型:

  • 改正性维护(25%) 正确性维护
  • 适应性维护(20%)
  • 完善性维护(50%)
  • 预防性维护(5%)

软件过程改进

CMMI:能力成熟度模型

衡量开发商改善软件的能力

image.png

CMMI从2级开始,1级为混乱级,是不需要评的

项目管理

image.png

十大知识领域:

01 项目整合管理

整合管理是指为确保项目中各项工作,能够有机地协调和配合而展开的,综合性和全局性的项目管理工作和过程。包括项目集成计划的制订、项目集成计划的实施和项目变动总体控制等。

02 项目范围管理

范围管理是指为完成项目目标,对项目的工作内容进行控制的管理过程,包括范围的界定、范围的规划和范围的调整等。

03 项目进度管理

进度管理是指为确保项目按时完成的一系列管理过程,包括具体活动的界定,如活动排序、时间估计、进度安排及时间控制等。

04 项目成本管理

成本管理是指为保证完成项目的实际成本不超过预算成本的管理过程,包括资源的配置、成本的预算及成本的控制等。

05 项目质量管理

质量管理是指为确保项目达到客户规定的质量要求所实施的一系列管理措施,包括质量规划、质量控制和质量保证等。

06 项目资源管理

项目资源管理包括识别、获取和管理所需资源以成功完成项目的各个过程,这些过程有助于确保 项目经理和项目团队在正确的时间和地点使用正确的资源。

07 项目沟通管理

沟通管理是指为确保项目信息的合理收集和传输所实施的一系列措施,包括沟通规划、信息传输和进度报告等。

08 项目风险管理

风险管理涉及项目可能遇到的各种不确定因素,包括风险识别、风险评估和风险控制等。

09 项目采购管理

采购管理是指为从项目实施组织之外获得所需要的资源或服务而采取的一系列管理措施。

10 项目相关方管理

相关方管理是指对项目相关方及其需求和期望进行识别和分析,并通过沟通上的管理来满足需要、解决问题的过程。

image.png

风险管理:损失或损害的可能性

关心未来、关心变化、关心选择

分类:项目风险、技术风险、商业风险

风险曝光度(Risk Exposure):出现风险的概率×风险可能造成的损失

image.png

面向对象

  • 对象
  • 类(实体类、边界类、控制类)
  • 抽象
  • 封装
  • 继承与泛化
  • 多态
  • 接口
  • 消息
  • 组件
  • 模式和复用

设计原则

  • 单一职责原则:设计目的单一的类
  • 开放-封闭原则:对扩展开放,对修改封闭
  • 李氏(Liskov)替换原则:子类可以替换父类,该原则希望我们不要盲目重载、修改父类的方法
  • 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
  • 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
  • 组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
  • 迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解

image.png

image.png

UML

image.png

设计模式

概念

  • 架构模式:软件设计中的高层决策,例如C/S结构,架构模式反映了开发软件系统过程中所作的基本设计决策
  • 设计模式:主要关注软件系统的设计,与具体的实现语言无关
  • 惯用法:是最低层的模式,关注软件系统的设计与实现,实现时通过某种特定的程序设计语言来描述构件与构件之间的关系。每种编程语言都有它自己特定的模式,即语言的惯用法

image.png

创建型模式

设计模式名称简要说明
Abstract Factory
抽象工厂模式
提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类
Builder
构建器模式
将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示
Factory Method
工厂方法模式
定义一个创建对象的接口,但由子类决定需要实例化哪一个类。工厂方法使得子类实例化的过程推迟
Prototype
原型模式
用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象
Singleton
单例模式
保证一个类只有一个实例,并提供一个访问它的全局访问点

结构型模式

设计模式名称简要说明速记关键字
Adapter
适配器模式
将一个类的接口转换成用户希望得到的另一种接口。它使原本不相容的接口得以协同工作转换接口
Bridge
桥接模式
将类的抽象部分和它的实现部分分离开来,使它们可以独立地变化继承树拆分
Composite
组合模式
将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性树形目录结构
Decorator
装饰模式
动态地给一个对象添加一些额外的职责。它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活附加职责
Facade
外观模式
定义一个高层接口,为子系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用对外统一接口
Flyweight
享元模式
提供支持大量细粒度对象共享的有效方法
Proxy
代理模式
为其他对象提供一种代理以控制这个对象的访问

行为型模式

设计模式名称简要说明速记关键字
Chain of Responsibility
职责链模式
通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求传递职责
Command
命令模式
将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作日志记录,可撤销
Interpreter
解释器模式
给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子
Iterator
迭代器模式
提供一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示
Mediator
中介者模式
用一个中介对象来封装一系列的对象交互。它使各对象不需要显式地相互调用,从而达到低耦合,还可以独立地改变对象间的交互不直接引用
Memento
备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将该对象恢复到原先保存的状态
Observer
观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新
State
状态模式
允许一个对象在其内部状态改变时改变它的行为状态变成类
Strategy
策略模式
定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化多方案切换
Template Method
模板方法模式
定义一个操作中的算法股价,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤
Visitor
访问者模式
表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用域这些元素的新操作

数据流图DFD

需求分析阶段用到的工具

必考题,15分

基本概念

image.png

分层数据流图

image.png

数据字典

image.png

平衡原则

  • 父图与子图间的平衡 image.png
  • 子图内平衡:正常的形态是既有输入也有输出,只有输入没有输出称为“黑洞”,只有输出没有输入称为“奇迹”

解题技巧

  • 详细分析试题说明
  • 利用数据平衡原则

image.png

案例分析

试题1

image.png

image.png

image.png

试题2

image.png

image.png

image.png

数据库设计

数据库设计过程

image.png

ER模型

实体间联系类型

image.png

转换的基本原则:实体和联系分别转换成关系,属性则转换成相应关系的属性

  • 一对一联系:联系转换到任意一端
  • 一对多联系:联系转换到多的一端
  • 多对多联系:联系必须转换成单独的关系
  • 多元联系

例:学生表转成关系模式,学号、姓名等属性需要转换,往往容易忽视掉联系中的属性,如班级号

答题技巧

  • 详细分析试题说明
  • 熟练掌握基础知识

案例分析

试题1

image.png

试题2

image.png

image.png

UML建模

用例图

image.png

包含关系:登记外借信息会使用用户登录

扩展关系:查询是基本用例,延伸出来修改

包含和扩展的区别在于是否必需

类图与对象图

image.png

多重度:

  • 1:表示一个集合中的一个对象对应另一个集合中一个对象
  • 0..*:表示一个集合中的一个对象对应另一个集合中的0个或多个对象(可以不对应)
  • 1..*:表示一个集合中的一个对象对应另一个集合中的一个或多个对象(至少对应一个)
  • *:表示一个集合中的一个对象对应另一个集合中的多个对象

关系:依赖、泛化(类)、关联(组合、聚合)、实现(接口)

聚合:菱形块所在的位置为聚合后

image.png

顺序图

表现出了处理事务时的时间顺序

image.png

考查的核心放在消息上,例如补全消息

活动图

表现整个处理流程的基本情况、分支的状态

image.png

带泳道的活动图:

image.png

状态图

表现状态的变迁,也属于动态图

image.png

通信图

又称为协作图,是顺序图的另一种表达方式

image.png

也可以把顺序图和通信图统称为交互图

顺序图强调时间顺序

案例分析

试题1

image-20241023222353162.png

image-20241023222358582.png

image-20241023222401959.png

image-20241023222405024.png

image-20241023224617711.png

image-20241023224800448.png

试题2

image.png

image.png

本文作者:Morales

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 License 许可协议。转载请注明出处!