当前位置: 首页 > news >正文

信息系统基本知识(三)软件工程

1.4 软件工程

定义:将系统的、规范的、可度量的工程化方法应用于软件开发、运行和维护的全过程即上述方法的研究

软件工程由方法、工具和过程三个部分组成

1.4.1 需求分析

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

需求层次

  1. 业务需求:是反映企业或客户对系统高层次的目标要求,通常来自项目投资人、购买产品的客户、客户单位的管理人员、市场营销部门或产品策划部门
  2. 用户需求:描述的是用户的具体目标,或用户要求系统必须完成的任务
  3. 系统需求:从系统的角度来说明软件的需求,包括功能需求、非功能需求和设计约束

质量功能部署

质量功能部署:QFD-Quality Function Deployment,是一种将用户需求转化成软件需求的技术,其目的是最大限度的提升软件工程过程中用户的满意度

  • 常规需求:用户认为系统应该做到的功能或性能
  • 期望需求:用户想当然认为系统应具备的功能或性能,但不能正确描述自己想要得到这些功能或性能需求,如果期望需求没有得到实现,用户会感到不满意
  • 意外需求:也称为兴奋需求,使用户要求范围外的功能或性能

需求获取

需求获取是一个确定或理解不同的项目干系人的需求和约束的过程。

常见的需求获取方法:用户访谈、问卷调查、采样、情节串联版、联合需求计划
信息系统项目需求获取的方法:问卷调查、会议讨论、界面原型、可运行原型系统

需求分析

需求分析人员需要把杂乱无章的用户要求和期望转化为用户需求、这就是需求分析工作。

一个好的需求应该具有:无二义性、完整性、一致性、可测试性、确定性、可跟踪性、正确性、必要性。

需求分析的方法:

  • 结构化分析方法:
    • 数据模型:实体联系图、ER图
    • 功能模型:数据流图、DFD–Data Flow Diagram
    • 行为模型:状态转化图、STD–State Transform Diagram
  • 面向对象分析方法:OOA
    • 使用用例模型方法来描述系统需求
    • 使用分析模型描述系统的基本逻辑结构,展示对象和类如何组成系统(静态模型),以及他们如何保持通信,实现系统行为(动态模型)

需求软件规格说明书

需求软件规格说明书:Software Requirement Specification SRS,是需求开发活动的产物,编制目的是是项目干系人与开发团队对系统的初始规定有一个共同的理解,使其成为整个开发工作的基础。

  • 范围
  • 引用文件
  • 需求(SRS主体部分)
  • 合格性规定
  • 需求可追踪性
  • 尚未解决的问题
  • 注解
  • 附录

需求验证

需求验证也成需求确认,主要确认下面几个内容:

  • SRS正确的描述了预期的、满足干系人需求的系统行为和特征
  • SRS中的软件需求是从系统需求、业务规格和其他来源中正确推导而来的
  • 需求是完整的和高质量的
  • 需求的表示在所有的地方都是一致的
  • 需求为继续进行系统设计、实现和测试提供了足够基础
  • 通过需求评审和需求测试工作来对需求进行验证

对象 = 属性+方法

UML

UML:Unified Modeling Language,统一建模语言,支持从需求分析开始的软件开发的全过程。是一个支持模型化和软件系统开发的图形化语言、为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

组成UML的3个要素

  • 基本构造块(事物、关系和图)
  • 规则(支配这些构造块如何放置在一起)
  • 机制(运用于整个语言的机制)

事物:也成建模元素

  • 结构事物:是静态部分,类、接口、协作、用例、活动类、构件和节点
  • 行为事物:是动态部分,代表时间和空间上的动作,一种是交互,另一种是状态机
  • 分组事物:是组织部分,UML只有一种分组事物,称为包
  • 注释事物:UML解释部分

