软件工程学复习笔记

news2024/11/24 13:10:17

目录

  • 软件工程学概述
    • 软件危机的典型表现、产生原因、消除途径
    • 软件的构成:程序、数据、文档
    • 软件工程的七点特性
    • 软件工程的七条基本原理
    • 软件工程方法:传统方法学,面向对象方法学
    • 软件的生命周期:三个时期,软件定义,软件开发,软件维护
    • 生命周期模型,了解模型的特点和适用场景。
  • 可行性研究
    • 可行性研究的目的
    • 可行性研究的 3 个方面:技术可行性、经济可行性、操作可行性
    • 系统流程图概念、图形符号
    • 数据流图的概念、图形符号、绘制方法
    • 数据字典的概念、内容(数据流、数据元素、数据存储、处理)
    • 成本效益分析
  • 需求分析
    • 需求分析需要回答的问题
    • 需求分析的任务
    • 需求分析的成果:分析模型、软件需求规格说明书(SRS)
    • 分析建模
    • E-R 图的作用、图形符号、实体关系、绘制方法、数据库表的设计、实体属性
    • 数据规范化
    • IPO 图
  • 总体设计
    • 总体设计的目的
    • 了解总体设计过程
    • 软件设计过程中应该遵循的基本原理:
    • 模块独立的概念、定量度量标准(耦合、内聚)
    • 耦合方式、内聚方式、扇出、扇入,以及这些概念在模块设计方面的意义
    • 作用域、控制域
    • 启发规则
    • 层次图和结构图的绘制
    • 面向数据流的设计方法,了解变换流、事务流的概念及区别,了解变换分析、事务分析。
  • 详细设计
    • 结构程序设计的概念、基本控制结构(顺序、选择、循环)
    • 程序流程图
    • PAD
    • 判定表
    • 判定树
    • Jackson 图
    • 了解 Jackson 结构程序设计方法
    • 流图的概念、流图的绘制、环形复杂度的方法
  • 实现
    • 实现=编码+测试
    • 程序设计语言的选择
    • 软件测试的目标
    • 大型软件系统的测试过程中的测试步骤
    • 测试方法:黑盒测试、白盒测试
    • 驱动程序、存根程序
    • 单元测试
    • 集成测试、渐增式集成测试的集成策略及其优缺点
    • 确认测试
    • Alpha 测试和 Beta 测试
    • 白盒测试技术中的覆盖标准
    • 独立路径
    • 调试
  • 面向对象方法学
    • 面向对象方法学
    • 面向对象方法学的优点
    • 面向对象的基本概念:对象、类、消息、封装、继承、多态性、重载等
    • 3 种模型:对象模型、功能模型、动态模型
    • 常见 UML 图及其作用
  • 期末题库

软件工程学概述

软件危机的典型表现、产生原因、消除途径

定义

在计算机软件的开发和维护过程中所遇到的一系列严重问题
包括两点:1.如何开发软件,以满足对软件日益增长的需求;2.如何维护数量不断膨胀的已有软件

典型表现

  1. 对软件开发成本和进度的估计常常很不准确。
  2. 用户对已完成的软件系统不满意的现象时有发生
  3. 软件的质量往往不可靠
  4. 软件常常是不可维护的
  5. 软件通常没有适当的文档资料
  6. 软件成本在计算机系统总成本所占的比例逐年上升
  7. 软件开发生产率的速度,远远跟不上计算机应用迅速普及深入的趋势

产生原因

一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
具体表现如下:
(1)软件是逻辑部件而不是物理部件。
(2)软件的规模越来越大,复杂性越来越大。
(3)轻视需求分析的重要性,轻视软件维护的错误观点和方法

消除途径

  1. 首先应该对计算机软件有一个正确的认识,软件不等于程序
  2. 充分认识到软件开发应该是各类人员协同配合,共同完成的工程项目
  3. 推广使用在实践中总结出来的开发软件的成功技术和方法,并且研究探索更好的技术和方法
  4. 应该开发和使用更好的软件工具

