软件工程相关

1.软件过程模型(重要

1.1.瀑布模型

  1. 只适合需求明确的项目
  2. 严格串行化,很长时间才能看到结果。
  3. 严格区分阶段,每个阶段因果紧密相连,且要求每个阶段一次性解决该阶段的任务

1.2.原型模型(构造简易模型确定需求)

  1. 适合需求不明确的项目
  2. 分为原型开发阶段和目标软件开发阶段
  3. 原型开发阶段分为:需求分析,软件设计,程序设计

1.3.螺旋模型(原型+瀑布+风险分析)

  1. 增加了风险分析
  2. 把开发过程分为多个阶段,每个阶段都有评审+目标设定+风险分析+开发与有效性验证构成

1.4.统一过程

1.4.1.阶段

  1. 初始:确定系统范围,定义产品视图和业务模型
  2. 细化:设计系统架构,确定工作计划及资源需求
  3. 构造:开发剩余构件,并集成成产品测试
  4. 移交:制作产品发布版本

1.4.2.九个核心工作流

  1. 过程:业务建模,需求,分析与设计,实现,测试,部署
  2. 支持:配置与变更管理,项目管理,环境

1.4.3.核心

  1. 用例驱动
  2. 架构为中心
  3. 迭代和增量

1.5.敏捷方法(适合小型项目)

1.5.1.特点

  1. 增量迭代,小步快跑
  2. 适应性的而非预设性
  3. 以人为本
  4. 适合小型项目
  5. 价值观:沟通(面对面),简单(不过度设计),反馈,勇气

1.5.2.敏捷方法

  1. 极限编程XP:近螺旋开发方法。价值观(交流,朴素,反馈,勇气)
  2. 水晶方法:提倡机动性
  3. scrum:侧重于项目管理
  4. 特征驱动开发(FDD):开发三要素(人,过程,技术)。六种关键项目角色(项目经理,首席架构师,开发经理,主程序员,程序员,领域专家
  5. 开放式源码:开发人员地域上分布广,不会集中办公

1.6.构建组装模型(易复用)

1.6.1.优缺点

  1. 优点:易扩展,易重用,降低成本,安排任务更灵活
  2. 缺点:构件设计需要经验丰富架构师,第三方构件质量难控制
  3. 服务是一种标准化程度更高的构件

1.6.2.基于构件的软件工程CBSE(购买而不是重新构造

1.6.2.1.特征
  1. 可组装:所有外部交互通过公开接口进行
  2. 可部署:构件是二进制形式,作为一个独立实体在平台运行
  3. 文档化:用户根据文档判断是否满足需求
  4. 独立性:在无其他构件情况下组装
  5. 标准化:符合某种标准化的构件模型
1.6.2.2.模型要素
  1. 接口:构件通过构件接口来定义(操作名/参数/异常)
  2. 使用信息:构件元数据是构件本身相关的数据。构件是通用实体,在部署的时候,必须对构件进行配置适应系统
  3. 部署:有关包中内容信息+二进制构成信息
1.6.2.3.组装(借助胶水代码
  1. 顺序组装:按顺序调用已经存在的构件
  2. 层次组装:A调用B,B调用C,一条调用链.接口兼容
  3. 叠加组装:多个构件形成新构件,对外提供新接口
1.6.2.4.组装出现不兼容
  1. 参数不兼容:操作名相同,但是参数个数或者类型不同
  2. 操作不兼容:操作名不同
  3. 操作不完备:提供接口是所需的子集,或者相反

1.7.V模型

  1. 测试贯穿始终,而不是像瀑布模型最后再有,避免最后出问题再整体改
  2. 从需求分析起,每个阶段都有对应的测试

2.逆向工程(设计的恢复过程)

  1. 实现级:抽象语法树,符号表,过程
  2. 结构级:程序分量之间的依赖关系,调用图,结构图,数据结构
  3. 功能级:程序段功能及程序段之间关系,数据和控制流模型
  4. 领域级:应用领域概念间关系。实体关系模型

3.净室软件工程(理想化软件开发)

3.1.概念

  1. 强调以合理的成本开发高质量软件
  2. 函数理论抽样理论为其理论基础
  3. 不需要单元测试(保留传统的模块测试),进行正确性验证和统计质量控制

3.2.技术手段

  1. 控制迭代:统计过程控制下增量式开发
  2. 基于函数的规范和设计:行为视图(黑盒)- 有限状态机视图(状态盒)-过程视图(明盒)
  3. 正确性验证:净室工程的核心,使软件质量有了极大的提高
  4. 统计测试和软件验证:抽样

3.3.缺点

  1. 太理论化,正确性验证步骤比较难且耗时
  2. 不进行传统模块测试不现实
  3. 带有传统软件工程的弊端

4.需求工程

4.1.概念

  1. 需求开发+需求管理构成
  2. 需求开发:需求获取+需求分析+形成需求规格(SRS)+需求确认与验证(形成需求基线)
  3. 需求管理是对需求基线机型管理,包括变更控制,版本控制,需求跟踪,需求状态跟踪

4.2.需求获取

4.2.1.获取方法

  1. 用户面谈:1对1或3,有代表性用户,成本高需要有领域知识支撑
  2. 需求专题讨论会(JRP高度组织的群体会议,了解想法,消除分歧,成本高
  3. 问卷调查用户多,无法一一访谈,成本低
  4. 原型:解决早期需求不确定问题
  5. 头脑风暴:发散思维

4.2.2.需求分层

  1. 业务需求(整体全局)
  2. 用户需求(用户视角)
  3. 功能需求(计算机化):功能需求+性能需求+设计约束

4.2.3.项目管理维度(QFD)

  1. 基本需求(明示)
  2. 期望需求(隐含)
  3. 兴奋需求(多余)

4.3.需求分析

4.2.1.组成(数据字典是核心)

  1. 行为模型:状态转换图(状态+事件)
  2. 功能模型:数据流图(DFD):数据流+加工+数据存储+外部实体
  3. 数据模型:ER图(实体+联系)
  4. 数据字典:数据元素+数据结构+数据流+数据存储+加工逻辑+外部实体

4.2.2.ER图

  1. m:n

4.2.3.UML

  1. 静态图:类图,对象图,构件图,部署图(软硬件映射
  2. 动态图:用例图(系统与外部参与者互动)顺序图(按时间顺序)通信图(协作图)活动图(并行行为),状态图(状态变迁)

4.3.需求定义(形成需求规格)

4.3.1.严格定义法

  1. 所有需求能够被预先定义
  2. 开发人员与用户之间能够准确而清晰的交流
  3. 图形/文字可以充分体现最终系统

4.3.2.原型法

  1. 并非所有需求都能在开发前被定义
  2. 项目参与者之间通常存在交流困难
  3. 需要实际可供用户参与的系统模型

4.4.需求变更管理过程

  1. 需求变更管理过程:问题分析和变更描述(识别出问题)- 变更分析和成本计算 - 变更实现
  2. 需求变更控制流程十大步骤:明确问题-书面申请-判断变更需求类别-评估变更影响-判断变更紧急级别-沟通确认-明确解决方案-审批管理(变更控制委员会)-执行变更-版本控制

5.系统设计

5.1.界面设计

  1. 置于用户控制之下
  2. 减少用户记忆负担
  3. 保持界面一致性

5.2.结构化设计

5.2.1.分类

  1. 概要设计(外部设计):确定每个模块的功能和调用关系,形成模块结构图
  2. 详细设计(内部设计):为每个具体任务选择适当的技术手段和处理方法

5.2.2.结构化设计原则

  1. 模块独立性原则(高内聚,低耦合
  2. 保持模块大小适中
  3. 多扇入,少扇出
  4. 深度和宽度不宜过高

5.2.3.耦合(低-高)

  1. 非直接耦合
  2. 数据耦合(简单数据传递
  3. 标记耦合(数据结构传递
  4. 控制耦合(控制模块内部逻辑信息传递)
  5. 外部耦合:全局简单变量
  6. 公共耦合:公共数据环境
  7. 内容耦合:代码重叠

5.2.4.内聚(高-低)

  1. 功能内聚:完成单一功能,各部分协同工作
  2. 顺序内聚:必须顺序执行
  3. 通信内聚:处理元素集中在一个数据结构区域上
  4. 过程内聚:处理元素相关,必须按特定次序执行
  5. 时间内聚:必须同一时间间隔执行
  6. 逻辑内聚:逻辑上相关的任务
  7. 偶然内聚:没啥关系

5.2.5.面向对象设计原则

  1. 输入和输出
  2. 处理功能
  3. 内部数据
  4. 程序代码

5.2.6.类的分类

  1. 边界类(API接口、用户界面)
  2. 控制类(应用逻辑,业务逻辑,数据访问逻辑)
  3. 实体类(数据ER图)

5.2.7.面向对象设计原则

  1. 单一职责:目的单一的类
  2. 开放-封闭原则:扩展开放,修改封闭
  3. 李氏替换:子类可以替换父类
  4. 依赖倒置:针对接口编程而不是具体实现
  5. 接口隔离原则:多个专门接口比单一综合接口好
  6. 组合重用原则:尽量使用组合,而不是继承关系
  7. 迪米特原则:一个对象对其他对象尽可能了解少

6.软件测试

6.1.软件测试方法

  1. 动态测试:白盒测试(关注内部结构与逻辑),黑盒测试(关注输入输出)
  2. 静态测试:桌前检查,代码审查(静态分析),代码走查

6.2.动态测试

6.2.1.白盒测试(结构测试,单元测试阶段)

  1. 控制流测试:逻辑覆盖测试(语句覆盖最弱-路径测试覆盖最强)
  2. 程序变异测试(错误驱动)

6.2.2.黑盒测试(功能测试,集成,确认,系统测试阶段)

  1. 等价类划分
  2. 边界值分析
  3. 错误推测:测试人员的经验和直觉
  4. 判定表:多个逻辑条件取值的组合所构成的复杂情况下,分别要执行哪些不同操作
  5. 因果图:根据输入条件与输出结果之间的因果关系来设计测试用例

6.3.软件测试阶段

6.3.1.阶段

  1. 单元测试:依据详细设计,模块内
  2. 集成测试:依据概要设计,模块间
  3. 系统测试:依据需求文档,功能测试,性能测试,验收测试确认测试,依据需求文档,用户参与),压力测试

6.3.2.其他测试

  1. AB测试:多版本同时使用(网页优化方法)
  2. Web测试:web系统测试与其他测试测试重点不同
  3. 链接测试:确实链接到该链接的页面,测试链接页面是否存在,确定没有鼓励页面
  4. 表单测试:验证服务器是否正确保存数据,测试提交操作的完整性

6.3.3.集成测试策略

  1. 一次性组装(风险高)
  2. 增量式组装(测试全面):自顶向下(桩模块mock),自底向上(驱动模块),混合式(都需要)

6.3.4.软件系统测试

  1. 功能测试
  2. 性能测试:负载测试,压力测试(测上限),强度测试(测下限),容量测试(并发测试)。可靠性测试

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

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

相关文章

每日学习一个数据结构-图

文章目录 图基础一、图的定义二、图的相关概念三、图的分类四、图的使用场景 和图相关的算法一、图的遍历算法二、最短路径算法三、最小生成树算法四、图匹配算法五、网络流算法 图基础 一、图的定义 在数学中,图是描述于一组对象的结构,其中某些对象对…

YOLOv11模型地址

地址链接 项目Git地址:https://github.com/ultralytics/ultralytics?tabreadme-ov-file

大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成

大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成 待解决的问题 生成PPT大纲是一种大模型在办公场景下应用的常见需求。 然而: 目前直接让大模型生成大纲往往是非结构化的,输出格式多样,难以统一和规范&#…

Idea 2024.2.3 找不到Cache Recovery设置

idea找不到官网所说的设置 下面是解决办法 1.找到对应位置 2.增加配置文件内容 idea.is.internaltrue3.重启idea 4.查看结果 解决方案原文

Kubernetes(K8s)的简介

一、Kubernetes的简介 1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个阶段: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应…

MySQL 查询数据

MySQL 数据库使用SQL SELECT语句来查询数据。 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据。 语法 以下为在MySQL数据库中查询数据通用的 SELECT 语法: SELECT column_name,column_name FROM table_name [WHER…

OpenCV高级图形用户界面(5)获取指定滑动条(trackbar)的当前位置函数getTrackbarPos()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 返回滑动条的位置。 该函数返回指定滑动条的当前位置。 cv::getTrackbarPos() 函数用于获取指定滑动条(trackbar)的当前…

7-3 简单计算器

本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就…

GPT系列

GPT(Generative Pre-Training): 训练过程分两步:无监督预训练有监督微调 模型结构是decoder-only的12层transformer 1、预训练过程,窗口为k,根据前k-1个token预测第k个token,训练样本包括700…

c++ 计算同一行上的最大点数(Count maximum points on same line)

示例图 给定二维平面上的 N 点作为一对 (x, y) 坐标,我们需要找到位于同一条线上的最大点数。 例子: 输入:points[] {-1, 1}, {0, 0}, {1, 1}, {2, 2}, {3, 3}, {3, 4} 输出:4 那么位于同一条线上的点…

专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结

目录 搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度优先遍历 vs 宽度优先搜索 vs 暴搜 1.深度优先遍历 vs 深度优先搜索(dfs) 2.宽度优先遍历 vs 宽度优先搜索(bfs) 2.关系图暴力枚举一遍所有的情况 3.拓展搜索问题全排列 决策树 1. 计算布尔⼆叉树的值(medi…

JAVA智能国际商城跨境电商系统小程序源码

智能国际商城跨境电商系统——全球购物,一触即达 🌍 开篇:智能科技,重塑跨境购物新体验 在这个全球化的时代,跨境购物已经不再是遥不可及的事情。而“智能国际商城跨境电商系统”正是这样一款将智能科技与跨境电商完…

Badge插件的用法

文章目录 1 概念介绍2 实现方法3 示例代码我们在上一章回中介绍了WebView组件相关的内容,本章回中将介绍如何在图标旁边添加小红点.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在实际项目中有时候需要在图标旁边显示小红点,而且小红点内还有数字,比如购物车图标显示…

柯桥外语培训韩语学习考级韩语中TOPIK常用语法表达

-기 위해서는 -는 것이 좋다 为了......,......比较好 -는 것보다는 -는 것이 좋다 比起......,......比较好 -(으)려면 -아/어/야 한다 如果想......的话,得...... -왜냐하면 -기 때문이다 因为...... -그 이유는 -기 때문이다 理由是…

【JAVA面试题】Java和C++主要区别有哪些?各有哪些优缺点?

文章目录 强烈推荐前言区别:1. 语法和编程风格2.内存管理3.平台独立性4.性能5.指针和引用6.多线程7.使用场景 Java 的优缺点优点:缺点: C 的优缺点优点:缺点: 总结专栏集锦 强烈推荐 前些天发现了一个巨牛的人工智能学…

【第三版 系统集成项目管理工程师】第15章 组织保障

持续更新。。。。。。。。。。。。。。。 【第三版】第十五章 组织保障 15.1信息和文档管理15.1.1 信息和文档1.信息系统信息-P5462.信息系统文档-P546 15.1.2 信息(文档)管理规则和方法1.信息(文档)编制规范-P5472.信息(文档)定级保护-P5483.信息(文档)配置管理-P549练习 15.…

DP35 【模板】二维前缀和

文章目录 1.题目描述输入描述:输出描述: 示例1 2.思路3.代码 1.题目 DP35 【模板】二维前缀和 描述 给你一个 n 行 m 列的矩阵 A ,下标从1开始。 接下来有 q 次查询,每次查询输入 4 个参数 x1 , y1 , x2 , y2 请输出以 (x1, …

大文件-分片下载

0.需求背景 文件过大,单次文件流数据过多需要有下载进度需要提高下载速度 1.大文件下载的解决思路 获取文件大小,根据实际网络情况设置分片大小,确定份数根据分片的大小索引,获取分片的流数据所有的分片下载后,合并…

计算机毕业设计 基于Flask+vue的博客系统的设计与实现 Python毕业设计 Python毕业设计选题 Flask框架 Vue【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Python绘制--绘制心形曲线

今天,我们将通过Python代码来绘制一个心形曲线,这是一个经典的数学表达。 一、心形曲线的数学原理 心形曲线,也被称为心脏曲线,是一个代数曲线,可以通过参数方程定义。其数学表达式如下: x16sin⁡3(t)x16…