《软件工程》-期末复习(一)软件工程部分

本文介绍了软件工程的基础概念,包括软件的定义和特点,软件危机的产生原因,软件生命周期和过程模型,重点阐述了需求分析、UML图示和测试策略,涉及等价类划分和项目管理四要素,以及软件度量方法。初版于12.30,后续会不断更新和完善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近开始了软件工程的复习,其内容包含JAVA和软件工程两部分,这篇文章是软件工程的部分。

本篇文章仅作学习分享,如有谬误欢迎指正!

参考了很多校友的资料😭感激!

资料在仓库里,有需求的自取:HolasRep: Hola的资料分享仓库!  


12.30初版:基本内容已完成,部分内容来自于GPT(根据PPT不好归纳)。后续会对GPT的内容进行修正。并且,当前阶段有个很大的问题是不知道哪些东西需要严格地记住概念,哪些部分只需要掌握怎么做题就行,这几天会持续更新。 


第一章

1.软件的概念和特点

概念:

软件=程序+数据+文档

特点:
软件是开发的或者是工程化的,而不是制造的
软件生产是简单拷贝,而不是重复开发
软件产品易于多次修改,且总是要求修改
软件开发的环境对产品影响较大
软件开发的时间和工作量难以估计
软件开发进度难以客观衡量
软件的测试非常困难
软件不会磨损和老化,但会退化
软件维护不是简单更换元器件,变更容易产生新的问题 

2.软件危机的概念和产生原因

定义:
在计算机软件的开发和维护过程中所遇到的一系列严重问题。 (效率和质量下降)

 产生的原因:
客观:软件本身特点:逻辑部件、规模庞大
主观:不正确的开发方法:忽视需求分析、错误认为:软件开发=程序编写、轻视软件维护

3.软件工程的定义、三要素、应用软件工程的原因

定义:
IEEE计算机协会将软件工程定义为:(1)应用系统化的、学科化的、定量的方法,来开发、运行和维护软件,即,将工程应用到软件。(2)对(1)中各种方法的研究。

软件工程三要素:

方法、工具、过程

 应用软件工程的原因:

第二章

1.软件生命周期

定义:

软件产品或软件系统从设计、投入使用到被淘汰的全过程

2.软件过程概念

定义:

软件过程是在工作产品构建过程中,所需完成的活动、动作和任务的集合。

3.几种软件过程模型以及各自的优缺点

GPT的答案

软件过程模型优点缺点
瀑布模型

1.结构清晰,易于理解和管理

2. 适用于需求稳定的项目

3.易于控制和评估项目进展

1.需求变更困难

2.难以应对需求不明确或复杂的项目

3.高风险

增量模型

1.允许早期交付部分功能

2.更好地适应需求变更

3.缩短开发周期

1.集成和测试复杂性增加

2.需要明确定义增量之间的接口和集成策略

3.需要足够的技术能力和资源

原型模型

1.快速验证和演示概念

2.帮助理解需求和功能

3.反馈和修改成本低

1.原型与最终产品之间存在差异

2.可能忽视系统的内部结构和质量

3.需要客户积极参与

螺旋模型

1.强调风险管理

2.允许灵活性和迭代开发

3.适用于大型和复杂项目

1.技术能力和风险管理经验要求高

2. 项目管理和控制要求高

3.开发周期较长

敏捷模型

1.高度灵活

2.快速响应需求变更和客户反馈

3.强调团队合作和持续交付

4.鼓励客户参与,提高产品质量

5.通过迭代开发和持续集成提高产品质量。

1. 自组织和自我管理团队要求高

2. 需要客户积极参与和提供及时反馈

3. 需要良好的沟通和协作能力

第三章

1.需求分析的概念

概念:
确定系统必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前景。
换句话说需求就是以一种清晰、简洁、一致且无二义性的方式,对一个待开发系统中各个有意义方面的陈述的一个集合。

2.需求分析的过程

过程:

需求确认+需求变更
其中需求确认包括:

需求获取、需求提炼、需求描述、需求验证

3.需求确认的步骤

需求获取->需求提炼->需求描述->需求验证

4.需求分析三类建模

数据模型、功能模型、行为模型

(不知道数据流图需不需要写写,在这里标记一下) 

5.面向对象的需求分析过程中,三类模型各包含哪些内容?

看上面的表

数据模型:类图、类关系图