软件的构成:程序、数据、文档

软件工程方法学的三要素是指方法、工具、过程

软件工程的七点特性

  1. 软件工程关注于大型程序的构造
  2. 软件工程的中心课题是控制复杂性
  3. 软件经常变化
  4. 开发软件的效率非常重要
  5. 和谐地合作是开发软件的关键
  6. 软件必须有效地支持它的用户
  7. 软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品
    大复变效和支文

软件工程的七条基本原理

  1. 用分阶段的生存周期计划严格管理;
  2. 坚持进行阶段评审;
  3. 严格实施的产品控制
  4. 采用现代程序技术;
  5. 结果应能清楚地审查;
  6. 开发小组的成员应该少而精;
  7. 承认不断改进软件工程的必要性。
    分评控现审少改

软件工程方法:传统方法学,面向对象方法学

软件的生命周期:三个时期,软件定义,软件开发,软件维护

每个时期又分为不同阶段,一共八个阶段。
每个阶段要回答的问题

阶段回答任务成果
问题定义要解决的问题是什么确切地定义需要解决的问题出关于问题性质、工程目标和工程规模的书面报告
可行性研究对于上一个阶段所确定的问题有行得通的解决办法吗?从XXX可行性等方面研究可行性可行性分析报告
需求分析系统必须做什么确定用户对系统所需的功能需求建模、软件需求规格说明书
总体设计系统如何实现建立目标软件系统的总体结构测试计划数据库实现计划
详细设计如何具体地实现这个系统设计出程序的蓝图详细设计规格说明书
编码与单元测试写出正确的容易理解、容易维护的程序模块。源程序代码
综合测试通过各种类型的测试(及相应的调试)使软件达到预定的要求系统集成测试报告
软件维护通过各种必要的维护活动使系统持久地满足用户的需要

生命周期模型,了解模型的特点和适用场景。

  1. 通用模型,需求比较确定。
  2. 快速原型,快速,更好获取用户需求。
  3. 喷泉模型,迭代,以对象为驱动。
  4. 瀑布模型,文档驱动。
  5. 螺旋模型,风险驱动。
  6. 增量模型:在一定程度上可以增加速度,但有风险,要求设计人员有更好的素质。

可行性研究

可行性研究的目的

可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。

可行性研究的 3 个方面:技术可行性、经济可行性、操作可行性

系统流程图概念、图形符号

系统流程图是概括地描述物理系统的工具在这里插入图片描述
在这里插入图片描述

数据流图的概念、图形符号、绘制方法

是一种图形化技术,它描绘信息流和数据从输入移动 到输出的过程中所经受的变换

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据字典的概念、内容(数据流、数据元素、数据存储、处理)

数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
需要定义数据流、数据元素、数据存储、处理

定义的方法
顺序、选择、重复、可选
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

成本效益分析

软件开发成本主要表现为人力消耗
成本计算

  1. 代码行
  2. 任务分解技术
  3. 自动估计成本技术

成本效益计算

  1. 货币时间价值
  2. 投资回收期
  3. 纯收入
  4. 投机回收率

需求分析

需求分析需要回答的问题

准确回答“系统必须做什么”的问题。

需求分析的任务

  1. 确定对系统的综合需求
  2. 分析系统的数据需求
  3. 导出系统的逻辑模型
  4. 修正系统开发计划
    综数逻开

需求分析的成果:分析模型、软件需求规格说明书(SRS)

分析建模

数据模型(实体-联系图)
功能模型(数据流图)
行为模型(状态转换图)

E-R 图的作用、图形符号、实体关系、绘制方法、数据库表的设计、实体属性

keyvalue
作用它描述了从用户角度看到的数据,它反映了用户的现实环境,而且与在软件系统中的实现方法无关。
图形符号在这里插入图片描述
实体关系1:1、1:N、N:M

