软件工程(下)

news2024/9/24 9:24:35

目录

需求工程

概述

需求获取

分层

获取方法

项目管理维度

需求开发---需求分析

UML(统一建模语言):平台无关、语言无关

UML 4+1视图

需求的定义、验证、跟踪、变更

需求定义

需求验证

需求跟踪

需求变更管理

软件系统建模

软件界面设计(黄金三法则)

结构化设计

内聚

耦合

模块四要素

面向对象设计

基本过程

类的分类

设计原则

软件测试

测试类型

白盒黑盒

白盒测试【结构测试】:主要用于单元测试阶段

黑盒测试【功能测试】:主要用来集成测试、确认测试盒系统测试阶段

软件测试阶段

软件系统测试


需求工程

概述

软件需求就是指用户对系统在功能、行为、性能、设计约束等方面的期望。

需求工程的主要活动的阶段可以划分为:

  • 需求获取:从用户的业务场景来获取到需求是什么
  • 需求分析:获取到的需求进行整合、判断、分析、建模
  • 形成需求规格【形成SRS】:这个就是形成文档形式的需求
  • 需求确认与验证【形成需求基线】(经过评审的SRS):也就是我们常用的需求评审
  • 需求管理【变更控制、版本控制、需求跟踪、需求状态跟踪】

需求工程主要分为这五个,前四个我们可以看做是需求开发,最后一个可以单独看成事对需求的一个管理,也就是对需求基线进行管理

需求获取

这个就是从用户或者其他端口来获取到最原始的需求。

分层

需求获取的时候,不同层级的需求、获取的方式也不一样,目标也不太一样

大致分为三层:

  • 业务需求(整体全局的)
  • 用户需求(用户视角)
  • 系统需求(计算机化)这一层级还可以继续细分:1:功能需求  2:性能需求  3:设计约束
获取方法
  • 用户面谈

        1-1、有代表性的用户、了解主观想法、交互很好、但是成本很高、要有领域只是支撑

  • 需求专题研讨会

        高度组织的群体会议、各方参与、了解想法、清楚分歧、交互好、成本高

  • 问卷调查

        用户多、无法一一访谈、这个成本低

  • 现场观察

        针对较为复杂的流程和操作

  • 原型化方法

        通过简易系统方式解决早期需求不确定的问题

  • 头脑风暴法

        一群人围绕新的业务、发散思维、不断的产生新的观点

项目管理维度
  • 基本需求(明确的、常规需求)
  • 期望需求(不明确的、隐含的)
  • 兴奋需求(多余的)

需求开发---需求分析

        如图所示就是结构化开发,在初期会建立三种模型,这里最注重功能模型和数据模型,功能模型最常见的工具就是数据流图。数据流程用于对功能建模。

        在数据流里,我们能看到哪些人使用角色,哪些角色传递数据给系统,哪些角色从系统中获取到某些关键的数据。

UML(统一建模语言):平台无关、语言无关

统一建模语言,其实是之前面向对象的多种建模工具整合形成的,他可以用在多个场景和环境工具集。就好比我们有一个工具箱,我需要用什么工具就拿什么,未必要在所有的项目中,把所有的工具都用上

UML大概有三块

构造块分为三部分

  • 事物

        结构事物:这是最静态的部分,包括:类、接口、协作、用例、活动类、构件和节点

        行为事物:代表时间和空间上的动作。包括:消息、动作次序、连接

        分组事物:看成是个盒子,如:包、构件

        注释事物:UML模型的解释部分,描述、说明和标注模型的元素。

  • 关系(泛化、扩展、依赖等等)
  • 图(用例图、类图、对象图等)

规则:这个描述的uml体系运行的基本原则

        范围:给一个名字以特定含义的语境

        可见性:怎样使用或看见名字

        完整性:事物如何正确、一致的相互联系

        执行:运行或模拟动态模型的含义是什么

公共机制:所有的元素要达成的共识。

        规则说明:事物语义的细节描述、他是模型真正的核心

        修饰:通过修饰来表达更多的信息

        公共分类:类与对象、接口和实现

        扩展机制:允许添加新的规则

UML 4+1视图

需求的定义、验证、跟踪、变更

需求定义

