软件工程 | 期末复习

news2024/11/17 13:52:44

一、软件与软件危机

1、软件发展经历三个阶段:程序设计程序系统软件工程

2、软件的概念:软件是计算机系统与硬件相互依存的另一部分,包括程序数据以及相关文档的完整集合,软件=程序+数据+文档

  • 数据:使程序能够适当处理信息的数据结构
  • 程序:能够完成预定功能和性能的可执行执行序列
  • 文档:是开发、使用和维护过程程序锁需要的图文资料

3、软件的特点:

  • 软件本身复杂性
  • 软件的成本高昂
  • 软件开发未摆脱手工开发方式
  • 软件维护与硬件有本质差别,维护难度高
  • 软件开发部署传统硬件制造过程
  • 软件是一种逻辑实体,无磨损性

4、软件危机的概念:在计算机软件开发和维护过程中所遇到的一些列严重问题。两个方面内容:

  • 如何开发软件,以满足对软件日益增长的需求
  • 如何维护数量不断膨胀的已有软件

5、软件危机的表现:

  • 对软件开发成本和进度估算不准确
  • 用户对已经完成软件不满意
  • 软件质量不可靠
  • 没有适当文档资料
  • 软件成本在计算机系统中所占比例逐年上升
  • 软件开发生产率低

6、软件危机的原因:

主观原因

  • 忽视需求分析
  • 轻视软件维护
  • 没有认识到程序只是软件的一部分
  • 没有认识到软件开发只是漫长的软件生命周期中一个比较次要的阶段
  • 越到后期引入变动付出代价越高

客观原因:

  • 软件是逻辑实体、缺乏可见性,管理和控制困难
  • 软件不会磨损,维护意味着修改原来设计,维护困难
  • 软件规模庞大,程序复杂性随规模增加指数上升

7、消除软件危机的途径:

  • 对计算机软件应该有正确的认识
  • 吸取借鉴人类长期从事各种工程项目积累的原理概念技术和方法
  • 积累开发和使用计算机辅助开发工具
  • 探索更好更有效的管理措施和手段对开发过程进行控制和管理

二、软件工程

1、定义:采用工程的概念、原理、技术和方法来开发与维护软件,把经历时间考验二证明正确的管理技术和当前能够得到的最好技术方法结合起来,经济的开发出高质量的软件并维护

2、软件工程的本质特性:

  • 关注大型程序的构造
  • 中心课题是控制复杂性
  • 软件经常变化
  • 开发效率非常重要
  • 开发人员和谐合作是关键
  • 软件需有效支持用户
  • 软件开发者替代其他领域人员创造产品

3、基本原理:

  • 按软件生存期分阶段制定计划并认真实施
  • 坚持进行阶段评审
  • 坚持严格的产品控制
  • 使用现代程序设计技术
  • 结果能够得到清楚的审查
  • 用人少而精
  • 承认不断改进软件工程实践的必要性

4、软件工程方法学:

把软件生命周期全过程中使用的一整套技术方法的集合成为方法学,也称泛型

软件工程的方法学包括三要素:方法工具过程

  • 方法:完成软件开发各项任务的技术方法
  • 工具:为运用方法提供的自动或半自动软件工程支撑环境
  • 过程:为了获得高质量软件所需要完成的一系列任务框架

5、软件生命周期

三、软

件过程

软件过程是为了获得高质量软件所需要完成的一系列任务框架

通常用软件声明周期模型描述软件过程

瀑布模型

将软件生命周期的各项获得规定为依据固定顺序连接若干阶段工作,最终得到软件

特点:

  1. 阶段间具有顺序性和依赖性
  2. 推迟实现的观点
  3. 质量保证的观点
    1. 每个阶段必须完成规定的文档
    2. 每个阶段结束前完成文档审查及早改正错误

快速原型模型

快速建立可运行的程序,他完成的功能往往是最终产品功能的一个子集

增量模型

把分析设计编码测试交付分成一个个增量,每个增量都是一个完整的流程,先完成一个系统子集的开发,再按照同样的开发步骤增加功能,如此递增下去直至满足全部系统需求

