软件工程 考研复试常考知识点总结

news2024/11/30 12:32:16

软件工程

什么是软件工程,这门课讲的什么?

软件工程就是把软件的开发、运行、维护的各个阶段进行系统化规范化的过程,也就是把工程化的方法运用在软件技术之中,以构建和维护高质量的软件。

进一步,什么是工程化思想?

我认为工程化的思想核心就是标准化和文档化,要建立一个标准,明确把一个大项目的开发分成了哪些小阶段,确定每个阶段应该利用什么工具、完成什么任务,然后就是要产生对应的规范文档。

进一步,软件工程包含哪几个阶段?

见如下

软件生命/生存周期(SDLC)

总体上分为:软件定义、软件开发和软件运行与维护阶段

具体可分为:两分析(可行性分析和需求分析)、两设计(概要设计和详细设计)、开发(编码和测试)、运维(运行和维护)

1、可行性研究(问题定义、可行性研究)

内容:从经济、技术、人员各个方面分析项目可行性,并做风险预估

文档:可行性研究报告

图表:业务流程图、系统流程图

2、需求分析

内容:收集用户的需求,并把需求转化成对软件系统(功能、性能、操作上的)完整、准确的描述,用于确定软件规格

文档:需求分析说明书(开发依据+验收依据)

图表:数据流图+数据字典(结构化开发)或者用例图模型(面向对象)

3、软件设计(概要设计和详细设计)

1)概要设计(图最多)

内容:对系统模块的设计和模块之间接口的设计

文档:概要设计说明书

图表:功能结构图(体现模块)、系统流程图(整个系统)类图、活动图、状态图、时序图、ER图

2)详细设计

内容:对软件模块内的算法和数据结构等细节做出设计

文档:详细设计规格说明书

图表:程序流程图(各个模块内)

4、程序编码

内容:开发人员按照“详细设计说明书”把软件进行编码实现

5、软件测试

内容:对软件的各个部分进行测试,包括单元测试、集成测试、系统测试

单元测试:对软件各个模块单独进行测试

集成测试:把各个模块集成在一起测试,主要是测试模块间的接口是否正确

系统测试:集成度最高的测试,把模块集成成完整的系统,在真实的系统运行的环境下测试,包括软件硬件之间的配合

6、运行与维护

内容:运行就是正式上线的过程,然后软件上线后可能会出现各种各样的问题,需要长期维护

CMM软件能力成熟度模型是什么?

一种评价企业开发的软件开发能力的模型,他将软件成熟度分成了五个层次,分别是初始级、可重复级、定义级、管理级、优化级。

初始级:软件过程基本是无序的,进度、预算、质量都不可预测,成功不可复现,任何项目都拥有这一级别

可重复级:有了基本的项目管理过程,项目的成功可以在未来重现,能够将项目经验用于未来【可复现==可重复】

定义级:项目拥有文档化、标准化的软件过程。用于未来的成果经验经过标准化【标准化==可以作为定义了】

管理级:软件过程和产品质量得到定量的估计和控制,能够按时、保质保量的完成。【管理==项目可控】

优化级别:能将软件过程涉及到的技术、方法作为示范,加入企业标准中,达到优化企业标准的效果【好到可以优化别人了】

结构化分析和结构化设计?

在这里插入图片描述

软件开发模型?

瀑布模型——阶段性的过程模型,严格按照各个阶段顺序进行开发,向瀑布一样自上而下,不能跨越阶段开发

特点:开发规范但灵活性差

适用场景:需求稳定、编程人员有丰富经验的项目

原型模型——项目前期,快速搭建出项目的原型,用来获取用户的需求,解决了需求模糊的问题

特点:快速构建、方便修改

适用场景:用户需求不明确;对现有产品进行升级时,即有模板;开发人员对技术不够熟悉

增量模型——将软件系统按功能划分成一个个构件,分批次、按构件提交给用户,直到全部构件提交完成

特点:可以灵活安排开发顺序、功能容易拓展

适用场景:软件系统可以模块化、支持分批次交付

螺旋模型——包含分析分析和风险规避,花大量成本去做风险管理

特点:安全性高、风险管理成本高

适用场景:软件项目风险大的大型项目

喷泉模型——最主要的特点就是迭代、反复,每个阶段建立在前一个阶段之上,而且各个阶段可以相互折叠,多次反复,就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。

适用场景:适用于面向对象软件开发,因为对象的分析和设计是可以迭代的

RUP统一软件开发过程

是一种基于面向对象的软件开发过程,结合了瀑布模型和迭代思想。