关系:UML用关系把事物结合在一起

  • 依赖:两个事物之间的语义关系,其中一个事物发生变化会影响另一个事物的语义
  • 关联:描述一组对象之间连接的结构关系
  • 泛化:一般化和特殊化的关系,描述特殊元素的对象可替换一般元素的额对象
  • 实现:类之间的语义关系,其中的一个类指定了有另一个类保证执行的契约

  • 类图:实体类的静态关系,是软件的蓝图,详细描述了系统内各个对象的相关的类,以及这些类之间的静态关系
    在这里插入图片描述

  • 对象图:表示某一时刻类的对象静态结构和行为
    在这里插入图片描述

  • 构件图:描述类的实现环境
    在这里插入图片描述

  • 用例图:用户观察到系统功能的模型图,列出了系统中的用例和参与者。显示哪个参与者参与了哪个用例的执行。用于业务建模、需求获取、定义。静态
    在这里插入图片描述

  • 顺序图:用于显示对象间的交互活动,关注对象之间消息传送的时间顺序。
    在这里插入图片描述

  • 状态图:利用状态和事件描述对象本身的行为。动态
    在这里插入图片描述

  • 活动图:通过动态来组织,主要用于描述某一方法、机制或用例的内部行为
    在这里插入图片描述

  • 部署图:描述系统所需的硬件构件的物理部署。
    在这里插入图片描述
    UML 视图:就是对上面图的分类

  • 用例视图:最基本的需求分析模型,如用例视图

  • 逻辑视图:也称为设计视图,如类图、对象图以及包图

  • 进程视图:可执行线程和进程作为活动类的建模,他是逻辑视图的一次执行实例,描述了并发与同步结构,如状态图、活动图、时序图等

  • 实现视图:对组成基于系统的物理代码的文件和构件进行建模,如构件图

  • 部署视图:把构件部署到一组物理节点上,表示软件到硬件的映射和分布结构,如部署图

面向对象分析

1.4.2 软件架构设计

软件架构设计核心问题:是能否达到架构级的软件复用,能否在不同的系统中,使用同一个软件架构。

解决好软件的复用、质量和维护问题,是研究软件架构的根本目的。

软件复用有利于节省工期、减少成本、保持质量

软件架构的风格

  1. 数据流风格:包括批处理序列和管道/过滤器风格
    在这里插入图片描述

  2. 调用/返回风格:包括主程序/子程序、数据抽象和面向对象,以及层次结构
    在这里插入图片描述

  3. 独立架构风格:包括进程通信和事件驱动系统
    基于事件驱动的系统,有点类似设计模型的观察者模式,由构件公布或者广播一些事件,其他构件对此事件进行注册。当这个事件被触发时,立即通知这个事件上注册的过程

  4. 虚拟机风格:包括解释器和基于规则的系统
    具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键的应用,解释器通常被用来建立一种虚拟机一弥补语义上的差异

  5. 仓库风格:包括数据库系统、黑板系统和超文本系统
    在这里插入图片描述

软件架构评估

敏感点:一个或者多个构件的额特性

权衡点:是影响多个质量属性的特性,是多个质量属性敏感点

  • 基于调查问卷方式
  • 基于场景方式
  • 基于度量方式

1.4.3 软件设计

软件设计是需求分析的延伸和拓展

需求分析阶段:解决“做什么”的问题
软件设计阶段:解决“怎么做”的问题

  1. 结构化设计SD:
    • 自顶向下、逐步求精
    • 模块化、相对独立
    • 高内聚、低耦合
  2. 面向对象的设计OOD
    • 抽象、封装和可扩展
    • 遵循OOD设计原则
  3. 设计模式
    • 包含模式名称、问题、目的、解决方案、效果、实例代码等

1.4.4 软件工程的过程管理

CMMI:Capability Maturity Model Integration是指能力成熟度模型集成

CMMI是一种为组织有效性提供基本要素的过程改进方法,它的目的是帮助软件企业对软件工程进行管理和改进,增强开发与改进能力从而能按时、不超预算的开发出高质量的软件。

CMMI过程域可分为4类:项目管理、过程管理、工程和支持四个级别

CMMI有阶段式和连续式两种表现方式:

  • 使用阶段式表示法使你能达到“成熟度级别”,阶段式表示法用于模型整体
  • 使用连续式表示法使你能达成“能力级别”。连续式表示用于单个过程域

过程域的阶段式分组
在这里插入图片描述

连续式分组
在这里插入图片描述

1.4.5 软件测试及管理

测试是在软件交付给客户之前所必须完成的重要步骤。

1.4.5.1 测试方法

  • 静态测试:采用人工检测和计算机辅助静态分析的手段对程序进行检测。
  • 动态测试:在计算机上实际运行程序进行软件测试。白盒测试与黑盒测试

1.4.5.2 测试类型

  • 单元测试:模块测试
  • 集成测试:模块之间接口联调
  • 确认测试:验证软件功能、性能和其它特性是否与用户需求一致
  • 系统测试:对象是完整的、集成的计算机系统。黑盒测试,真实环境下验证
  • 配置测试:软件配置
  • 回归测试:软件变更之后

1.4.5.3 面向对象测试

  • 封装性:考虑信息隐蔽对测试的影响
  • 继承性:考虑继承对充分性的影响
  • 多态性:考虑动态绑定对测试充分性影响