严格定义法:

  • 所有需求都能被预先定义
  • 开发人员和用户之间能准确的清晰的交流
  • 采用图形、文字可以充分体现最终系统

原型法:

  • 并不是所有的需求都能在开发前被准确的定义和说明
  • 项目参加者之间通常都存在交流上的苦难
  • 需要实际的、可供用户参与的系统模型
  • 有合适的系统开发环境
  • 反复是完全需要和值的提倡的,需求一旦确定,就应遵从严格的方法

需求验证

        是我们已经完成了需求规格说明书,已经吧需求落地成了文档,这个文档是有开发方主导完成的,当我们的甲方认不认呢?结果人家一看你的不行,这个时候我们应该提前验证、看看是不是需求和客户当时提的是不是一样的。

需求跟踪

       

需求变更管理

        需求的变更是每一个开发都绕不开的,我们没办法避免。唯一不变的就是变化。无法杜绝的时候,我们就只能在变更的时候做好管理。

软件系统建模

        从现有的系统到新的系统往往要经历多步的流程,现有的系统对应的其实就是我们的物理系统,我们把现有的系统模型化、就会得到物理模型,我们再将物理模型抽象化得到逻辑模型逻辑模型我们进行调整和优化以后实例化他们得到物理模型。我们再将物理模型具体化那就是物理系统了,也就是我们的新系统。

软件界面设计(黄金三法则)

置于用户控制之下

        不强迫用户进入不必要的或者不希望的动作方式来定义交互方式

        提供灵活的交互方式

        允许用户交互可以被中断和撤销

减少用户的记忆负担

        减少对短期记忆的要求

        建立有意义的缺省

        定义直觉性的捷径

        界面的视觉布局应该基于真实世界的隐喻

        不断进展的方式揭示信息

保持界面的一致性

        允许用户将当前任务放入有意义的语境

        在应用系列内保持一致性

        过去的交互模型已经建立了用户的期望,如果不是迫不得已,不要去改变它

结构化设计

        结构化开发方法中的设计阶段就是结构化设计,在这个阶段,首先要明确两个点,一个叫概要设计、一个叫详细设计

        概要设计(外部设计):功能需求分配给软件模块、确定每个模块的功能和调用的关系,形成模块结构图

        详细设计(内部设计):为每个具体任务选择适当的技术手段和处理的方法

结构化设计原则:

模块独立性原则

保持模块的大小适中

多扇入,少扇出

深度和宽度均不要过高

内聚

耦合

模块四要素

  • 输入和输出:模块的输入来源和输出去向都是同一个调用者,即同一个模块
  • 处理功能:指模块把输入转换成输出所做的工作
  • 内部数据:该模块本身引用的数据
  • 程序代码:用来实现模块功能的程序

面向对象设计

基本过程

        在面向对象的开发过程中,先有分析,再由设计师设计方案、界面、技术支撑、再实现设计模型

分析阶段:一般会构造两大模型:用例模型(用例图)和分析模型(类图、顺序图、等等)

设计师:设计用户界面、细化设计模型

设计模型:架构图、示例图、类图、状态图、活动图等等

类的分类

边界类

        机器接口(API)、人机交互(用户界面)这个类主要对外界打交道、比如说显示屏、打印机接口、对话框、菜单、报表

控制类

        应用逻辑、业务逻辑、数据访问逻辑;比如说身份验证器

实体类

        对接数据库,对标数据源,一个学生表对应一个学生类

设计原则

        七大设计设计原则可以看我的分类专栏,该专栏详细的记载了七大原则(编程思想_可有道?的博客-CSDN博客)

软件测试

测试类型

        动态测试(计算机运行):白盒、黑盒、灰盒

        静态测试(人工检测盒计算机辅助分析):桌前检查、代码审查、代码走查

白盒黑盒

白盒测试【结构测试】:主要用于单元测试阶段
  • 控制流测试【逻辑覆盖测试(语句覆盖最弱、路径测试覆盖最强)】
  • 数据流测试
  • 程序变异测试【错误驱动测试】
黑盒测试【功能测试】:主要用来集成测试、确认测试盒系统测试阶段
  • 等价类划分:不同的等价类揭示的问题也不一样
  • 边界值分析:1<=x<=10,可以取x的值为0,1,10和11作为测试数据
  • 错误推测:依靠测试人员的直觉和经验