功能模型:用例图

行为模型:活动图、时序图、状态图

6.UML图类型有哪些

可以看看:什么是UML图?常见的UML图有哪些?

GPT的答案

  1. 类图(Class Diagram):描述系统中的类、接口、关系和属性等,用于表示系统的静态结构。

  2. 对象图(Object Diagram):展示类图中对象实例之间的关系,用于描述系统中的对象及其属性。

  3. 时序图(Sequence Diagram):描述对象之间的交互和消息传递顺序,用于表示系统中的动态行为。

  4. 协作图(Collaboration Diagram):展示对象之间的合作关系和交互,与时序图类似。

  5. 状态图(State Diagram):描述对象的状态和状态之间的转换,用于表示系统中的状态机。

  6. 活动图(Activity Diagram):展示系统中的业务流程、算法或操作的流程控制,用于表示系统中的行为和流程。

  7. 构件图(Component Diagram):描述系统中的组件、库和模块之间的关系,用于表示系统的物理结构和组织。

  8. 部署图(Deployment Diagram):表示系统的物理部署结构,描述软件和硬件之间的关系和配置。

  9. 包图(Package Diagram):展示系统中的包和包之间的关系,用于组织和管理系统的模块和组件。

  10. 用例图(Use Case Diagram):描述系统的功能需求和用户与系统之间的交互,用于表示系统的用例和参与者。

重点是:类图、用例图、活动图、时序图、状态图、

7.掌握用例图和活动图作法。泳道划分活动图、分支及汇合、分叉及合并

用例图:一分钟学会用例图_哔哩哔哩_bilibili

记住四种状态和箭头方向。

活动图:

手把手教你画活动图,再无难搞的流程分析 | 人人都是产品经理 
3 分钟学会 UML 活动图_哔哩哔哩_bilibili

 泳道图类似于对普通活动图的优化,便于更清晰地看到各个类的作用。

此外:

  1. 分支(Decision):分支用来表示在某个节点或活动中的决策点,多个不同的路径可以根据不同的条件进行选择。在活动图中,分支通常用菱形图形表示,每条分支路径上可以标注具体的条件。

  2. 汇合(Merge):汇合用来表示多个分支路径的汇集点,即不同路径上的活动会汇聚到同一个节点或活动中。在活动图中,汇合通常用带有多个输入箭头的圆形图形表示。

  3. 分叉(Fork):分叉用来表示在某个节点或活动中的并行处理,即多个活动可以同时进行。在活动图中,分叉通常用带有多个输出箭头的竖线图形表示。

  4. 合并(Join):合并用来表示并行处理的活动再次汇合到同一个节点或活动中。在活动图中,合并通常用带有多个输入箭头的竖线图形表示。

分支其实就是决策

分叉表示并行处理,这俩上面的视频里都讲了。


第四章

1.软件设计的概念

软件设计概念:
在[IEEE610.12-90]中,软件设计定义为软件系统或组件的架构、构件、接口和其他特性的定义过程及该过程的结果。 

2.与设计相关的八个概念

GPT的答案

  1. 抽象(Abstraction):

    • 定义: 抽象是将复杂系统的关键特征提取出来,忽略不必要的细节,以简化问题和提高理解的过程。
    • 作用: 通过抽象,设计者可以专注于系统的关键方面,提高可维护性和可扩展性,并促进设计的模块化。
  2. 体系结构(Architecture):

    • 定义: 体系结构是系统的基本结构和组织方式,包括组件、模块、数据流和交互。
    • 作用: 体系结构定义了系统的整体框架,有助于理清各组件之间的关系,确保系统的稳定性和性能。
  3. 设计模式(Design Patterns):

    • 定义: 设计模式是在特定上下文中可复用的解决问题的通用解决方案,是一种经验丰富的设计思想。
    • 作用: 使用设计模式可以加速设计过程,提高代码的可读性和可维护性,同时确保在特定情境下使用的最佳实践。
  4. 模块化(Modularity):

    • 定义: 模块化是将系统分解为相互独立、可独立开发和测试的模块或组件的过程。
    • 作用: 模块化简化了系统的复杂性,允许并行开发,提高代码的可重用性和可维护性。
  5. 信息隐藏(Information Hiding):

    • 定义: 信息隐藏是将模块内部的实现细节隐藏起来,只暴露必要的接口。
    • 作用: 信息隐藏增强了模块的独立性,降低了模块之间的耦合度,使系统更易于理解和修改。
  6. 功能独立(Functional Independence):

    • 定义: 功能独立是指系统中的不同功能单元相互独立,修改一个功能不应影响其他功能。
    • 作用: 通过实现功能独立性,可以降低系统的复杂性,提高系统的灵活性和可维护性。
  7. 精化(Refinement):

    • 定义: 精化是将高层次的抽象设计逐步细化为更为具体和详细的设计的过程。
    • 作用: 精化有助于逐步明确系统的细节,确保设计符合需求,并在开发过程中提供清晰的指导。
  8. 重构(Refactoring):

    • 定义: 重构是在不改变系统外部行为的前提下,对代码的内部结构和设计进行调整,以改善其质量。
    • 作用: 重构有助于消除代码中的坏味道(code smells),提高代码的可读性、可维护性和性能。

