软件工程 期末复习

瀑布模型:计划

螺旋模型:风险低

原型模型: 用户反馈

喷泉模型:代码复用


 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小

  1. 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能或者一组紧密相关的功能。这样做的好处是可以让模块更容易理解和维护。例如,一个专门处理用户输入验证的模块就应该只包含与输入验证相关的代码,而不应该混入数据库访问等其他功能的代码。

  2. 低耦合:指的是模块之间的依赖程度要尽可能小。模块之间如果存在高度依赖(即高耦合),那么修改一个模块可能会导致其他多个模块也需要做出相应修改,这会大大增加维护成本和出错的可能性。低耦合的设计鼓励使用接口或者抽象层来减少直接依赖,使得系统更加灵活和易于修改。例如,通过定义接口来规范不同模块之间的交互,可以降低模块间的直接依赖关系。


类图:

1.关联关系(association)
关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;

比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;

关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;

注:在最终代码中,关联对象通常是以成员变量的形式实现的;
 

2.依赖关系:是用一套带箭头的虚线表示的;如下图表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系;

_images/uml_dependency.jpg

与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;

显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;


 


 


软件测试的目的
  • 测试是一个为了发现错误而执行程序的过程。
  • 一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试用例。
  • 一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。

    白盒测试

  • 语句覆盖:

  • 判定覆盖:选择足够的测试用例,使得运行这些测试用例时,被测程序的所有可能结果都至少出现一次(即判定的每个分支都至少经过一次)

  • 条件覆盖:选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次


    黑盒测试

  • 等价分类法:

  • 边界值分析法:


    测试策略

  • 单元测试:是针对程序中的模块或构件,主要揭露编码阶段产生的错误。

  • 集成测试:针对集成的软件系统,主要揭露设计阶段产生的错误

  • 确认测试:是根据软件需求规约对集成的软件进行确认,主要揭露不符合需求规约的错误。

  • 系统测试:对于基于计算机系统中的软件,还需将它集成到基于计算机系统中,并进行系统测试,以揭露不符合系统工程中对软件要求的错误。


    软件维护与再工程
    1.什么是软件维护?
    是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程。
    2.软件维护分类
    纠错性维护:为了改正软件系统中的错误,使软件能够满足预期的正常运行状态的要求而进行的维护
    适应性维护:为了使软件适应内部或外部环境变化,而去修改软件的过程。
    改善性维护:满足使用过程中用户提出增加新功能或修改已有功能的建议维护。
    预防性维护:为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础而修改软件的活动。
     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙 Stege模型 多模块应用

