软件工程
侧边栏壁纸
  • 累计撰写 24 篇文章
  • 累计收到 23 条评论

软件工程

晨旭不想写程序
2024-12-21 / 1 评论 / 26 阅读 / 正在检测是否收录...

什么是软件?

软件不是程序 而是程序 数据以及开发、使用和维护程序需要的所有文档的完整集合

可以写作为 软件 = 程序+数据+文档

程序是实现设计好的功能和性能要求执行的指令序列

数据是指程序能正常处理信息的数据和数据结构

文档是与程序运行和维护有关的图文资料

软件生存周期

软件也有一个孕育 诞生 成长 成熟 衰亡的生存过程

我们称其为计算机软件的生存周期

软件生存周期是借用工程中产品生存周期的概念而得来的,是指某一软件项目被提出来并着手实现开始直到该软件报废或停止使用为止

可分为若干阶段

  • 计划时期

  1. 问题定义

  2. 可行性研究

主要任务是调查和分析
  • 开发时期

  1. 需求分析

  2. 概要设计

  3. 详细设计

  4. 编码

  5. 测试

  • 运行时期

软件开发模型

模型是为了理解事物而对事物做出的一种抽象

软件开发模型就是为整个软件建立的模型

瀑布模型

也称生存周期模型或线性顺序模型

瀑布模型将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型,包括问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和维护。

快速原型模型

首先快速建立一个能够反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践让用户了解未来目标系统的概貌,以便判断哪些功能是符合需要的,哪些方面需要改进,用户会提出许多改进意见

增量模型

增量模型也称为渐增模型,是瀑布模型的顺序特征和快速原型法的迭代特征相结合的产物,是一种非整体开发的模型

软件在模型中是“逐渐”开发出来的把软件产品作为一系列的增量构件来设计、编码、组装和测试。每个构件由多个相互作用的模型构成,并且能够完成特定的功能。开发出一部分,向用户展示一部分,可让用户及早看到部分软件,及早发现问题

螺旋模型

加入了瀑布模型与增量模型都忽略了的风险分析,即将两种模型结合起来,弥补了两种模型的不足。它是一种风险驱动的模型

成本-效益分析

成本效益分析的目的是从经济角度评价开发一个新的软件项目是否可行。

系统成本包括开发成本和运行维护成本

系统效益包括有形的经济效益和无形的社会效益两种

通常使用利率的形式表示货币的时间价值 假设年利率为i,如果现在存入P元,则n年后可得到的钱数为F

image-20241220205307645

例题:

image-20241220205338210

投资回收期:使累计的经济效益等于最初的投资费用所需要的时间

纯收入:就是在整个生存周期之内系统的累计经济效益(折合成现在值)与投资之差

可行性分析的目的和任务

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

可行性研究的任务是,首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,分析几种可能解法的利弊,从而判定原定系统的目标和规模是否现实,系统完成后带来的效益是否大到值得投资开发这个系统的程度

包括方面:经济可行性、技术可行性、操作可行性和法律可行

什么是需求分析 解决什么问题

是软件开发期的第一个阶段,

解决的基本任务是准确地回答系统必须做什么?这个问题

需求分析的任务不是确定系统怎样完成他的工作

谁负责需求分析

需求分析规则说明书包括什么?

需求分析员编写需求规格说明书

需求规格说明书明确定义目标系统的需求、系统构成及有关的接口

需求说明相当于用户与开发者之间的一份技术合同,是测试验收阶段对软件进行确认和验收的基准

什么是数据流图?

数据流图 :一种用于描述“分解”的结构化建模工具,是一种图形化技术,用于表示系统逻辑模型,它以直观的图形清晰地描述了系统数据的流动和处理过程。是分析员与用户之间极好的通信工具。

数据流图的源点或者终点,通常是系统外的实体 可以是人、物或其他软件系统;一般只出现在出现在数据流图的顶层图中

加工是对数据进行处理的单元,一个处理框可以代表一系列程序、单个程序或程序的一个模块

数据流是传播的路径

数据存储用来存储数据,可以表示一个条件、文件的一部分、数据库的元素或者记录的一部分

画DFD的四种基本符号

image-20241221150822704

画数据流图要注意什么

image-20241220224011700

注意事项

image-20241221150007709

例题

image-20241221150123730

给一个需求描述 如何画出数据流图

看视频学会画图

第三章PPT中的60页,有多个例题

E-R基本要素(不画)

实体联系图

基本要素:实体型 属性 联系

表示的方法为 数据对象(实体) 联系 属性

给一段伪代码(if else) 用判定树判定表把代码重新翻译

判定树

image-20241221153412953

判定表

image-20241221153148416

例子

若年交易额4万元以上,且最近3个月无欠款的顾客,可享受10%的折扣

若近3个月有欠款,是本公司5年以上老顾客,可享受5%的折扣

若不是老顾客,只有2%的折扣;年订货量不足4万元者无折扣

image-20241221153446190

image-20241221153458870

如何度量模块的独立性

两方面

耦合

衡量不同模块彼此间相互依赖的紧密程度。耦合要低,即每个模块和其他模块之间的关系要简单。

无直接耦合 数据耦合 标记耦合

数据耦合是理想的目标 维护更容易对一个模块的修改不会使另一个模块产生退化错误

image-20241221161412942

内聚

衡量一个模块内部各个元素之间彼此结合的紧密程度的度量。 内聚要高,每个模块完成一个相对独立的特定子功能。