1.4.5.4 软件调试

在这里插入图片描述
测试与调试的区别

  • 测试的目的是找出错误,调试的目的是定位错误并修正错误
  • 调试是测试之后的活动,测试和调试在目标、方法和思路上都有所不同
  • 测试从一个已知的条件开始,使用预先定义的过程,由预知的结果;调试从一个未知的条件开始,结束的过程不可预计
  • 测试过程事先设计,进度可以事先确定;调试不能描述过程或持续时间

1.4.5.5 软件测试管理

  • 过程管理
  • 配置管理
  • 评审工作
    • 测试就绪评审
    • 测试评审

1.4.5.6 软件集成技术

企业应用集成:Enterprise Application Integration EAI,企业应用集成可以消除信息孤岛,将多个企业信息系统连接起来,实现无缝集成,使之像一个整体一样。EAI所连接的应用包括各种电子商务系统、ERP、CRM、SCM、OA、数据库系统和数据仓库。
在这里插入图片描述

  1. 表示集成
    也称页面集成,是把原有零散的系统页面集中在一个新的页面中;为用户提供看上去统一,但是有多个系统组成的应用系统;当只有可能在显示界面上实现集成时。
    在这里插入图片描述

  2. 数据集成

    • 通过不同的中间件工具完成数据集成
    • 数据集成比表示集成更加灵活,但是当业务逻辑发生变化时,数据集成就会面临困难
      在这里插入图片描述
  3. 控制集成
    也称功能集成和应用集成

    • 在业务逻辑层上对应用系统进行集成
    • 借助于远程过程或方法调用、面向消息的中间件、分布式对象技术和事物处理监控器来实现
    • 与数据集成和表示集成相比,灵活性更高
    • 当被集成业务系统没有提供API时,集成难度会增加
      在这里插入图片描述
  4. 业务集成
    也称过程集成
    业务流程集成超越了数据和系统,有一些列基于标准、统一数据格式的工作流完成

  5. 企业之间集成
    EAI技术使用用大多数电子商务企业,完成企业之间的应用集成。目的是实现信息共享,是企业充分利用外部资源。

相关文章:

信息系统基本知识(三)软件工程

1.4 软件工程 定义:将系统的、规范的、可度量的工程化方法应用于软件开发、运行和维护的全过程即上述方法的研究 软件工程由方法、工具和过程三个部分组成 1.4.1 需求分析 软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。 需求层次 业务…...

Linux下软件部署安装管理----rpmbuild打包rpm包部署安装

来源:微信公众号「编程学习基地」 文章目录1.安装rpmbuild2.rpm包制作打包rpm包3.rpm包安装4.rpm包卸载1.安装rpmbuild yum install rpmbuild yum install rpmdevtools创建rpm包管理路径,生成rpm相关目录 RPM打包的时候需要编译源码,还需要…...

ThreadLocal学会了这些,你也能和面试官扯皮了!

前言 我们都知道,在多线程环境下访问同一个共享变量,可能会出现线程安全的问题,为了保证线程安全,我们往往会在访问这个共享 变量的时候加锁,以达到同步的效果,如下图所示。 对共享变量加锁虽然能够保证线程的安全,但是却增加了开发人员对锁的使用技能,如果锁使用不当…...

【存储】存储特性

存储特性精简配置技术(SmartThin)SmartThin主要功能容量虚拟化存储空间写时分配:Capacity-on-Write读写重定向:Direct-on-Time应用场景及配置流程存储分层技术(SmartTier)存储分层工作原理关键技术容量初始…...

Qt使用OpenGL进行多线程离屏渲染