软件测试阶段

软件系统测试

  • 功能测试
  • 性能测试

        负载测试:各种工作负载下的系统性能

        压力测试:测上限,系统的瓶颈或者不能接受的性能点

        强度测试:测下限,系统资源很低、很匮乏的情况下运行

        容量测试:并发测试:同时在线的最大用户数

        可靠性测试:MTTF之类的参数

  • 健壮性测试
  • 用户界面测试
  • 安全性测试
  • 安装与反安装测试

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

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

相关文章

.NET周刊【7月第1期 2024-07-07】

国内文章 学习.NET 8 MiniApis入门 https://www.cnblogs.com/hejiale010426/p/18280441 MiniApis是ASP.NET Core中的轻量级框架&#xff0c;用最少的代码和配置创建HTTP API。其特点包括简洁明了、性能卓越、灵活多变、易于学习使用&#xff0c;并与ASP.NET Core生态系统完美…

深入了解java锁升级可以应对各种疑难问题

对于java锁升级&#xff0c;很多人都停留在比较浅层的表面理解&#xff0c;一定程度下也许够用&#xff0c;但如果学习其中的细节&#xff0c;我们更好地理解多线程并发时各种疑难问题的应对方式&#xff01; 因此我将锁升级过程中可能涉及的大部分细节或者疑问都整合成了一篇…

01MFC建立单个文件类型——画线

文章目录 选择模式初始化文件作用解析各初始化文件解析类导向创建鼠标按键按下抬起操作函数添加一个变量记录起始位置注意事项代码实现效果图虚实/颜色线选择模式 初始化文件作用解析 运行: 各初始化文件解析 MFC(Microsoft Foundation Classes)是一个C++类库,用于在Win…

fm足球经理Football Manager 2022 for mac 下载安装包

《Football Manager 2022》&#xff08;足球经理2022&#xff09;是一款由Sports Interactive开发并由SEGA发行的足球管理模拟游戏。这款游戏让玩家扮演足球俱乐部的 manager&#xff08;经理&#xff09;&#xff0c;负责球队的所有管理工作&#xff0c;包括战术制定、球员转会…

美业收银系统怎么选?哪些功能实用?美业门店管理系统|拓客系统

选择美业会员系统时&#xff0c;你可以考虑以下几个方面的功能来确定哪些对你最实用&#xff1a; 1.会员管理&#xff1a; 系统应该能够轻松管理会员资料、积分、消费记录等信息&#xff0c;以便更好地了解客户需求并提供个性化服务。 2.促销与营销工具&#xff1a; 包括发…

RS NGP804 直流电源

直流电源 R&S NGP804 -借助四核功率提升效率- R&SNGP800 直流电源系列共有五种不同型号&#xff0c;功率为 400 W 或 800 W&#xff0c;可在多种操作条件下提供最大功率。该电源系列具有两个或四个 200 W 输出通道&#xff0c;每通道的输出电压和电流可达 64 V 及 …

C++入门基础篇(下)

目录 6.引用 6.1 引用的特性 6.2 const引用 7.指针和引用的关系 8.内联函数 9.nullptr 6.引用 引⽤不是新定义⼀个变量&#xff0c;⽽是给已存在变量取了⼀个别名&#xff0c;编译器不会为引⽤变量开辟内存空间&#xff0c; 它和它引⽤的变量共⽤同⼀块内存空间。比如&a…

Java毕业设计 基于SSM vue图书管理系统小程序 微信小程序

Java毕业设计 基于SSM vue图书管理系统小程序 微信小程序 SSM 图书管理系统小程序 功能介绍 用户 登录 注册 首页 图片轮播 图书信息推荐 图书详情 赞 踩 评论 收藏 系统公告 公告详情 用户信息修改 我的待还 图书归还 催还提醒 我的收藏管理 意见反馈 管理员 登录 个人中心…

JAVA--SpringCloud

SpringCloud基础 为什么需要spring cloud 单体结构--Monolith 首先请回想一下我们所开发的服务是什么样子的。通常情况下&#xff0c;这个服务所对应的代码由多个项目&#xff08;模块&#xff09;所组成&#xff0c;各个项目会根据自身所提供功能的不同具有一个明确的边界。…