深度宽度扇入扇出

深度:软件结构中模块的层数,它表示控制的层数,在一定意义能粗略地反映系统的规模和复杂程度

宽度:同一层次上模块的最大个数

扇出:是一个模块直接调用的模块数目。经验证明,好的系统结构的平均扇出数一般是3-4,不能超过5-9

扇入:有多少个上级模块直接调用它

一般设计的比较好的软件结构 顶层扇出高 中层扇出较少 底层模块有高扇入

总体设计说明书

总体设计阶段产生的文档是总体设计说明书,它既是详细设计、编码的基础,也是进行测试的依据之一

image-20241221161556663

image-20241221161619926

程序的三种基本结构

任何程序逻辑都可用顺序、选择和循环等三种基本结构

详细设计的任务是什么 关键

  1. 确定每个模块所采用的算法
  2. 确定每个模块所使用的数据结构
  3. 确定每个模块的接口细节
  4. 为每个模块设计出一组测试用例

关键技术是结构化程序设计

用到的图形化工具

程序流程图、盒图和问题分析图(PAD)等

给一段伪代码 画N-S盒图和PAD图

盒图 N-S图

image-20241221162605367

只能从上面盒子进 下面走出

盒子中可以进行嵌套

每个处理步骤都是用一个盒子表示的

问题分析图 PAD图

image-20241221164115822

什么是软件测试

软件测试是保证软件质量的关键,它是对需求分析、设计和编码的最终复审

黑盒测试 包括那些测试方法

黑盒法是把测试对象看作一个黑盒,测试时完全不考虑程序的内部的逻辑结构与内部特性,只需根据需求规格说明书,测试程序的功能或程序的外部特性

包括等价分类法 边值分类法 错误推测法

测试基本过程 每步任务是什么

单元测试

模块接口测试 模块局部数据结构 模块出错处理通路测试 模块中重要的执行路径测试 模块边界条件测试

集成测试

在装配的过程中对组装的模块进行测试,主要目标是发现与接口有关的问题

确认测试

验证系统的功能、性能等特性是否符合 需求规格说明

文档资料是否正确、完整

系统的可移植性、兼容性、错误的恢复能力和易维护性是否满足

系统测试

与系统中的硬件、外部设备、支持软件、数据及操作人员结合起来,在实际运行环境下对计算机系统进行一系列的严格有效的测试来发现软件的潜在问题,以保证各组成部分不仅单独的正常运行,而且在系统各部分统一协调下也能正常运行

静态测试

被测程序不在机器上运行,对模块的源代码进行研读,查找错误或收集一些度量数据,采用人工检测和计算机辅助静态分析手段对程序进行检测,只进行特性分析

动态测试

通过运行程序发现错误,一般所讲的测试大多是指动态测试

同测试任何产品一样

设计测试样例 白盒测试

以程序的结构为依据,被测对象基本上是源程序,以程序的内部逻辑结构为基础设计测试用例

给一段流程图 设计用例

语句覆盖

运行被测程序,使得每个语句至少都能被执行一次

image-20241221210312669

判定覆盖

不仅每个语句执行一次,每个判定的分支都至少执行一次

image-20241221210445405

image-20241221210500143

条件覆盖

不仅每个语句至少执行一次 而且使判定表达式中的每个条件都取到各种可能的结果

image-20241221210643622

判定/条件覆盖

同时满足判定覆盖和条件覆盖

image-20241221210953568

条件组合覆盖

选取足够多的测试数据 使得每个判定表达式中条件的各种可能组合都至少出现一次

为什么要进行软件维护

为了改正软件运行错误,或者因满足新的需求而加入新功能的修改软件的过程

基本流程

维护工作的流程

主要步骤包括

  1. 建立维护机构
  2. 编写软件维护申请报告
  3. 确定软件维护工作流程
  4. 整理软件维护文档
  5. 评价软件维护性能

种类

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

面向对象的软件工程是什么?

是面向对象方法在软件工程领域的全面应用

与传统的基于结构化的软件工程有什么不同?

优点:

与人类思维习惯一致

软件稳定性好:当系统的功能需求发生变化时,仅需要做一些局部性的修改

可重用性好

容易开发大型软件产品:把一个大型系统分解成相互独立的小系统来处理,便于团队协作和过程管理

可维护性好、易于测试

不足:

与面向过程语言相比,要写更多的代码

占用空间比较多,程序效率比较低

创建对象实例的过程往往比较耗时

对系统动态特征表述不充分,且反应系统整体功能特征的能力较差

面相对象方法学的四大特性(抽象、封装、继承和多态)在一定程度上避免了不合理的操作,并有效阻止了错误的扩散,但加大了测试的难度

用例之间的关系 四种

包含关系

扩展关系

泛化关系

使用关系

UML图中 动态行为模型通常用的那些图建模 分别用在哪些场景

  1. 建立顺序图
  2. 建立通信图
  3. 建立状态图
  4. 建立活动图

顺序图显示参与者如何采用若干顺序步骤与系统对象交互的模型

通信图描述类(对象)之间的关联及其彼此之间的消息通信

状态图

活动图

3

评论 (1)

取消
  1. 头像
    王泽宇
    Windows 10 · Google Chrome

    Warning: Trying to access array offset on value of type null in /www/wwwroot/aaaieee.cn/usr/themes/Joe-master/core/function.php on line 261
    @

    一坨

    回复