基于Qt Widgets的Qt程序,控件的刷新默认状况下都是在UI线程中依次进行的,换言之,各个控件的QWidget::paintEvent方法会在UI线程中串行地被调用。若是某个控件的paintEvent很是耗时(等待数据时间CPU处理时间GPU渲染时间&#xff09…...

Vue基础入门讲义(三)-指令

文章目录1.什么是指令?2.插值表达式2.1.花括号2.2.插值闪烁2.3.v-text和v-html3.v-model4.v-on4.1.基本用法4.2.事件修饰5.v-for5.1.遍历数组5.2.数组角标5.3.遍历对象6.key7.v-if和v-show7.1.基本使用7.2.与v-for结合7.3.v-else7.4.v-show8.v-bind8.1. 属性上使用v…...

pod资源限制,探针(健康检查)

pod资源限制,探针(健康检查)一、资源限制当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源当为 Pod 中的容器指定了 request 资源时,调度器就使用…...

Python | 蓝桥杯进阶第一卷——字符串

欢迎交流学习~~ 专栏: 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列: 🏆 Python | 蓝桥杯进阶第一卷——字符串 🔎 Python | 蓝桥杯进阶第二卷——递归(待续) 💝 Python | 蓝桥杯进阶第三卷——动态…...

2023-03-03 mysql列存储-cpu占用100%-追踪思路

摘要: 最近在处理mysql列存储时, 发现在执行explain时, cpu占用达到了100%. 本文分析定位该问题的思路过程 现象: mysqld进程占用100%使用kill processlist终止会话, 无响应查看show processings; 发现一直在运行mysql> show processlist; +----+-----------------+-----…...

JVM—类加载子系统

JVM细节版架构图 ​ 本文针对Class Loader SubSystem这一块展开讲解类加载子系统的工作流程 类加载子系统作用 1.类加载子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识即16进制CA FE BA BE; 2.加载后的Class类信息…...

在codeIgniter3中session.php中的数组追加值

如果key是字符串时,输出什么值?会直接把atime()的时间戳添加到key是字符串时,输出什么值?会直接把atime()的时间戳添加到key是字符串时,输出什么值?会直接把atime()的时间戳添加到arr[‘vars’]数组里面&am…...

Windows环境下Gpu版本的Pytorch安装

文章目录安装步骤总览(6步)1 首先看电脑有没有显卡,显卡是否支持cuda软件1.1 先看自己电脑是否有显卡1.2 两种方法看自己的电脑的显卡驱动支持的CUDA1.3 显卡,显卡驱动、CUDA、CUDNN 4者说明2 安装CUDA,就是1个软件2.1 检测自己电…...

项目实战典型案例13——学情页面逻辑问题

学情页面逻辑问题一:背景介绍二:学情页面逻辑问题分析逻辑问题缓存滥用的问题三:LocalStorage基础知识数据结构特性应用场景localStorage常用方法四:总结升华一:背景介绍 本篇博客是对项目开发中出现的学情页面逻辑问…...

工作日志day02

1.云计算? 相关职位 开源软件和linux起源: 自由软件之父:理查德.斯托曼linux之父:林纳斯.本纳第克特.托瓦兹linux发行版 RHEL:Red Hat Enterprise Linux 红帽linux商业公司CentOS:Community Enterprise Operating Sys…...

C++Primer16.1.6节练习

练习16.28&#xff1a; 简易的shared_ptr代码如下 #include <iostream> #include <vector> #include <list> using namespace std;//shared_ptr模板 template<typename T>class SharedPtr {friend SharedPtr<T>& MakeShared(T* t); public…...

初尝并行编程

进程被分为后台进程和应用进程 大部分后台进程在系统开始运行时被操作系统启动&#xff0c;完成操作系统的基础服务功能。大部分应用进程由用户启动&#xff0c;完成用户所需的具体应用功能 进程由程序段、数据段、进程控制块三部分组成 程序段也被称为是代码段&#xff0c;…...

keepalived学习记录:对其vip漂移过程采用gdb跟踪

对其vip漂移过程采用gdb跟踪keepalived工具主要功能产生vip漂移过程两种情况gdb调试常用命令gdb调试时打到的函数栈&#xff08;供学习参考&#xff09;函数栈的图是本人理解下画的&#xff0c;不对请多指正 keepalived主要有三个进程&#xff0c;父进程是core进程&#xff0c;…...

51单片机串口通讯原理及程序源码-----day8

51单片机串口通讯原理及程序源码-----day8 1.定义单片机为TTL电平&#xff1a;高 5V 低 0V RS232电平&#xff1a; 计算机的串口高 -12V 低12V 所以计算机与单片机之间通讯时需要加电平转换芯片CH340T 、 MAX232。 2.通信分类&#xff1a; &#xff08;1&#xff09;并行通信通…...

mongodb入门到使用(下)

mongodb中常用命令操作一、用户操作二、创建用户三、数据库操作基本操作四、扩展操作五、集合操作一、用户操作 在mongo中使用mongodb都需要在admin数据库中操作。然后在使用下面的命令 use admin二、创建用户 db.createUser({"user":"imooc", #用户名&q…...

云HIS系统源码 医院his源码 云his源码

大型医院his系统源码 SaaS运维平台多医院入驻强大的电子病历完整文档 &#xff0c;有演示 一、系统概述&#xff1a; 基层卫生健康云是一款满足基层医疗机构各类业务需要的健康云产品。该产品能帮助基层医疗机构完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...