优点:短时间内可提交完成部分功能,主键增加产品功能,用户适应产品快

缺点:增量构建划分以及集成困难,容易退化为边做边改模型

还有风险更大的递增模型,就是并行执行的他们的效率更高了,但是也有可能很难组合一起

螺旋模型

在每个阶段之前都增加了风险分析过程的快速原型模型,看作增加了风险分析的快速原型模型

优点:

  • 利于把软件质量作为软件开发目标
  • 减少测试
  • 维护和开发不分开

缺点:风险估计困难

喷泉模型

典型的面向对象软件过程模型,体现迭代无缝的特性

四、可行性研究

目的:用最小的代价在最小的时间内确定问题是否能够解决

实质:系统分析和设计过程的大大压缩和简化,在较高层次上比较抽象的方式进行系统的分析和设计过程

过程:

  1. 分析和澄清问题定义
  2. 导出系统的逻辑模型(数据流图和数据字典)
  3. 根据逻辑模型探索若干种可以供选择解法
  4. 研究每种解法可行性
    1. 经济可行性:经济效益是否大于开发成本
    2. 技术可行性:现有技术能够实现
    3. 操作可行性:系统操作方式是否可行
    4. 其他可行性:法律、社会效益

成本效益分析:从经济角度分析新系统的开发是否盈利,帮助使用部门正确做出是否投资的决定

五、软件设计阶段

设计过程

总体设计又称概要设计或初步设计

任务:

  • 确定系统每个程序由哪些模块组成以及这些模块相互间的关系
  • 划分出物理元素,包括程序、文件、数据库、文档等

设计过程包括系统设计阶段结构设计阶段

设计原理

  • 模块化
    • 模块:能够单独命名,由边界元素限定的程序元素的序列,是构成程序的基本构件。
    • 模块化:把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
  • 抽象:抽出事务的本质特性而暂时不考虑它们的细节
  • 逐步求精:逐步揭露出底层细节
  • 信息隐藏和局部化
    • 信息隐藏:指一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的。主要是指模块的实现细节。
    • 局部化:指把一些关系密切的软件元素物理地放得彼此靠近,它有助于实现信息隐藏。
  • 模块独立
    • 模块独立性·是模块化、抽象、信息隐蔽和局部化概念的直接结果
    • 模块独立是好设计的关键,设计是决定软件质量的关键环节
    • 度量标准:耦合内聚 

耦合:对软件结构内不同模块之间相互联系程序的度量,耦合强度取决于模块接口的复杂程度、通过接口的数据等。耦合性越高,模块独立性越弱

耦合分类(程度从低到高):

无直接耦合→数据耦合→标记耦合(特征耦合)→控制耦合→外部耦合→公共耦合

内聚:是模块内部各个元素彼此结合的紧密成都

内聚分类(程度从低到高):

偶然内聚→逻辑内聚→时间内聚→过程内聚→通信内聚→顺序内聚→功能内聚

同其他模块强耦合的模块意味着内聚弱,强内聚模块意味着与其他模块松散耦合

设计目标:高内聚、低耦合

启发规则

改进软件结构提高模块独立性

模块规模应该适中

深度、宽度、扇入和扇出应适当

  • 深度: 表示软件结构中控制的层数。
  • 宽度: 软件结构内同一个层次上的模块总数的最大值。
  • 扇出:一个模块直接控制(调用) 的模块数目,扇出过大意味着模块过分复杂一般一个设计的好的典型系统的平均扇出是3或4,扇出的上限是5到9。
  • 扇入: 指有多少上级模块调用它,扇入大说明上级模块共享该模块的数目多好的软件结构顶层扇出比较高,中层扇出比较少,底层扇入到公共的实用模块中,即底层模块有高扇入

模块的作用域应该在控制域之内

  • 作用域: 指受该模块内一个判定影响的所有模块的集合
  • 控制域: 是这个模块本身以及所有直接或间接从属于它的模块的集合

力争降低模块接口的复杂程度