数据规范化

keyvalue
第一范式在这里插入图片描述
第二范式在这里插入图片描述
第三范式在这里插入图片描述

范式级别越高,冗余度越低。

IPO 图

输入 处理 输出
在这里插入图片描述

总体设计

总体设计的目的

回答 系统该如何实现 的问题

了解总体设计过程

  1. 大体分为两个阶段

系统设计和结构设计阶段

  1. 具体分为九个步骤
  1. 设想供选择的方案
  2. 选取合理的方案
  3. 推荐最佳方案
  4. 功能分解
  5. 设计软件结构
  6. 设计数据库
  7. 制定测试计划
  8. 书写文档
  9. 审查和复审
    在这里插入图片描述

软件设计过程中应该遵循的基本原理:

模块化、抽象、逐步求精、信息隐藏和局部化、模块独立

模块独立的概念、定量度量标准(耦合、内聚)

模块独立的概念是模块化、抽象、信息隐藏和局部话概念的直接结果。

耦合方式、内聚方式、扇出、扇入,以及这些概念在模块设计方面的意义

功能内聚最高,偶然内聚最低
数据耦合、特征耦合、控制耦合、公共耦合、内容耦合(从低到高)

扇入:指直接调用该模块的上级模块的个数
扇出:指该模块直接调用的下级模块的个数
低耦合高内聚,得较高的模块独立性。顶层扇出高,底层扇入高,是好的模块设计。

如果一个模块被 n 个模块调用,其中直接的上级模块的个数是 m 个( m<=n )那么该模块的扇入数是 m 个。

作用域、控制域

控制域:本身及其所有下级模块
作用域:受该模块内一个判定影响的所有模块的集合
模块的作用域应在模块的控制域之内

启发规则

  1. 改进软件结构提高模块独立性
  2. 模块规模应该适中
  3. 深度宽度扇入扇出都应该适当
  4. 模块的作用域应该在控制域之内
  5. 力争降低模块接口的复杂程度
  6. 设计单入口单出口的模块
  7. 模块功能应该可以预测
    独中深域复单预

层次图和结构图的绘制

在这里插入图片描述
在这里插入图片描述

面向数据流的设计方法,了解变换流、事务流的概念及区别,了解变换分析、事务分析。

在这里插入图片描述
在这里插入图片描述

  1. 复查基本系统模型
  2. 复查并精化数据流图
  3. 确定数据流图具有变换特性还是事务特性
  4. 确定输入流和输出流的边界,从而孤立出变换中心
  5. 完成“第一级分解”
  6. 完成“第二级分解”
  7. 使用设计度量和启发式规则对第一次分割得到的软件结 构进一步精化

详细设计

结构程序设计的概念、基本控制结构(顺序、选择、循环)

定义

  1. 一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
  2. 结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句。

程序流程图

PAD

问题分析图

在这里插入图片描述
在这里插入图片描述

判定表

在这里插入图片描述

判定树

在这里插入图片描述

Jackson 图

了解 Jackson 结构程序设计方法

流图的概念、流图的绘制、环形复杂度的方法

流图是简化了的程序流图

环形复杂度计算:

  1. 线性无关的区域数
  2. 边数-节点数+2
  3. 判定节点+1

实现

编码+测试。

程序设计语言怎么选择,什么标准应用领域、程序员的能力,可用的工具,跨平台性等 有哪些标准

测试的目标:是为了尽可能多的找打软件中的错误,而不是证明软件正确

大型软件测试的步骤有哪些

主要的测试方法:黑河测试,白盒测试。 ; 驱动程序,存根程序。什么时候需要驱动程序什么时候需要存根程序

驱动程序 调用程序的程序。存根程序:替代要调用的模块。

单元测试

测试的重点是什么,集成测试,渐增式集成测试 优缺点

确认测试,内容包括什么

alpha beita测试有什么区别

白盒测试过程中 覆盖标准