3.面向过程和面向对象的系统设计,各自包含哪些设计内容?

GPT的答案

面向过程的系统设计:

  1. 流程设计(Procedural Design):

    • 定义:强调解决问题的步骤和流程。
    • 内容:算法、流程图、数据流图等。
  2. 模块化设计(Modular Design):

    • 定义:将系统分解为独立的模块。
    • 内容:定义模块的功能、输入和输出,模块之间的调用关系。
  3. 顺序性设计(Sequential Design):

    • 定义:强调操作的顺序和执行流。
    • 内容:确定操作的执行顺序,关注数据流程。
  4. 层次化设计(Hierarchical Design):

    • 定义:按照层次结构组织系统组件。
    • 内容:划分层次,定义层次间的接口。
  5. 数据设计(Data Design):

    • 定义:定义数据结构和存储方式。
    • 内容:数据表、记录结构、文件设计。

面向对象的系统设计:

  1. 类设计(Class Design):

    • 定义:基于对象的概念,设计类和类之间的关系。
    • 内容:类的属性、方法,继承关系,关联关系。
  2. 对象设计(Object Design):

    • 定义:确定系统中的对象及其行为。
    • 内容:对象的属性、方法,对象之间的交互。
  3. 封装(Encapsulation):

    • 定义:将数据和方法封装在对象中。
    • 内容:定义公共接口,隐藏实现细节。
  4. 继承(Inheritance):

    • 定义:实现代码的重用和扩展。
    • 内容:定义类之间的继承关系,子类继承父类的属性和方法。
  5. 多态(Polymorphism):

    • 定义:同一操作在不同对象上具有不同的行为。
    • 内容:方法重载、方法覆盖,接口实现。
  6. 关联和聚合(Association and Aggregation):

    • 定义:描述对象之间的关系。
    • 内容:定义对象之间的关联关系,包括一对一、一对多等。
  7. 设计模式应用(Design Patterns):

    • 定义:采用通用解决方案来解决特定问题。
    • 内容:应用常见设计模式,如工厂模式、观察者模式等。
  8. 用例建模(Use Case Modeling):

    • 定义:定义系统的功能需求。
    • 内容:识别用例,描述用例的行为。

总体而言,面向过程的系统设计更注重流程、模块和数据的组织,而面向对象的系统设计更注重对象、类、继承和多态等概念的应用。在实际应用中,很多系统设计可能会结合两者的特点,使用面向对象的设计思想来构建模块化、可维护且可扩展的系统。

4.类图和顺序图画法

类图:

UML类图与顺序图_类图转化为顺序图-优快云博客

6 分钟学会 UML 类图_哔哩哔哩_bilibili

视频里讲的很好很全(ps:这个up的视频都很好),注意不同可见性以及类之间的关系的表示符号

关系包含:

泛化、实现、关联、依赖、组合和聚集。

顺序图:

5 分钟学会 UML 时序图(顺序图、序列图)_哔哩哔哩_bilibili

注意对象、生命线、返回消息、激活框(外部对象不用激活)、选择框

ps:感觉up的画图网站挺好用的(橘猫简图) 


第五章

1.软件质量的概念和关键点

概念:

明确表示是否符合功能和性能要求,明确地记载开发标准和所有
专业开发软件的期望的隐性特点

关键点:

符合明确规定的功能和性能要求
符合明确的开发标准
符合所有软件开发专业的共性、隐性标准,如易用性、可维护性等

