重庆大学软件工程导论总结

一、软件工程概述

1.1软件以及软件的特点

软件 = 程序+数据+文档

特点:

  1. 一种逻辑实体,不具有物理实体,具有抽象性
  2. 与硬件生产不同,是人类智力劳动的产物
  3. 软件在运行与使用过程中不存在磨损老化
  4. 手工开发模式
  5. 开发与运行必须依附于特定的计算机系统

1.2软件的分类

按功能分:系统软件,支撑软件,应用软件

按服务对象分:通用软件,定制软件

按规模分:小,中,大,超大

按工作方式分:实时软件,分时软件,交互软件,批处理软件

1.3软件危机及表现:

软件危机:泛指软件在计算机软件的开发和维护过程中遇到的一系列严重的问题。

软件危机产生的原因:

  1. 高级语言的出现
  2. 操作系统的发展引起了计算机应用方式的变化
  3. 大量 的数据处理导致第一代数据库管理系统的诞生

具体原因:

  1. 用户需求不明确
  2. 缺乏正确的理论指导
  3. 软件开发规模越来越大
  4. 软件开发的复杂度越来越高

软件危机的具体表现:

  1. 软件开发进度难以预测
  2. 软件的开发成本难以控制
  3. 开发的软件产品不能满足用户的需求
  4. 软件产品质量无法保证
  5. 软件产品难以维护
  6. 软件缺乏适当的文档资料

1.4软件工程

软件工程:①将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;②对①中所述方法的研究

三要素:过程、方法、工具

软件生存周期:就是软件从产生到报废或停止使用的过程

阶段

  1. 软件计划
  2. 需求分析
  3. 软件设计
  4. 编码
  5. 软件测试
  6. 运行与维护
  7. 退役

1.5软件开发模型

1.瀑布模型:将软件生存周期的各项活动规定为按固定顺序而连接的若干工作阶段,形如瀑布流水,最终的得到软件产品。

六项活动:制定计划、需求分析、软件设计、程序编写、软件测试、运行维护

各个阶段都生成说明书

2.快速原型模型:使用快速开发工具,在较短时间拿出原型,让客户评价,然后在修改,直到客户满意,然后在进行开发。

3.增量模型: = 瀑布模型*n

以瀑布模型为基础,每次只开发一部分,通过之后开发下一步分,每一次都是相同操作

4.螺旋模型:原型+瀑布---->分四个任务区:制定计划、风险分析、实施工程、评估

5.喷泉模型

二、软件需求分析

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

主要任务:就是让用户和开发者公共明确将要开发的是一个什么样的系统

两类任务

  1. 分析和建模
  2. 描述和表达

2.1常用的分析方法

  1. 面向数据流的结构化分析方法(SA)
  2. 面向数据结构的Jackson方法
  3. 逻辑构造法(LCP)
  4. 面向对象的方法(ODA)

步骤:调查研究->分析建模->需求描述->需求验证

2.2结构化分析方法

定义:用抽象模型的概念,按照软件内部数据传递、变化的关系,运用“抽象-分解”的基本手段,自顶向下逐层分解,直到满足功能需要的所有细节为止

建模要素

  1. 数据模型->实体关系图(E-R图)

    主要成分:实体、关系、属性

  2. 功能模型->数据流图(DFD图)

    主要成分:数据流、数据加工活处理、数据存储、外部实体

  3. 行为模型->转态转换图(STD)

    主要成分:时间、转换、状态(初态,终态)

2.3数据词典:

3种数据:

  1. 只含有一个数据的数据项
  2. 由多个数据项组成的数据流
  3. 数据数据文件或数据存储

3种方式:

  1. 顺序
  2. 选择
  3. 重复

包含信息:名称、别名或编号、组成或组织结构的描述、类型、长度、取值范围、何处使用

三、软件设计

3.1软件设计方法

  1. 系统结构设计
  2. 过程设计
  3. 数据结构设计

3.2软件设计阶段任务

  1. 划分模块、确定软件结构
  2. 确定系统的数据结构
  3. 设计用户界面

3.3软件设计原则

  1. 模块化:把每个模块划分成可独立命名具有独立访问的模块,每个模块完成一个问题

    1. 有效模块系统的能力标准

      1. 可分解性
      2. 可组装性
      3. 可理解性
      4. 连续性
      5. 保护性
  2. 抽象
  3. 逐步求精
  4. 信息隐藏

3.4软件设计分类

活动分类:

从活动任务方面:对软件的需求所进行的

  1. 数据设计
  2. 体系结构设计
  3. 接口设计
  4. 构件设计
  5. 部署设计

从过程管理方面

  1. 详细设计:

    1. 过程设计
    2. 数据设计
    3. 接口设计
  2. 总体设计(概要设计):
    1. 目标系统的总体框架
    2. 每个模块和接口的之间的调用关系
    3. 数据库、数据定义和数据结构

3.5模块的独立性

定义:是指软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他模块的接口是简单的。

较强 模块应具有:

  1. 高内聚
  2. 低耦合

耦合划分等级:

  1. 低耦合

    1. 无直接耦合
    2. 数据结构
    3. 标记耦合
  2. 中耦合:控制耦合
  3. 较强耦合:外部耦合,公共耦合
  4. 强耦合:内容

内聚划分等级

  1. 低内聚:偶然,逻辑,时间
  2. 中内聚:过程、通信
  3. 高内聚:顺序、功能

启发式规则:

  1. 深度:表示软件结构中从顶层到最底层的层数0->n
  2. 宽度:表示控制总分布
  3. 扇出:一个模块的直接下属模块
  4. 扇入:一个模块的直接上属模块

3.6软件结构图

结构图:主要构成

  1. 模块
  2. 调用
  3. 数据

数据流图

  1. 变化型数据流->变化分析 输入-处理-输出
  2. 事务型数据流->事务分析

流程图

  1. 顺序型
  2. 选择型
  3. 先判断循环
  4. 后判断循环
  5. 多分支选择

盒图(N-S图),PAD图,判定树,判定表

3.7数据结构设计

  1. 概念结构设计
  2. 逻辑结构设计
  3. 物理结构设计

3.8人机界面设计

黄金原则

  1. 置用户与控制下
  2. 减少用户的记忆负担
  3. 保持界面一致

四、软件测试

4.1基本概念

软件测试:是指利用人工或自动的方法执行和评价软件各个模块的过程

测试目的:是以最少的人力、物力和时间,找出软件中潜在的各种错误与缺陷,通过改正各种错误和缺陷,提高软件质量

软件测试基本原则

  1. 穷举测试不可行
  2. 测试是由风险的
  3. 软件测试只能证明软件缺陷的存在
  4. 软件中存在的错误数与已知的错误成正比
  5. 测试用例包括:非法输入与合法输入
  6. 注意测试中的群集现象
  7. 妥善保存测试计划、测试用例
  8. 尽早开始测试工作,并贯穿整体开发过程

软件测试分分类:

  1. 根据开发阶段不同:单元测试、集成测试、确认测试、系统测试、验收测试
  2. 根据实施组织不同:开发方测试、用户测试、第三方测试
  3. 根据技术不同:白盒测试、黑盒测试、灰盒测试
  4. 根据测试内容不同:符合性、验收、易用性、兼容性、可靠性、安全性、性能、压力
  5. 根据程序是否被执行:静态测试、动态测试(常用黑盒、白盒)

4.2白盒测试

定义:测试者可以看到源代码,知道软件的内部结构和内部逻辑,并根据内部结构找到合适测试用例,以检验程序中的每条或关键元素是否都能按要求正确工作

测试目标:是通过测试尽可能提高程序内部逻辑的覆盖程度,已发现可能的潜在程序语句、判定、条件以及路径的肯错误。

测试方法:逻辑覆盖法、基本路径法

逻辑覆盖法

  1. 定义:是通过对程序逻辑结构的遍历实现程序覆盖
  2. 可分为:语句覆盖、条件覆盖、判定覆盖和条件覆盖 弱->强

基本路径法

  1. 定义:是在程序控制流图的基础上,通过分析构造的环形复杂度,导出其基本可行路径集合,从而设计测试用例的方法
  2. 环形复杂度计算:可以确定独立路径数->测试用例数
    1. V(G) = E-N+2 E边数 N节点数
    2. 判定节点数+1
    3. 控制流图的区域数

4.3黑盒测试

定义:把被测程序看做黑盒子,在不考虑软件的内部逻辑和内部构造,测试者只需知道软件的输入输出之间的关系或程序功能的情况哎,检查程序是否符合他的功能说明。

主要试图发现

  1. 功能性错误或遗漏
  2. 性能错误
  3. 初始化错误
  4. 界面错误
  5. 数据结构或外部数据库访问错误

方法

  1. 等价划分法:有效等价类,无效等价类
  2. 边界值分析法: 步骤:确定边界->选取测试程序
  3. 错误推测法:列举出程序中可能有的错误和容易发生的错误,并根据他们选择测试用例