覆盖的强弱

环形复杂度独立路径 复杂度。

实现=编码+测试

程序设计语言的选择

  1. 系统用户的要求
  2. 可以使用的编译程序
  3. 可以得到的软件工具
  4. 工程规模
  5. 程序员的知识
  6. 软件可移植性要求
  7. 软件的应用领域

软件测试的目标

  1. 测试是为了发现程序中的错误而执行程序的过程
  2. 好的测试方案是极可能发现迄今为止尚未发现的错误的测试
  3. 成功的测试是发现了至今为止尚未发现的错误的测试

大型软件系统的测试过程中的测试步骤

  1. 模块测试
  2. 子系统的测试
  3. 系统测试
  4. 验收测试
  5. 平行运行

测试方法:黑盒测试、白盒测试

白盒测试主要采用的技术有:路径测试技术和事务处理流程技术
黑盒测试:等价划分、边界值分析,设计测试数据的技术

驱动程序、存根程序

驱动程序 调用程序的程序。存根程序:替代要调用的模块。
自顶向下测试时使用存根程序
自底向上时使用驱动程序

单元测试

单元测试的重点:

  1. 模块接口
  2. 局部数据结构
  3. 重要的执行通路
  4. 出错处理通路
  5. 边界条件

集成测试、渐增式集成测试的集成策略及其优缺点

集成测试分为非渐增式集成测试和渐增式集成测试
渐增式继承策略分为自顶向下集成测试和自底向上集成测试
自顶向下测试的主要优点事不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,而且在早期发现上层模块的接口错误。
自底向上测试优缺点正好相反

确认测试

确认测试也称验收测试,目标是验证软件的有效性。
内容包括:1. 软件配置复查 2.Alpha测试和 3.Beta测试

Alpha 测试和 Beta 测试

Alpha测试有用户在开发者的场所进行,在开发者的指导下,所以是受控的。
Beta测试有软件的最终用户们在客户场所进行,是不可控

白盒测试技术中的覆盖标准

判定覆盖>判定覆盖>语句覆盖

独立路径

独立路径遇到循环重复的用…表示 1-2-3-2-…

调试

在这里插入图片描述
在这里插入图片描述

面向对象方法学

是什么,有什么优点

基本概念,对象类,封装继承重载。

三种模型:对象模型、功能、动态模型

面向对象方法学

同时使用对象、类、继承、消息的方法

面向对象方法学的优点

  1. 与人类习惯的思维方法一致
  2. 稳定性好
  3. 可重用性好
  4. 易开发大型产品
  5. 可维护性好

面向对象的基本概念:对象、类、消息、封装、继承、多态性、重载等

  1. 对象是描述对象属性的数据(静态属性)以及对这些数据施加的所有操作动态行为)封装在一起构成的统一体。
  2. 类是对具有相同属性和行为的一个或多个对象的描述。
  3. 消息是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。
    调用对象中的方法,例如MyCircle.Show(Green)
  4. 封装是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐藏对象的内部细节
  5. 继承是子类自动地共享基类(父类)中定义的数据和方法机制
  6. 多态性是子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。
    同样的消息既可以发送给父类也可以发送给子对象,而在不同层次的类可以按自己的需要实现不同的行为
  7. 重载
    同一作用域内的若干个参数特征不同的函数可以使用同一个函数的名字,
    例:Show(shape)和Show(shape,color)

3 种模型:对象模型、功能模型、动态模型

常见 UML 图及其作用

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

期末题库

软件工程期末考试题库

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

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

相关文章

MMPose学习笔记1

文章目录 摘要什么是人体姿态估计3D 姿态估计人体参数化模型下游任务2D姿态估计多人姿态估计&#xff1a;自顶向下方法基于回归的自顶向下方法基于热力图的自顶向下方法 多人姿态估计&#xff1a;自底向上方法单阶段方法基于Transformer的方法小结 3D姿态估计评估指标 Dense Po…

