信息系统基本知识(三)软件工程
1.4 软件工程
定义:将系统的、规范的、可度量的工程化方法应用于软件开发、运行和维护的全过程即上述方法的研究
软件工程由方法、工具和过程三个部分组成
1.4.1 需求分析
软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。
需求层次
- 业务需求:是反映企业或客户对系统
高层次的目标要求,通常来自项目投资人、购买产品的客户、客户单位的管理人员、市场营销部门或产品策划部门 - 用户需求:描述的是用户的具体目标,或用户要求系统必须完成的任务
- 系统需求:从系统的角度来说明软件的需求,包括功能需求、非功能需求和设计约束
质量功能部署
质量功能部署: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.4.3 软件设计
软件设计是需求分析的延伸和拓展
需求分析阶段:解决“做什么”的问题
软件设计阶段:解决“怎么做”的问题
- 结构化设计SD:
- 自顶向下、逐步求精
- 模块化、相对独立
- 高内聚、低耦合
- 面向对象的设计OOD
- 抽象、封装和可扩展
- 遵循OOD设计原则
- 设计模式
- 包含模式名称、问题、目的、解决方案、效果、实例代码等
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、数据库系统和数据仓库。

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

-
数据集成
- 通过不同的中间件工具完成数据集成
- 数据集成比表示集成更加灵活,但是当业务逻辑发生变化时,数据集成就会面临困难

-
控制集成
也称功能集成和应用集成- 在业务逻辑层上对应用系统进行集成
- 借助于远程过程或方法调用、面向消息的中间件、分布式对象技术和事物处理监控器来实现
- 与数据集成和表示集成相比,灵活性更高
- 当被集成业务系统没有提供API时,集成难度会增加

-
业务集成
也称过程集成
业务流程集成超越了数据和系统,有一些列基于标准、统一数据格式的工作流完成 -
企业之间集成
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渲染时间)…...
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: 简易的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…...
初尝并行编程
进程被分为后台进程和应用进程 大部分后台进程在系统开始运行时被操作系统启动,完成操作系统的基础服务功能。大部分应用进程由用户启动,完成用户所需的具体应用功能 进程由程序段、数据段、进程控制块三部分组成 程序段也被称为是代码段,…...
keepalived学习记录:对其vip漂移过程采用gdb跟踪
对其vip漂移过程采用gdb跟踪keepalived工具主要功能产生vip漂移过程两种情况gdb调试常用命令gdb调试时打到的函数栈(供学习参考)函数栈的图是本人理解下画的,不对请多指正 keepalived主要有三个进程,父进程是core进程,…...
51单片机串口通讯原理及程序源码-----day8
51单片机串口通讯原理及程序源码-----day8 1.定义单片机为TTL电平:高 5V 低 0V RS232电平: 计算机的串口高 -12V 低12V 所以计算机与单片机之间通讯时需要加电平转换芯片CH340T 、 MAX232。 2.通信分类: (1)并行通信通…...
mongodb入门到使用(下)
mongodb中常用命令操作一、用户操作二、创建用户三、数据库操作基本操作四、扩展操作五、集合操作一、用户操作 在mongo中使用mongodb都需要在admin数据库中操作。然后在使用下面的命令 use admin二、创建用户 db.createUser({"user":"imooc", #用户名&q…...
云HIS系统源码 医院his源码 云his源码
大型医院his系统源码 SaaS运维平台多医院入驻强大的电子病历完整文档 ,有演示 一、系统概述: 基层卫生健康云是一款满足基层医疗机构各类业务需要的健康云产品。该产品能帮助基层医疗机构完成日常各类业务,提供病患挂号支持、病患问诊、电子…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