2.测试策略V模型概念,测试与开发的各阶段对应关系。

对应关系:同一水平线上的相互对应 

3.单元测试的内容、集成测试的分类、系统测试的分类、验收测试的分类。

单元测试的内容(具体的这里没放):

集成测试的分类:

  •  自顶向下的集成方法
  • 自底向上的集成方法
  • SMOKE方法

系统测试的分类:

 黑盒测试

验收测试:

4.回归测试的概念

没找到。。

5.测试技术常见术语的概念:软件缺陷、验证和确认、测试与质量保证、质量与可靠性、调试与测试、测试用例

GPT的答案

  1. 软件缺陷(Software Defect):

    • 概念: 软件中的错误或问题,可能导致程序在特定条件下产生不正确的结果。
    • 说明: 缺陷是指程序代码或设计中的错误,通常需要修复以提高软件的质量。
  2. 验证与确认(Verification and Validation):

    • 概念: 验证是确认系统是否符合规格说明,而确认是确认系统是否满足最终用户的需求。
    • 说明: 验证主要关注构建过程,而确认关注系统交付给最终用户后的验证。
  3. 测试与质量保证(Testing and Quality Assurance):

    • 概念: 测试是通过执行系统来发现软件缺陷的过程,而质量保证是一系列过程和活动,旨在确保软件满足预期的质量标准。
    • 说明: 测试是质量保证的一个组成部分,而质量保证包括整个软件开发周期中的各种活动,以确保最终交付的产品质量。
  4. 质量与可靠性(Quality and Reliability):

    • 概念: 质量是软件满足规格和用户需求的程度,而可靠性是系统在一段时间内能够正常工作的概率。
    • 说明: 质量关注软件的特征,而可靠性关注软件的稳定性和可靠程度。
  5. 调试与测试(Debugging and Testing):

    • 概念: 调试是识别和修复已知或潜在的缺陷的过程,而测试是通过执行软件以发现新的缺陷。
    • 说明: 调试通常在编码阶段进行,而测试可以在不同阶段执行,包括单元测试、集成测试和系统测试。
  6. 测试用例(Test Case):

    • 概念: 一组输入、执行条件和预期结果,用于验证程序在特定条件下的正确性。
    • 说明: 测试用例是测试的基本单位,通过执行测试用例可以评估软件在不同情况下的行为。

6.白盒测试、黑盒测试、静态分析各有哪些方法?

有点懵,看着PPT不知道咋概括

白盒测试:

黑盒测试(GPT的答案):

  1. 等价类划分(Equivalence Partitioning):

    • 方法: 将输入划分为不同的等价类,从每个等价类中选择测试用例。
    • 目的: 通过测试一组代表性的输入,验证系统对每个等价类的处理能力。
  2. 边界值分析(Boundary Value Analysis):

    • 方法: 测试输入的边界值,包括最小值、最大值和中间值。
    • 目的: 验证系统在输入边界处的行为,通常这些边界值是导致错误的关键点。
  3. 错误推测(Error Guessing):

    • 方法: 基于经验和直觉推测可能存在的错误,并设计相应的测试用例。
    • 目的: 利用测试人员的经验来发现潜在的问题,尤其是在规格说明不完整的情况下。
  4. 状态转换测试(State Transition Testing):

    • 方法: 针对系统中的状态进行测试,关注状态之间的转换。
    • 目的: 验证系统在不同状态下的行为,尤其是状态切换时的正确性。

静态分析法:

7.掌握等价类划分测试方法。(有效等价类和无效等价类划分、对应测试用例的设计)

看了这个就会了:【软件工程】四分钟搞定黑盒测试等价划分法_哔哩哔哩_bilibili


第六章

1.项目管理四要素:人员、产品、项目、过程(概念)

人员:
招聘、选拔、绩效管理、培训、薪酬、职业发展、组织和工作设计、团队/文化的发展
产品:
策划一个项目以前,应当建立产品的目标和范围,考虑可选的解决方案
项目:
理解成功项目管理的关键因素,掌握项目计划、监控和控制的一般方法
过程:
软件过程提供一个框架,在此框架下可以制定项目开发的综合计划。

2.软件度量有哪些方法

生产率估计(基于规模(KLOC)、基于功能点(FP))、工作量度量(算法成本模型、COCOMO模型)。


总结

12.30初版,后续会有很多更正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值