面向对象特征之一:封装和隐藏

为什么要引入封装性&#xff1f; ●我们程序设计追求“高内聚&#xff0c;低耦合” ➢高内聚:类的内部数据操作细节自己完成&#xff0c;不允许外部干涉; ➢低耦合:仅对外暴露少量的方法用于使用。 ●隐藏对象内部的复杂性&#xff0c;只对外公开简单的接口。便于外界调用&am…

ISIS路由渗透实验

1&#xff09;拓扑 2&#xff09;需求&#xff1a;ISIS全网互联互通 3&#xff09;原因分析&#xff1a; 因为&#xff0c;L1/2 路由器&#xff08;R4、R8&#xff09;学习到L1类型路由信息会装进L2-LSP&#xff0c;在泛洪给其他区域的L2和L1/2路由器&#xff0c;所以&#x…

【socket】从计算机网络基础到socket编程——Windows Linux C语言 + Python实现(TCP+UDP)

一、部分基础知识1.1 计算机网络的体系结构1.11 互联网简介1.12 计算机网络的分类1.13 协议与网络的分层体系结构▶ 协议▶ 网络的分层体系结构 1.14 OSI 七层模型&#xff08;重要&#xff09;▶ OSI 模型的结构▶ OSI 模型各层的功能 1.15 TCP/IP 的体系结构&#xff08;重要…

linux服务器彻底清除xmrig挖矿病毒

不想看前面的内容可直接进入第三点看解决方案。 一&#xff0c;事件起因 二&#xff0c;检查过程 三&#xff0c;解决方案 1&#xff0c;找到病毒文件 2 &#xff0c;杀死病毒进程&#xff0c;删除病毒文件 3&#xff0c;查看linux服务器上的定时任务 4&#xff0c;最后&…

【MySQL新手到通关】第七章 聚合函数使用详解

文章目录 0. 前置1. 聚合函数介绍1.1 AVG 和 SUM 函数1.2 MIN 和 MAX 函数1.3 COUNT函数 2. GROUP BY2.1 基本使用 3. HAVING3.1 基本使用3.2 WHERE和HAVING的对比 0. 前置 为了方便测试&#xff0c;我们导入一些数据 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ------…

编程(39)----------多线程中的锁