四个阶段:

  • 初始阶段(Inception):分析业务风险
  • 细化阶段(Elaboration):对体系结构作出决策,包括其范围、主要功能和诸如性能等非功能需求
  • 构造阶段(Construction):把各个功能模块集成成产品,并对功能做测试
  • 交付阶段(Transition):交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。

六个最佳实践:

(1)迭代式开发。
(2)需求管理。
(3)使用以组件为中心的软件架构。
(4)可视化软件建模。
(5)验证软件质量。
(6)控制软件变更。

其它模型:

边做边改模型——在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户满意为止。

演化/迭代模型——用户先给出核心需求,实现后再向用户询问意见,再修改,再询问,直到演化成最终的软件

敏捷开发模型——为了适应快速变化的需求,需要频繁地更新软件版本的一种开发模型,需要团队有很好的团队协作能力

什么是软件危机?

定义:软件危机泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题(定义)。主要表现为:开发成本难以控制、开发进度难以预测、软件质量无法保证、软件产品难以维护、缺少文档等方面(特点)。

原因:软件规模越来越大、复杂度越来越高(外部原因)、用户需求不明确、缺乏正确的理论指导(内部原因)

解决方法:使用更高效的软件工具,并且开始学习软件项目管理理论,将工程化思想用于软件技术当中,规范的开发流程和标准。

什么是UML,介绍下常用UML图?

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,UML是面向对象设计的建模工具,独立于任何具体程序设计语言。

用例图:用于描述系统参与者及与系统用例之间的交互关系。它展示了参与者可以使用系统执行哪些功能

类图:描述系统中的类之间的关系,是一种静态模型类型。

对象图:与类图相似,它是类图的实例,显示类的多个对象之间的关系。

活动图:描述系统用例中涉及的活动及其顺序,有助于识别并行活动。

状态图:描述系统对象的所有可能状态及其状态间的转移条件。它帮助理解对象的行为和生命周期。

顺序图:显示参与者与系统对象之间的一系列在时间上的顺序交互

耦合级别与内聚级别

耦合是指模块与模块之间的紧密程度,内聚是指一个模块内的紧密程度。

img

最强:内容耦合,最弱:非直接耦合

非直接耦合:两个模块之间没有直接关系,只是都被主模块调用

数据耦合:指两个模块之间有调用关系,传递的是简单数值

标记耦合:是指两个模块之间有调用关系,传递的是数据结构

控制耦合:是指两个模块之间有调用关系,传递的是控制变量,比如标记值,被调模块通过该控制变量的值有选择地执行块内某个功能。

外部耦合:是指一组模块都访问同一全局简单变量,而且不通过参数表传递全局变量的信息,称之为外部耦合。

公共耦合:一组模块都访问同一全局数据结构

内容耦合:指模块之间有直接数据关系,可以直接使用另一个模块的数和代码,

img

最强:功能内聚,最弱:偶然内聚

功能内聚:指模块内所有元素共同完成一个功能,缺一不可。

顺序内聚:是指一个模块中各个元素必须顺序执行

通信内聚:是指一个模块的所有元素都在同一数据结构上操作(通信==有公共数据结构)

过程内聚:是指模块有多个需要按一定的步骤一次完成的功能。

时间内聚:是指一个模块完成的功能必须在同一时间内执行,称之为时间内聚。

逻辑内聚:是指模块内有多个逻辑相似的功能,通过参数确定该模块完成哪一个功能。

偶然内聚:是指模块中的机能只是刚好放在一起

什么是软件测试?

就是在特定的环境下,对软件的实际输出和预计输出做比较的过程,其目的是减少程序的错误,防止后期出现大量返工,减慢工作进度。软件测试从整体上可分为黑盒测试和白盒测试,从测试的阶段/范围上可分为单元测试、集成测试、系统测试、验收测试,从测试的指标上可以分为功能性测试、安全性测试、稳定性测试、性能测试、稳定性测试、压力测试等等。

测试分类有哪些?

按照测试的阶段/范围可分为:

单元测试:对软件各个模块单独进行测试

集成测试:把各个模块集成在一起测试,主要是测试模块间的接口是否正确

系统测试:集成度最高的测试,把模块集成成完整的系统,在真实的系统运行的环境下测试,包括软件硬件之间的配合

验收测试:是一种以用户为主体的测试,让用户参与测试用例设计,根据用户的参与程度,分为α测试和β测试

  • α测试:开发、测试人员和用户都在场,用户在在开发环境下进行的测试,有专业人员进行记录,测试环境可控
  • β测试:测试人员不在场,直接发布测试版本给用户体验,然后根据用户的反馈进行改进的测试,也就是我们常说的某某软件测试版

回归测试:回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。