4.4软件测试基本过程

单元测试:->大量使用白盒测试法

  • 目的:发现模块的内部错误
  • 测试重点:模块接口、局部数据结构、重要执行路径、错误处理、边界条件

集成测试:->较多黑盒测试

  • 目的:用户发现模块组装中肯出现的问题,最终构成一个符合要求的系统

  • 方法:非建增式测试法->全组测试

    ​ 建增式测试法->一个加一个测试:自顶向下,自底向上

确认测试:->通常采用黑盒测试法

  • 目的:检查软件的功能与性能是否满足软件需求规格说明书确定的指标相符合
  • 包括:有效性测试、软件配置检查

系统测试:

  • 目的:把软件、硬件和环境连接咋一起,在实际环境中运行
  • 分为:功能、安全、恢复、压力、容量、文档测试
  • 参加人员:系统测试专家、用户代表、软件系统分析员或设计员

验收测试

  • 目的:确保软件就绪
  • α测试:是指在开发者现场进行,并且开发者对用户指导
  • β测试:是由软件用户在实际使用环境下测试

4.5软件调试

定义和目的:软甲调试数确定软件的额错误原因和位置,并且纠正错误的过程

方法:硬性纠错法、跟踪法、演绎法、归纳法、试探法、对分查找法

回归测试

  • 定义:是指对软件系统被修改或扩充后重新进行的测试
  • 目的:为了保证软件修改后,没有引入新的错误而反复进行的测试

五、编码及实现

编码任务:是为每个模块编写程序,即是将详细设计的结果转化为计算机语言。

5.1选择编程语言需要考虑的因素

  1. 待开发系统的应用领域,即项目的应用范围
  2. 用户要求
  3. 开发人员喜好和能力
  4. 系统的可移植性要求
  5. 算法和数据结构的复杂性
  6. 平台支持

5.2编码风格

  1. 程序内部文档
  2. 数据说明
  3. 语句构造
  4. 输入输出
  5. 效率

六、软件维护

定义:就是软件运行维护阶段,为了你改正软件错误,或为了满足客户新的应用需求,而对软件做出的修改,改错或者进化的过程。

维护类型

  1. 改正性维护
  2. 适应性维护
  3. 完善性维护
  4. 预防性维护

副作用

  1. 修改代码副作用
  2. 修改数据副作用
  3. 修改文档副作用

实施过程

  1. 首先确定维护类型
  2. 对修改性维护从评价错误的严重性开始
  3. 适应性和完善性维护,如果另一个开发工作一样,建立每个请求优先权
  4. 实施维护任务

七、面向对象

7.1基本概念

对象:

  1. 具有唯一标识的名字
  2. 对外提供一组服务
  3. 数据表示对象状态

特点:

  1. 以数据为中心
  2. 主动性
  3. 实现数据了封装性
  4. 本质上具有并行性
  5. 模块独立性好

:一组对象(相似)

实例:一个具体的对象

消息:接受消息的对象+消息选择符+{变元}

方法:类中定义的数据服务

属性:类中定义的数据

封装:把数据和实现操作的代码集中放在对象内部

继承:子类自动共享父类中定义的数据和方法的机制

多态性:子类对象可以想父类一样使用

重载:同一个作用域的若干参数特征不同函数可以使用同一个名字

7.2面向对象建模

对象模型:表示静态的,结构化的“数据”性质

通常采用统一建模语言MUL所提供的类图

动态模型:表示瞬时的,行为的系统的“控制”性质

UML状态图

功能模型:表示动态的系统的“功能”性质,指明系统做什么

数据流图

7.3UML

定义:统一建模语言,一种标准的图形化建模语言->用于软件的分析与设计

作用

  1. 适用于软件开发的周期的每一个阶段
  2. 适用于面向对象的各种建模
  3. 不涉及编程,与平台无关

用例图:是对系统提供的功能性描述

​ 应用于需求分析阶段

对象图:类图的实例

转态图:描述一个特定对象所有可能的状态以及引起状态转化的事件

顺序图:描述对象之间动态交互关系,着重表现对象之间消息传递的时间顺序

活动图:目的就是描述对象动作及动作的结果——对象的状态变化(可以用泳道)

协作图构件图部署图

八、敏捷开发

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法

敏捷宣言:

重庆大学软件工程导论总结相关推荐

  1. 软件工程导论团队项目

    软件工程导论团队项目(速课小龙) 一.团队介绍 1.团队成员 邓  旭 2016012068 (组长) 陈逸璇 2016012056 周紫伊 2016012043 谢月鹏 2016012066 洪泽芳 ...

  2. 《软件工程导论》课后习题答案

    <软件工程导论>课后习题答案 第一章 软件工程概论 1.什么是软件危机? 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题.这些问题表现在以下几个方面: (1)用户对开发出 ...

  3. 微信小程序云开发体会——总结软件工程导论大作业

    微信小程序云开发体会--总结软件工程导论大作业 前言 第一次接触 具体难题 好用的技术 开发完之后的体会 无法不热爱更多 前言 可能大家完成这次作业都会选择比较擅长的领域--网页前后端.这的确是比较稳 ...

  4. 《软件工程导论》考研复试整理

    一.名词解释 DFD 数据流图Data Flow Diagram PDL 过程设计语言 Process Design Language PAD 问题分析图 Problem Analysis Diagr ...

  5. 软件工程导论复试——一、软件工程学概述

    软件工程导论复试 本文用书 <软件工程导论>第六版张海藩.牟永敏 清华大学出版社 一.软件工程学概述 软件危机:计算机软件开发和维护时遇到的一系列严重问题 典型表现: (1) 对软件开发成 ...

  6. 首经贸电子信息复试软件工程导论

    一.名词解释 DFD 数据流图Data Flow Diagram PDL 过程设计语言 Process Design Language PAD 问题分析图 Problem Analysis Diagr ...

  7. 软件工程导论第三章复习总结附思维导图

    软件工程导论第三章复习总结附思维导图 概述 准确回答"系统必须做什么" 必须理解并描述问题的信息域,根据这条准则应该建立数据模型 必须定义软件应该完成的功能,这条准则要求建立功能模 ...

  8. 软件工程导论期末考点总结

    文章目录 一.软件工程学概述 1.1.软件危机 1.2.软件工程 1.2.1.软件工程的介绍 1.2.3.软件工程方法学 1.3.软件生命周期 1.4.软件过程 1.4.1.瀑布模型 1.4.2.快速 ...

  9. 软件工程导论(张海藩第六版)期末考试、考研复试重点

    这里是一个重点的简介,只是概念性的内容,软件工程导论中还有一些画图的题目,建议先掌握概念性的内容,之后的画图就比较容易了. 文末附有完整的思维导图链接,思维导图里面是完整的知识点,学完一遍之后直接拿着 ...

  10. 学习软件工程导论的心得体会

    软件工程导论是一门软件工程专业的必修课,在长达一学期的学习中,我认识到为解决"软件危机"引发的一系列困境,使得"软件工程"这一概念面世,其中,软件工程中由&qu ...

最新文章

  1. 微信小程序实现滑动翻页效果源码附效果图
  2. 清华放大招!从初中生招起,8年时间培养到博士毕业!内卷也要加速了?
  3. The user does not exist or is not unique错误
  4. Linux 高性能服务器编程——socket选项
  5. 顺序表的插入删除查找遍历
  6. PHP中cookie和session
  7. 赶紧收藏!非常实用的 30 个 Python 技巧
  8. linux svn 拉取代码_svn快速入门指南
  9. 存储过程游标注意事项——表需要使用别名,如红色字体
  10. Oracle常用数据库操作SQL
  11. Python Series库Api整理
  12. python 内置变量
  13. elasticsearch 如何清理过期的数据
  14. 如何做杜邦线、XH线 制作方法
  15. 革命三部曲系列——《让子弹飞》的秘密,都在《邪不压正》里面
  16. 软考岗位设置与岗位描述
  17. [不变初心数(15分] 用数组存储不变的数最后对照即可
  18. 银行系统日终结算要多久_跨行转账,银行间是怎么清算的?什么时候使用央行的清算系统?...
  19. CentOS 6.7 源码搭建LNMP架构部署动态网站环境
  20. 服务客户的重要原则:“悦近来远”

热门文章

  1. svnadmin的使用
  2. 利用Netica训练简易贝叶斯网络模型【教程】
  3. Unity实时全局光照和烘焙全局光照 Unity2019
  4. ArcGIS打开shapefile失败:形状数与记录表数不一致
  5. 机器学习中数据集的划分
  6. 怎么用python下载网易云_使用Python实现下载网易云音乐的高清MV
  7. ActiveMQ菜鸟入门教程
  8. 常用键盘ASCⅡ码,方便查阅
  9. kt条件例题运筹学_运筹学讲解习题
  10. c语言ascii码16进制,C语言附录ASCII码表.doc