假设一个这样的场景: 在多线程的代码中, 需要在不同的线程中对同一个变量进行操作. 那此时就会出现问题: 多线程是并发进行的, 也就是说代码运行的时候, 俩个线程会同时对一个变量进行操作, 这样就会涉及到多线程的安全问题: class Counter{public int count;public void add…

RPC核心原理(整体架构/调用过程)

Server: Provider ,暴露服务,服务提供方 Client: Consumer ,服务消费,调用远程服务 Registry:服务注册与发现 RPC的调用过程如下&#xff1a; 第一步&#xff1a;server会将他需要暴露的服务以及他的地址信息注册到Registry这一注册中心。 第二步&#xff1a;client通过注册…

【VScode】ESLint :warning Delete `CR` prettier/prettier

一. ESLint 作用 检查 Javascript 编程时的语法错误。 新建或修改文件时报错 原因 Windows系统 &#xff0c;clone的代码会自动把换行符 LF转为回车符CRLF&#xff0c;这时本地的代码都是回车符。可在prettier.config.js中查看到 检查配置&#xff08;ESLint中是…

linux(system V标准)信号量

目录&#xff1a; 1.什么是信号量 2.信号量的本质 1.什么是信号量 2.信号量的本质 什么是临界资源呢?? 凡是倍多个执行流同时访问的资源就是临界资源&#xff01;&#xff01;&#xff01; 我们看一个问题&#xff0c;我们fork&#xff08;&#xff09;之后创建一个子进程&a…

redis----缓存穿透、击穿、雪崩问题解决

缓存 缓存更新方式 这是决定在使用缓存时就该考虑的问题。 设置缓存数据的TTL&#xff0c;当缓存数据失效后&#xff0c;如果有系统要请求&#xff0c;则会查询数据库并插入缓存&#xff08;被动更新&#xff09; 不友好在各类会往mysql写入数据的系统中&#xff0c;植入更新…

360天御滑块

又来水文章&#xff1f;当然&#xff0c;闲着无聊&#xff0c;走过路过&#xff0c;不要错过&#xff0c;点进来多看看。 两种类型。滑块&#xff0c;文字点选。此案例就以网友投稿的滑块来说。 怎么说呢&#xff0c;名字好听&#xff0c;本次难点&#xff0c;js混淆&#xff…

图文并茂教你快速入门React系列02-state

State 在React中&#xff0c;什么是state&#xff1f; 在 React 中&#xff0c;随时间变化的数据被称为状态&#xff08;state&#xff09;。你可以向任何组件添加状态&#xff0c;并按需进行更新。 如何添加使用state? 点击获取教程代码关于此框架–More docs 使用 useSt…

记一次Redis版本新特性导致的主从切换故障

背景 最近一组业务redis数据不断增长需要扩容内存&#xff0c;而扩容内存则需要重启云主机&#xff0c;在按计划扩容升级执行主从切换时意外发生了数据丢失与master进入只读状态的故障&#xff0c;这里记录分享一下。 业务redis高可用架构 该组业务redis使用的是一主一从&am…

基于卷积神经网络和连接性时序分类的语音识别系统,含核心Python工程源代码(深度学习)个人可二次开发

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 特征提取2. 声学模型3. CTC 解码4. 语言模型 系统测试工程源代码下载其它资料下载 前言 本项目基于卷积神经网络和连接性时序分类方法&#xff0c;采用中文语音数据集进行训练&#xff0c;实现声音转录为中文拼…

Java枚举中定义属性

文章目录 1、复习枚举2、自定义属性3、自定义属性枚举类和常量的对比4、常用方法5、枚举自定义属性在开发中的应用&#xff1a;字典表6、补充&#xff1a;入参校验 刚接触枚举时的例子太简单&#xff0c;就一个Season枚举类&#xff0c;里面四个常量值&#xff0c;后来开发中看…

接口幂等方案

文章目录 概要方案乐观锁数据库唯一索引令牌tokentoken通过另一个接口从服务端获取客户端自身生成token 总结 概要 所谓接口幂等性&#xff0c;就是一次和多次请求某一个资源对于资源本身应该具有同样的影响。接口幂等的应用很广&#xff0c;小到防止表单重复提交&#xff0c;…

使用kettle完成学生成绩登记需求

&#xff08;一&#xff09; 使用kettle完成学生成绩登记需求 学生成绩表下表所示。(自己创建一个学生表) 在MySQL中创建一个名为school的数据库&#xff0c;并在school数据库中创建一个名为score的表&#xff0c;使用Kettle将Excel形式的学生成绩表导入MySQL的score表 1&am…

机器视觉海康工业相机SDK参数设置获取

视觉人机器视觉培训-缺陷检测项目-食品行业草鸡蛋外观检测 相机参数类型可分为六类,除 command 参数外,每一类都有其对应的设置与获取函数接口。 表 1 参数类型及对应函数接口介绍 *详细函数接口可参考 SDK 手册: ​C:\Program Files (x86)\MVS\Development\Documentation…

【已解决】微信小程序报错:request 合法域名校验出错 如若已在管理后台更新域名配置,请刷新项目配置后重新编译项目,操作路径:“详情-域名信息”

【已解决】微信小程序报错&#xff1a;request 合法域名校验出错 如若已在管理后台更新域名配置&#xff0c;请刷新项目配置后重新编译项目&#xff0c;操作路径&#xff1a;“详情-域名信息” 场景复现解决方法 知识专栏专栏链接微信小程序专栏https://blog.csdn.net/xsl_hr/c…