软件测试方法有哪些?

整体来说分为黑盒测试和白盒测试。

黑盒测试:从用户的角度出发,把测试对象看出一个黑盒子,不用关心里面的结构,只需要关注程序的输入输出

黑盒测试技术包括:边界值法、等价类划分、错误推断

白盒测试:也叫结构化测试,把测试对象看成一个透明的盒子,要知道它的内部细节和逻辑结构,然后根据内部逻辑设置测试方法

按覆盖程度可以分为:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、

如何选用两者:

  • 模块较小,内聚程度高,适合使用白盒测试,减少错误。

  • 模块较大,逻辑复杂,测试代价较大的,适合使用黑盒测试,提高效率。

什么是测试用例?由于什么组成,举例说明?

测试用例:就是用于测试的一组输入信息,主要包括测试环境输入值以及预期输出,体现了一组测试方案

组成:测试目标、测试环境、输入数据、预期结果、测试脚本

等价类划分和边界值法?

等价类划分:思想就是就是用少量的有代表性的数据进行测试,尽量减少测试用例的次数。

基本步骤:

  1. 根据输入数据的各个规则,划分有效等价类和无效等价类。比如规定输入的是-99到900之间的数字,有效等价类就是这个范围内的数字,无效等价类就有很多,比如范围之上/范围之下的数字、输入为空、输入带有其它字符等等。
  2. 细分有效等价类和无效等价类,对每个等价类编号,形成表格。
  3. **设计测试用例,**在测试有效等价类的时候,可以尽量覆盖多的测试用例。但是对于无效等价类,每一测试数据只能覆盖一个无效等价类,否则分辨不了错误的原因。

边界值法::因为程序错误一般都是在边界上出现的,所以边界值法就是对输入**【边界】、【边界内】以及【边界周围】**进行测试。

比如说要求输入的数字范围是0-20,那不仅要测试0和20,0周围的1和-1,20周围的19和21都要测试,在0到20内也要测试一个值。边界值法是对等价类划分的一种补充,可以和等价类划分一起使用。

白盒测试的覆盖率要求有哪些?

语句覆盖:程序中每个语句至少都能被执行一次

判定覆盖:每个判定结果取各种值

条件覆盖:判定中的每个条件取各种值

判定/条件:判定中每个条件取各种值+每个判定结果取各种值

条件组合覆盖:每个条件的各种可能排列组合可能的取值。

路径覆盖:程序中每条路劲都需要覆盖,不一定覆盖条件组合

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

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

相关文章

0基础学习SQL注入之万能账号密码(BUUctf例题-[极客大挑战 2019]EasySQL1)

做题 借助例题[极客大挑战 2019]EasySQL1来理解SQL注入中的万能账号密码。 我们现解题,解题过程中的知识点在后面都会说到。 打开网址,我们看到的是这个界面。根据题目提示应该是属于SQL注入类型的 1.寻找注入点,很明显,输入用…

JDK17的Mybatis-Plus报错问题

添加 --add-opens java.base/java.langALL-UNNAMED

物理机安装centos7并配置基本环境,网络配置,docker配置

1.首先下载镜像Download 2.下载UltraISO 安装docker 第1步:卸载当前版本docker yum erase docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \do…

unity制作拼接地图

前段时间有个朋友问我想要制作一款地图编辑器,最开始我还想着在一个平面用节点切割制作地图编辑器这倒是也行,但不太好控制每一个点,如果未来项目大了,更加不好维护。 偶然间翻到一篇文章:unity地图边缘检测 或许我们…

升级啦!探索全新 StarRocks 中文社区与高效使用秘籍!

眼尖的朋友可能已经注意到,StarRocks 中文社区最近换上了全新的皮肤。是的,我们 StarRocks 的聚集地升级了!🎉 自成立两年半以来,StarRocks 中文社区不断壮大,现已发展成为一个拥有数万名成员的活跃社区。…

2024年团队程序设计天梯赛模拟赛 L1 + L2

目录 L1 - 6 剪切复制 L1 - 8 小偷踩点 L2 - 1 推宝塔 L2 - 2 含茶量 L2 - 3 到底爱不爱我 L2 - 4 寻宝图 L1 - 6 剪切复制 使用计算机进行文本编辑时常见的功能是剪切功能(快捷键:Ctrl X)。请实现一个简单的具有剪切和粘贴功能的文本…

MSSQL 命令行操作说明 sql server 2022 命令行下进行配置管理

说明:本文的内容是因为我在导入Access2019的 *.accdb 格式的数据时,总是出错的背景下,不得已搜索和整理了一下,如何用命令行进行sql server 数据库和用户管理的方法,作为从Access2019 直接导出数据到sql server 数据库…