模块 一个鸿蒙应用可能包含一个或者多个功能模块,在 DevEcoStudio 工程中可以创建对应的一个或多个 Module。Module 又分为 “Ability” 和 “Library”两种类型,“Ability”类型的 Module 对应于编译后的 HAP(Harmony Ability Package&…

领域LLM九讲——第4讲 构建可测评、可优化的端到端商业AI Agent 系统

领域LLM九讲——第4讲 构建可测评、可优化的端到端商业AI Agent 系统 以 OpenAI Cookbook 的《receipt_inspection》示例为基础,探讨如何设计一个可测试、可优化的端到端 AI Agent 系统。整体流程分为三个阶段: (1) 端到端 Agent 构建(基线测…

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…

Linux线程与进程关系及底层实现

在操作系统中,线程切换相比进程切换更轻量级的关键原因之一是 缓存(Cache)的有效性,尤其是对 CPU 缓存(如 L1/L2/L3)和 TLB(Translation Lookaside Buffer)的影响。以下从缓存角度详…

【论文阅读30】Bi-LSTM(2024)

用于精确实时滑坡检测的双向LSTM模型:以印度梅加拉亚邦毛永格里姆为例的研究 IEEE Internet of Things Journal(简称 IoT‑J)是一份 IEEE 自 2014 年起双月刊发表的国际顶级学术期刊,专注于物联网各领域的研究。 作者&#xff1a…

Java编程之原型模式

原型模式的定义 原型模式(Prototype Pattern)是一种创建型设计模式,通过复制已有对象来创建新对象,而非通过常规的手段的new关键字来实例化。适用于对象创建成本较高或需要动态配置的场景。 例如,在一个游戏开发中&am…

RAG质量评估

当完成了一个RAG系统的开发工作以后,还需要对该系统的性能进行评估。如何对RAG系统的性能进行评估呢?仔细分析RAG系统的产出成果,主要涉及以下几点: (1)检索器组件 检索的相关文档 context, (…

LLMs基础学习(八)强化学习专题(1)

LLMs基础学习(八)强化学习专题(1) 文章目录 LLMs基础学习(八)强化学习专题(1)学习资料资源强化学习是什么强化学习一句话精准定义 强化学习与其他学习类型的对比强化学习 vs 监督学习…

19-Oracle 23 ai Database Sharding-知识准备

小伙伴是不是经常遇见大规模集群和数量的时候,业务就提出要对数据进行sharding。 Oracle 和其他数据库(如 MySQL、PostgreSQL、MongoDB 等) 为什么要进行分片(sharding),分片的原因是什么,实现…

分类与逻辑回归 - 一个完整的guide

线性回归和逻辑回归其实比你想象的更相似 😃 它们都是所谓的参数模型。让我们先看看什么是参数模型,以及它们与非参数模型的区别。 线性回归 vs 逻辑回归 线性回归:用于回归问题的线性参数模型。逻辑回归:用于分类问题的线性参数…

英语写作中“每一个”each individual、every individual、every single的用法

一、Individual :个体,相对于团体,例如: Individual competition (个人比赛),相对于team competition (团体比赛) Individual users (个人用户)…

由于 z(x,y) 的变化导致的影响(那部分被分给了链式项)

✅ 本质问题:为什么链式法则中 ∂ F ∂ x \frac{\partial F}{\partial x} ∂x∂F​ 不考虑 z z ( x , y ) zz(x,y) zz(x,y)? 🔍 一、关键是:偏导数的定义是什么? 我们从最根本的定义开始: ∂ F ( x , y…

python打卡day44@浙大疏锦行

知识点回顾: 预训练的概念常见的分类预训练模型图像预训练模型的发展史预训练的策略预训练代码实战:resnet18 作业: 尝试在cifar10对比如下其他的预训练模型,观察差异,尽可能和他人选择的不同尝试通过ctrl进入resnet的…

十一(3) 类,加深对拷贝构造函数的理解

class ClassName { public: // 拷贝构造函数:参数是同类型对象的引用(通常为 const 引用) ClassName(const ClassName& other) { // 复制 other 的成员变量到当前对象 } }; 参数要求:必须是同类型对象的引用&#xff0…

网页后端开发(基础1--maven)

maven的作用: Maven是一款管理和构建Java项目的工具。 1.依赖管理: 方便快捷的管理项目依赖的资源(jar包) 不用手动下载jar包,只需要中maven中引用,maven会查找本地仓库。若本地仓库没有,会直…

认识电子元器件---高低边驱动

目录 一、基本概念 二、关键参数对比 三、工作原理 (1)高边驱动 (2)低边驱动 四、典型的应用场景 五、如何选择 一、基本概念 可以理解成:高低边驱动是MOS/IGBT的一种应用方式 高低边驱动是电路拓扑概念&#…

JavaScript 标签加载

目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …

C/CPP 结构体、联合体、位段内存计算 指南

C/CPP 结构体、联合体、位段内存计算 指南 在C语言中,结构体、联合体和位段是对数据的高级抽象,它们可以让程序员以更易于理解的方式来操作复杂的数据结构。然而,这些结构在内存中的布局可能并不如它们的语法结构那样直观,特别是当…

ASR(语音识别)语音/字幕标注 通过via(via_subtitle_annotator)

文章目录 1 VIA 官网资料2 语音/字幕标注3 键盘快捷键常规当一个时间片段被选中时图像或视频帧中的空间区域 1 VIA 官网资料 VIA官网:https://www.robots.ox.ac.uk/~vgg/software/via/ VIA官网标注示例:https://www.robots.ox.ac.uk/~vgg/software/via/…

mq安装新版-3.13.7的安装

一、下载包,上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量,直接就安装了。 erl…