设计单入口单出口的模块

模块功能应该可以预测

六、测试阶段

软件生命周期中编码和测试统称为实现

软件测试是为了发现错误而执行程序的过程

  • 编码阶段(单元测试)
  • 测试阶段(各种综合测试)

软件测试的方法:

  • 黑盒测试:将软件看作一个黑盒子,不考虑其内部结构和处理过程,只按照规格说明书的规定,测试软件是否能够正确接收输入数据,产生正确的输出数据,即测试程序是否正确的实现了其功能
  • 白盒测试:完全知道程序内部结构和处理算法,因此可以将程序看做一个透明的白盒子,根据程序内部的逻辑结构测试程序内部的主要执行通路是否能够按照预定的要求准确工作,结构测试

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

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

相关文章

测试人员转型是大势所趋:我的十年经验告诉我,你必须要行动起来了。

做测试十多年,有不少人问过我下面问题: 现在的手工测试真的不行了吗? 测试工程师,三年多快四年的经验,入门自动化测试需要多久? 自学自动化测试到底需要学哪些东西? 不得不说,随着行…

学习open62541 --- [76] 使用智能指针处理内存释放问题

在使用监测项时,一般都会加一个context,然后在回调函数里使用这个context,这就需要保证context的内存空间在执行回调函数时是有效的。往往有以下三种方法: 使用静态内存空间:使用static创建静态变量,然后把…

【Python 爬虫常见的报错及其解决方法】零基础也能轻松掌握的学习路线与参考资料

Python 爬虫被广泛应用于数据采集和分析。然而,爬虫在运行过程中常常会遇到各种问题和错误,降低了爬虫效率、准确性和可靠性。因此掌握爬虫常见报错及其解决方法是非常关键的。本文将介绍 Python 爬虫常见的报错及其解决方法,并提供参考资料和…

内存泄漏的原因,内存泄漏如何避免?内存泄漏如何定位?