低噪声放大器是如何实现低噪声放大的功能的

灵敏度作为接收机最重要的指标之一,直接决定了接收机能分辨的最小信号。接收机的灵敏度计算公式如下所示。 Psensitivity=-174dBm+NF+10*lg(BW)+SNR 由接收机灵敏度的计算公式可知,影响接收机灵敏度的指标有噪声系数、带宽和信噪比,因此一旦带宽和信噪比确定了,那么能决…

图像基础—图像分类

图像通常分为二值图像、灰度图像和彩色图像 图 1-3 二值图像、灰度图像和彩色图像 (1)二值图像 二值图像又称为黑白图像,图像中任何一个点非黑即白,要么为白色(像素 为 255),要么为黑色&#x…

制作一个RISC-V的操作系统十一-定时器中断

文章目录 CLINT定时器中断mtimemtimecmp机制总体框架流程时间节拍系统时钟代码 CLINT 产生软件中断和定时器中断 定时器中断 mtime 类似计数器,按照硬件对应的固定频率递增 上电后会自动复位为0,有硬件自动完成 mtimecmp 需要自己设置&#xff0…

Docker安装Oracle之踩坑记

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

ai免费打造写真大片!3个宝藏工具!

随着科技的飞速发展,人工智能(AI)已经渗透到我们生活的方方面面,包括摄影和图像处理领域。今天,我们就来揭秘那些能够让你轻松打造出专业级写真大片的AI工具,让你的摄影作品惊艳全场! 迅捷图片转…

机器学习理论入门---线性回归从理论到实践

线性回归是机器学习里面最简单也是最常用的算法,理解了线性回归的推导之后对于后续的学习有很大帮助,所以我决定从这里开始深入学习相关的机器学习模型。 本篇首先从矩阵求导开始切入,然后介绍一次线性回归的推导,再到代码实现。本…

2024第十五届蓝桥杯JavaB组省赛部分题目

目录 第三题 第四题 第五题 第六题 第七题 第八题 转载请声明出处,谢谢! 填空题暂时可以移步另一篇文章:2024第十五届蓝桥杯 Java B组 填空题-CSDN博客 第三题 第四题 第五题 第六题 第七题 第八题 制作不易,还请点个赞支持…

PyTorch深度学习之旅:从入门到精通的十个关键步骤

在人工智能的浪潮中,深度学习框架扮演着至关重要的角色。PyTorch作为其中的佼佼者,以其简洁、直观和灵活的特性,吸引了众多开发者与研究者。本文将引导您逐步掌握PyTorch,从基础概念到高级应用,让您在深度学习的道路上…

LLM推理框架Triton Inference Server学习笔记(二): Triton模型部署流程(stey by stey)

官方文档查阅: TritonInferenceServer文档 1. 写在前面 上一篇文章对triton inference server进行了一个整体的介绍,解答了三个经典问题what, why, how。 这篇文章就开始转入实践, 从实践的角度整理Triton模型部署的全流程, 如果我有一个训…

一篇文章带你快速认识边缘计算(必看)

引言 5G时代带来了万物互联的飞跃,但随之而来的是数据量爆炸性增长与集中式数据中心处理模式的瓶颈:响应延迟、带宽压力、安全隐忧。边缘计算应运而生,借鉴生物智能分布式原理,将计算与分析推向数据源头,有效解决了以上…

Promise模块化编程ES6新特性

文章目录 Promise&模块化编程1.Promise基本介绍2.快速入门1.需求分析2.原生ajax jQuery3.Promise使用模板 3.课后练习1.原生ajax jQuery2.promise 4.模块化编程基本介绍5.CommonJS基本介绍6.ES5模块化编程1.题目2.示意图3.代码实例—普通导入导出function.jsuse.js 4.代码…

一文搞懂Kotlin符号处理接口KSP

公众号「稀有猿诉」 原文链接 一文搞懂Kotlin符号处理接口KSP Kotlin符号处理(Kotlin Symbol Processing)即KSP是可以用于开发轻量级编译器插件的一套API。是Kotlin原生的,Kotlin语法友好的编译器插件。使用简单且易于上手&#xff0c…

同城货运系统的开发与货运搬家软件的技术性探讨和市场分析

一、市场前景展望 随着城市化进程的加快和电商物流的蓬勃发展,同城货运市场展现出了巨大的潜力。尤其是在快节奏的生活环境中,个人和企业对于快速、便捷、可靠的货运搬家服务需求日益增长。同城货运系统与货运搬家软件作为连接货主与货运司机的桥梁&…