Mosh|初学者SQL教程第二弹

using子句(如果匹配的两个字段在两个表中的名字相同可以使用&#xff09; 多条件使用using 自然连接&#xff08; NATURAL JOIN&#xff09;&#xff0c;它意味着让搜索引擎基于共同列自行去尝试join&#xff0c;可能会出现意想不到的结果&#xff0c;不要轻易尝试 交叉连接&am…

DNS 杂谈

一、定义 DNS&#xff08;Domain Name System&#xff09;&#xff0c;域名系统&#xff0c;该系统记录域名和Ip地址的相互映射关系。用户访问互联网时&#xff0c;通过域名地址得到对应的IP地址&#xff0c;这个过程称为域名解析。DNS运行于UDP协议之上&#xff0c;使用的端口…

HomeAssistant HAOS安装HACS集成

1. HAOS安装HACS集成 1.1 手动安装HACS 下载HACS压缩包 加载项安装samba&#xff0c;可能需要特殊网络环境不然非常慢 配置->加载项->加载项商店-> 搜索samba&#xff0c;并安装&#xff0c;配置用户名密码 Samba配置完成之后,如果启动不起来就需要重启HomeAssis…

图文讲解IDEA如何导入JDBC驱动包

前言 学习JDBC编程,势必要学会如何导入驱动包,这里笔者用图文的方式来介绍 视频版本在这里 50秒教你怎么导入驱动包然后进行JDBC编程的学习_哔哩哔哩_bilibili 忘记录音频了,大伙凑合着看 下载驱动包 https://mvnrepository.com/artifact/mysql/mysql-connector-java 去中…

SpringCloud代码实战

项目结构 实例实现功能:实现通过id查询用户的订单信息 OrderCommon&#xff1a;公共的一些模块类型&#xff0c;此处为一个user对象 Eureka-Service:配置Eureka的启动类&#xff0c;服务端 Order-Service:提供查询功能的服务端 Order-Client:查询的客户端 OrderCommon代码…

C++类与对象-基础篇

目录 一、什么是类 1.1 语法定义 1.2 访问限定符 1.3 类域 二、类的实例化 2.1 什么是实例化 2.2 类的大小 三、this指针 3.1 引入 3.2 this指针的使用 一、什么是类 1.1 语法定义 class 类名 {}; 说明 类似于C语言中的结构体&#xff0c;括号后分号不能丢类内成员可…

类型“RouteRecordName”上不存在属性“includes”。 类型“symbol”上不存在属性“includes”

确定 route.name 运行时是 字符串&#xff0c;强制转换 为字符串。 removeRoute(id: string) { this.dynamRoute this.dynamRoute.filter(route > !(route.name as string).includes(id)) localStorage.setItem(dynamRoute, JSON.stringify(this.dynamRoute)) delete this.t…

[leetcode] shortest-subarray-with-sum-at-least-k 和至少为 K 的最短子数组

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int shortestSubarray(vector<int>& nums, int k) {int n nums.size();vector<long> preSumArr(n 1);for (int i 0; i < n; i) {preSumArr[i 1] preSumArr[i] nums[i];}int res n…

【服务器】在Linux查看运行的Python程序,并找到特定的Python程序

在Linux查看运行的Python程序并找到特定的Python程序 写在最前面1. 使用ps命令查看所有Python进程查看详细信息 2. 使用pgrep命令查找Python进程ID 3. 使用top或htop命令使用top命令使用htop命令 4. 使用lsof命令查找Python进程打开的文件 5. 使用nvidia-smi命令查看GPU使用情况…

九、函数递归

——————————————————————————————————————————— 目录 1、递归是什么&#xff1f; 1.1、递归的思想 1.2、递归的限制条件 2、递归举例 2.1、举例1&#xff1a;求n的阶乘 2.1.1、分析和代码实现 2.2.1分析和代码实现 3、递归与…

百度智能云将大模型引入网络故障定位的智能运维实践

物理网络中&#xff0c;某个设备发生故障&#xff0c;可能会引起一系列指标异常的告警。如何在短时间内从这些告警信息中找到真正的故障原因&#xff0c;犹如大海捞针&#xff0c;对于运维团队是一件很有挑战的事情。 在长期的物理网络运维工作建设中&#xff0c;百度智能云通…