1. 内存溢出 内存溢出 OOM (out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个int,但给它存了long才能存下的数,那就是内存溢出。 2. 内存泄…

PyTorch LSTM和LSTMP的原理及其手写复现

PyTorch LSTM和LSTMP的原理及其手写复现 0、前言全部参数的细致介绍代码实现Reference 0、前言 关于LSTM的原理以及公式其实在这篇博客一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】讲的非常清晰明了了。 这里就是写出LSTM的pytorch的实现,…

【随笔记】全志 T507 PF4 引脚无法被正常设置为中断模式的问题分析

相关信息 硬件平台:全志T507 系统版本:Android 10 / Linux 4.9.170 问题描述:PF4 无法通过标准接口设置为中断模式,PF1、PF2、PF3、PF5 都可以。 分析过程 一开始以为是引脚被其它驱动占用引起,或者该引脚不具备中断…

高光谱成像技术在果蔬品质检测中的应用

在当前市场经济背景下,食品安全问题是消费者最为关心的问题之一,尤其是果蔬产品,农药残留问题和品质问题直接关系着消费者的权益和人身安全。针对传统化学检测的缺陷,本文结合高光谱成像技术,对其在果蔬品质与安全无损…

【C++】多态的概念/重写/虚表/抽象类

多态 多态的概念多态的定义和实现重写抽象类多态的原理虚表的构建原理虚函数的调用原理 多态的概念 多态就是多种形态,传递不同的对象,会调用不同的方法。 多态的定义和实现 那么在C语法中,多态是如何实现的呢? 我们首先要在继承…

vue学习 - 基础篇

初始工程结构 这里我们使用script标签从cdn获取vue.js, 而不是使用脚手架vue-cli, 因为cdn比较方便一点, 也不用配置node之类的比较麻烦 index.html <!DOCTYPE html> <html><head><title>VueJS Course</title><link rel"stylesheet"…

第三篇、基于Arduino uno,用oled0.96寸屏幕显示dht11温湿度传感器的温度和湿度信息——结果导向

0、结果 说明&#xff1a;先来看看拍摄的显示结果&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;本次使用的oled是0.96寸的&#xff0c;别的规格的屏幕不一定适用本教程&#xff0c;一般而言有显示白色、蓝色和蓝黄一起显示的&#xff0…

RabbitMQ日常使用小结

一、使用场景 削峰、解耦、异步。 基于AMQP(高级消息队列协议)协议来统一数据交互,通过channel(网络信道)传递信息。erlang语言开发&#xff0c;并发量12000&#xff0c;支持持久化&#xff0c;稳定性好&#xff0c;集群不支持动态扩展。 RabbitMQ的基本概念 二、组成及工作流…

可见性原子性有序性的+线程传参的方式+Java如何实现多个线程之间共享数据+线程间通信+死锁产生

//为了均衡CPU和内存的速度差异,增加了缓存 导致了可见性的问题; //操作系统增加了进程 线程 分时复用CPU,均衡CPU和io设备的速速差异 导致了原子性问题; //jvm指令重排序(优化指令排序) 导致了有序性的问题 可见性问题是指 线程A修改共享变量,修改后CPU缓存中的数据没有及时同…

Emacs之目前最快补全插件lsp-bridge(八十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

数据分析12——Pandas中数据合并方法

0、前言&#xff1a; 在pandas中进行数据合并的操作和数据库中的join操作非常类似。 1、merge横向合并&#xff1a; 前言&#xff1a;该函数只能做横向合并函数名&#xff1a;merge()函数参数&#xff1a; left: 数据类型为’DataFrame | Series’&#xff0c;需要进行合并的…

[CTF/网络安全] 攻防世界 PHP2 解题详析

[CTF/网络安全] 攻防世界 PHP2 解题详析 index.php.phps扩展名姿势 翻译&#xff1a;你能给这个网站进行身份验证吗&#xff1f; index.php index.php是一个常见的文件名&#xff0c;通常用于Web服务器中的网站根目录下。它是默认的主页文件名&#xff0c;在访问一个网站时&am…

说说计算这事儿:从开关到人工智能

目录 一 前言 二 计算历史 三 计算探秘 四 算力优化 五 未来展望 一 前言 计算本身其实是一个比较抽象的词&#xff0c;或者说比较笼统。很多场景都可能用到计算这个词&#xff0c;因此具体的含义就需要根据上下文来确定。今天我们讨论的计算&#xff0c;是比较狭义的计算…

【环境准备】在虚拟机的Ubuntu下安装VS Code并配置C/C++运行环境

1.点击进入 vscode官网 下载.deb安装包 2.启动虚拟机下的Ubuntu&#xff0c;Windows下的Xftp和Xshell Xftp&#xff1a;用于将刚刚在Windows下下载好的vscode.deb安装包传输到Ununtu中。Xshell&#xff1a;用于远程登录Ununtu&#xff0c;进行 vscode.deb 安装包安装&#xff…

算法26:递归练习

目录 题目1&#xff1a;给你一个字符串&#xff0c;要求打印打印出这个字符串的全部子序列&#xff08;子序列不能重复&#xff09; 题目2&#xff1a;打印一个字符串的全部排列。 题目3&#xff1a;针对题目2&#xff0c;要求去除重复元素 题目4&#xff1a;给定一个字符串…

ARM的读写内存指令与栈的应用

1.基础读写指令 写内存指令&#xff1a;STR MOV R1, #0xFF000000 MOV R2, #0x40000000 STR R1, [R2] 将R1寄存器中的数据写入到R2指向的内存空间 需注意&#xff0c;此命令是将R1中的数据写给R2所指向的内存空间&#xff0c;而不是直接把R1的数据赋给R2&#xff0c;R2寄存器…

chatgpt赋能Python-python3_9如何安装

Python 3.9 安装教程 Python 是一款非常流行的编程语言&#xff0c;而 Python 3.9 是其中的最新版本。不过&#xff0c;有些人可能会遇到一些问题&#xff0c;因为这是一个新版本。在本篇文章中&#xff0c;我们将介绍 Python 3.9 的安装过程&#xff0c;并提供一些关键的步骤…