目录

软件工程期末复习总结通俗易懂,学不会来打我

目录

【软件工程】期末复习总结(通俗易懂,学不会来打我)

【软件工程】期末复习总结(通俗易懂,学不会来打我)

第一章

1.1 软件工程的发展历程

1.1.1 软件危机(日子没法过了)

软件危机 (Software Crisis)是指在计算机软件开发、运行、维护和管理过程中所遇到的一系列严重问题。(木星危机,太阳氦闪危机)

1)软件开发 进度和成本 难以控制(不能科学估算)

2)软件开发难以满足用户的 需求 (不是要什么给什么)

3)软件 质量 难以保证(降落伞打不开的宇航员)

4)软件产品难以 维护 (维护成本不断上升,维护难度不断增加

1.1.2 软件危机出现的原因

产生软件危机的主要原因有:

(1)软件开发缺乏正确的 理论指导 ;软件本身属性、需要有限条件多人分工高质量产出

(2)软件人员与用户 缺乏充分交流 ;了解但难以描述需求、知识背景有别、曲解需求

(3)对软件开发过程 缺乏整体认识 ;经验未沉淀总结、忽视文档管理、不重视测试…(重实现)

(4)软件产品缺乏有效一致的质量评价标准。

1.2 软件工程的概念

1.2.1 软件工程的定义

软件工程是把 系统的、规范的、可度量 的途径应用于软件开发、运行和维护的全过程,以及对上述方法的研究。(IEEE-1993) (整体、有规范、各个过程可以度量)

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

1.3 软件与软件过程

1.3.1 软件和软件的组成

软件是计算机中与硬件相互依存的另一部分,它包括 程序、数据以及相关文档

软件=程序+数据+文档+知识

软件自身的特点

  • 逻辑实体而非物理实体
  • 智力产品,生成过程主要集中在研发上
  • 永不磨损,会蜕化直至被放弃使用
  • 软件开发远未达到软件工程目标提及的产业化生产
  • 软件规模和内容越来越复杂

https://i-blog.csdnimg.cn/blog_migrate/cf1e9d9903b69b6c89e139059c3d7bf8.png

1.3 软件与软件过程

生命周期是从需求开始到软件不再使用的全阶段

https://i-blog.csdnimg.cn/blog_migrate/7d509fbceb72f5736ac2d8c45882639f.png

1.4 软件过程模型

https://i-blog.csdnimg.cn/blog_migrate/5a02cf677962e6380b6cee2d93f006c6.png

https://i-blog.csdnimg.cn/blog_migrate/36ba69935d0d07242e4d1f2bf85598c2.png

1.阶段间具有顺序性和依赖性。

2.推迟实现的观点。

3.每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。

传统的瀑布模型过于理想化。事实上,人在工作过程中不可能不犯错误。

在设计阶段可能发生规格说明文档中的错误。

而设计上的缺陷或错误可能在实现过程中显现出来。

在综合测试阶段将发现需求分析、设计或编码阶段的许多错误。

https://i-blog.csdnimg.cn/blog_migrate/28c8aa71fa96ba6dc14ca03bc27b0fb1.png

https://i-blog.csdnimg.cn/blog_migrate/1ae64e7d66a0d3f0c838774f3e379eae.png

1.4.3 增量模型

https://i-blog.csdnimg.cn/blog_migrate/52108051eb4da1ba3b876aebe7f73636.png

https://i-blog.csdnimg.cn/blog_migrate/909f2d179609683acbf3f4bf5976d378.png

1.4.4 螺旋模型 (Spiral Model)

软件风险 是任何软件开发项目中都普遍存在的实际问题,项目越大,软件越复杂,承担该项目所冒的风险也越大。

https://i-blog.csdnimg.cn/blog_migrate/2d55e962272313e836e658b7818394f7.png

1.4.5 敏捷模型 (Spiral Model)

https://i-blog.csdnimg.cn/blog_migrate/d39fb0e8856784b57e8a85a33667ddcc.png

https://i-blog.csdnimg.cn/blog_migrate/26b04b4b47b16881bc9deb97b5409fdb.png

📢📢1.4.9 软件过程模型的比较(敲黑板)

https://i-blog.csdnimg.cn/blog_migrate/9e02d89f1acf6da1dc56aa121080288d.png

第二章

2.1 软件需求的基本概念

https://i-blog.csdnimg.cn/blog_migrate/2670f5257bb0039e93700bdbe68d1c11.png

2.2可行性分析的内容

https://i-blog.csdnimg.cn/blog_migrate/54e8852ae5bdc84f6f124274074146ba.png

  • 经济可行性研究: 联想董事长说过:没钱赚的事我们不干,有钱赚但是投不起钱的事不干,有钱干也投的起钱但没有可靠的人选这样的事也不敢
  • 操作可行性研究: 通过对用户流程的操作分析,既能城区需求中的模糊概念,又能明确需求中功能间的相互关系

2.3需求分析的内容

https://i-blog.csdnimg.cn/blog_migrate/10e532f7708a9c39adbd3419bba33722.png

2.4需求工程的过程

https://i-blog.csdnimg.cn/blog_migrate/64436085c113aed32545200f70ae54c7.png

看看即可

https://i-blog.csdnimg.cn/blog_migrate/d52832aa6fa620df00856c62f27e65ef.png

2.4需求获取技术

https://i-blog.csdnimg.cn/blog_migrate/0743c96e1568910c33a23ca997c290b9.png

  • 个别会谈和小组会议:参与人员有分析员、用户、系统领域专家。开会前拟定谈话提纲和会谈内容。
  • 问卷调查:面向用例的场景分析:实际观察用户的实际操作过程,分析员能体验用户在工作中遇到的不便和困难
  • 快速原型法:让用户尽早的接触系统,指出不足并给出意见

2.5结构化需求分析与建模

https://i-blog.csdnimg.cn/blog_migrate/a4eab4a0da1189f7f25258f9adf7c061.png

https://i-blog.csdnimg.cn/blog_migrate/b55b18343b563722fb9ea96b7a12b043.png

2.5.1面向数据的数据建模

https://i-blog.csdnimg.cn/blog_migrate/611ce168be2cd8130f9c766e63a1bf6e.png

3.1.1 软件设计与软件需求

https://i-blog.csdnimg.cn/blog_migrate/d15aa28effd1944714cbf3e23155a67b.png

3.1.2 软件设计的任务

https://i-blog.csdnimg.cn/blog_migrate/774427747e955c3338b0c6e75d73c6b7.png

3.2.3 客户端/服务器模式的分布式结构

https://i-blog.csdnimg.cn/blog_migrate/ebed8ac7b2274200471ddced585f8752.png

3.3 模块化设计

https://i-blog.csdnimg.cn/blog_migrate/1045ddbd2394252fd102949119a3aeb2.png

3.3.4 模块独立性

高内聚低耦合

https://i-blog.csdnimg.cn/blog_migrate/53700ebe6f107d0bc8dfcaec132680c6.png

https://i-blog.csdnimg.cn/blog_migrate/ebe701bf899ac64c5efb229438fa2686.png

https://i-blog.csdnimg.cn/blog_migrate/51101dd715b516a58a9f80eebeeca5e7.png

4.1结构化设计方法概述

https://i-blog.csdnimg.cn/blog_migrate/3d759c080d3de2bed6205410e3b7e27c.png

面向数据流的设计过程

https://i-blog.csdnimg.cn/blog_migrate/fe9ad704f21f8b7b2bdb446d78a8509f.png

第五章

5.1技术特性

https://i-blog.csdnimg.cn/blog_migrate/cff21b8552215bbca19921b9708a2593.png

5.2 程序设计风格

https://i-blog.csdnimg.cn/blog_migrate/7d04483c9f3a0b7fc105b672c725a813.png

https://i-blog.csdnimg.cn/blog_migrate/cbf89c157d7f731c23d354ef2a50d337.png

5.3 什么是软件测试?

https://i-blog.csdnimg.cn/blog_migrate/b0f46f350231063abbeae147e4f878ac.png

IEEE对软件测试的定义:使用 人工或自动手段 来运行或测试被测试软件的过程,其目的在于检验它是否 满足规定 的需求并弄 清预期结果与实际结果 之间的差别。

5.4 软件测试基础-术语解释

https://i-blog.csdnimg.cn/blog_migrate/6db28ee264feb683b7384e924ddb0951.png

5.5 测试用例的重要性

5.6 软件测试原则

https://i-blog.csdnimg.cn/blog_migrate/444ead120394ba97a2d5151c49fcb452.png

https://i-blog.csdnimg.cn/blog_migrate/b3282ac678d8777acf419aec44af030f.png

5.7 测试过程

https://i-blog.csdnimg.cn/blog_migrate/79b0a1a364707e760958c0ea92e2c126.png

https://i-blog.csdnimg.cn/blog_migrate/d1102467ca8270c95aa15384d3e5c009.png

5.8 软件测试技术分类

https://i-blog.csdnimg.cn/blog_migrate/98ae26b920ab9c50e00f620936dab0a5.png

5.9 白盒测试

https://i-blog.csdnimg.cn/blog_migrate/6ba4a7f9d6e97796f6b636d95633283f.png

https://i-blog.csdnimg.cn/blog_migrate/8b5ac37f8145de3ee663929cdd0cd269.png

https://i-blog.csdnimg.cn/blog_migrate/53ef6949455e7bcb185b24bd185a17f6.png

(一)、逻辑覆盖

https://i-blog.csdnimg.cn/blog_migrate/47008e6485fac288359234b8594c1c96.png

(二)、语句覆盖

https://i-blog.csdnimg.cn/blog_migrate/66ba06f267b34f5cc103b0fd818a60d6.png

(三)、分支覆盖

https://i-blog.csdnimg.cn/blog_migrate/0433624e7838dd21d76bda151ef8d93a.png

(四)、条件覆盖

https://i-blog.csdnimg.cn/blog_migrate/7a742f8835763d8626470f554ac3ab14.png

(五)、条件组合覆盖

https://i-blog.csdnimg.cn/blog_migrate/95317225deded47feb71dedd7ab15984.png

(六)、路径覆盖

https://i-blog.csdnimg.cn/blog_migrate/c6ff5e1ca7872c4da6178da95f2b8809.png

6.0 黑盒测试

https://i-blog.csdnimg.cn/blog_migrate/9e64519950e8b1873b1e3c6b66eba244.png

6.1边界值分析

边界值分析法是对等价分类技术的补充,即在一个等价类中不是任选一个元素作为此等价类的代表进行测试,而是 选择此等价类边界上的值。

首先确定边界情况。通 常输入或输出等价类的边界就是应该着重测试的边界情况。

选取正好 等于、刚刚大于或刚刚小于 边界的值作为测试数据,而不是选取等价类中的典型值或任意值。

https://i-blog.csdnimg.cn/blog_migrate/79d7ed719d9e69d05a13648eb88ac471.png

实践表明: 大多数故障往往发生在输入定义域或输出值域的边界上,而不是在其内部 因此,针对各种边界情况设计测试用例,通常会取得很好的测试效果。

6.2软件测试策略

https://i-blog.csdnimg.cn/blog_migrate/0f595a0c37ac7ed9f3444f9cbf4c20f8.png

6.2.1集成测试策略

https://i-blog.csdnimg.cn/blog_migrate/ef041f9694716c3dc79a84db005aafb7.png

6.2.2渐增式集成

https://i-blog.csdnimg.cn/blog_migrate/a7df44c6932aad1d34a8f2daf94b61b3.png

https://i-blog.csdnimg.cn/blog_migrate/3a231f96573364834abc4038dbc67f55.png

https://i-blog.csdnimg.cn/blog_migrate/d522fe1af5a3e57a3faf5dd37bed4c9a.png

6.3驱动模块与桩模块

驱动模块 :用以模拟被测模块的上级模块,在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块并打印出相应的结果。

https://i-blog.csdnimg.cn/blog_migrate/c8ef42c2ef844c74ac507fd74d18ba9e.png

桩模块 :用以模拟被测模块工作过程中所调用的模块,它由被测模块调用,以便于检验被测模块与其下级模块的接口。

单元测试、集成测试与系统测试

https://i-blog.csdnimg.cn/blog_migrate/29587c6310ff595c0ff25aa9c348a70d.png

第七章

7.1 UML的产生

https://i-blog.csdnimg.cn/blog_migrate/fdc4b9e974cc69a2707f4dcd105ecd6b.png

📢📢📢7.4.1 用例图(出大题)P57-61出大题

https://i-blog.csdnimg.cn/blog_migrate/3260994a744bf9f7a6abff3f801a85fa.png

https://i-blog.csdnimg.cn/blog_migrate/b6844c7579c445c52337efe91acac50c.png

https://i-blog.csdnimg.cn/blog_migrate/52b9a95a6f6c8c04872d676ee6c91a59.png

https://i-blog.csdnimg.cn/blog_migrate/6538b984698dc57169d7a6776ea0eaee.png

https://i-blog.csdnimg.cn/blog_migrate/13811f9fae0abcc35f84696b7020c7b1.png

https://i-blog.csdnimg.cn/blog_migrate/be61d92bb1b5aa7ca90b66c1f59e84ea.png

https://i-blog.csdnimg.cn/blog_migrate/cb2b87473cc1c6f90853413e73517256.png

第八章 面向对象的特点

对面向对象分析(OOA) 阶段的描述,体现了信息域对问题域的直接映射,符合人们认识客观世界的思维方式,利于用户的理解和沟通,避免因分析员的误解而造成后续的错误。

https://i-blog.csdnimg.cn/blog_migrate/7285cc6693e98073978c2e02ab8a17da.png

8.1面向对象的特点

https://i-blog.csdnimg.cn/blog_migrate/36743b15e47732e21f82252a0cc2c281.png

https://i-blog.csdnimg.cn/blog_migrate/536a01dcaf5d8638c7e980c656e2c774.png

8.2两种开发方法建模对比

https://i-blog.csdnimg.cn/blog_migrate/f851c6b28c69a34ffa3007d2bf2b2be0.png

2.建立功能模型–建模过程

用文字信息详细描述用例的内容,它是对用例的有益补充。

3.建立静态模型-建立静态模型的过程

https://i-blog.csdnimg.cn/blog_migrate/2ab9a2d92fff8c9c1e33f3c24b6fdfe3.png

https://i-blog.csdnimg.cn/blog_migrate/6f2ded94fe28c99d14ae5ac215b7d6a4.png

https://i-blog.csdnimg.cn/blog_migrate/a1a2c7ce6236b1a5f994e79784d00f10.png

https://i-blog.csdnimg.cn/blog_migrate/fdad517856e0eeb829f17a69960a36cb.png

https://i-blog.csdnimg.cn/blog_migrate/0baa5f98c09dbc52bb047309241edee3.png

https://i-blog.csdnimg.cn/blog_migrate/9fda9a731f1a86feca4f075d3d0adc98.png

第九章 项目风险管理

软件风险概念:风险不同于软件工程过程中的其它事件,它有其自身的特点:

⑴ 可能性。项目风险是将来要发生的事情。虽然可以采取措施避免或减低风险发生所导致的损失, 但完全消除项目风险是不太可能的

⑵ 偶然性。首先,软件项目,特别是有较强领域特征的软件应用项目,是一次特定的开发过程,其产生的风险属于个别事件,有很大的不确定性。其次,软件开发的智力活动产生的风险难以预料和控制,并且人员受环境、心理、任务等因素的影响较大,更增加风险发生的偶然性。 疫情、核心骨干打球崴脚了。

⑶ 复杂性。软件项目各部分间的非线性关系,其复杂度远远超过由少数几人就能掌握的程度,需要通过有效的技术分解和团队式管理才能胜任。

⑷ 需求的变动。需求的不断变化,导致软件项目过程的不断变化, 风险平衡状态 的出现是动态而短暂的,但其造成的后果可能是严重的,甚至是灾难性的。

📢📢📢 最后的最后

(一)、UML题目练习

某教育公司决定开发一个管理所有客户信息的交互式网络系统。系统的功能如下:

(1)浏览客户信息:任何使用Internet的网络用户都可以浏览公司所有的客户信息(包括 姓名、住址、电话号码等)。

(2)登录:公司授予每个客户一个帐号。拥有授权帐号的客户,可以使用系统提供的页面 设置个人密码,并使用该帐号和密码向系统注册。

(3)修改个人信息:客户向系统注册后,可以发送电子邮件或者使用系统提供的页面,对个人 信息进行修改。

(4)删除客户信息:只有公司的管理人员才能删除不再接受公司服务的客户的信息。 系统采用面向对象方法进行开发。

【问题1】

在需求分析阶段,采用UML的用例图描述系统功能需求,如下图所示。请指出图中的A、B、 C和D分别是哪个用例?

https://i-blog.csdnimg.cn/blog_migrate/35b7d01a9426883e2c2587227389c5eb.png

【问题2】类的关联关系中关联的直线两端标明重数,例如:例如,图中的类网络用户和客户信息表,网络用户端的“0…*”表示:一个客户信息表的实例可以与0个或多个网络用户的实例相关联。 请指出图中(1)到(4)处的值分别为多少?

https://i-blog.csdnimg.cn/blog_migrate/da166f86addeaa4189fd7a70ff521e3e.png

【问题3】类通常不会单独存在,因此当对系统建模时,不仅要识别出类,还必须对类之间的相互关系建模。在本题中,提供了三种关系:泛化关系、聚合关系、关联关系。请分别说明这三种关系的含义,并说明关联关系和聚合关系之间的主要区别。

泛化关系 :也可以视为继承,表示类与类(或者接口与接口) 之间的父子关系。

关联关系 :是类和类之间最常见的关系。即一个类的对象和另外一个类有联系。关联表示类与类之间的连接,它使一个类知道另一个类的属性和方法。

聚合关系 :聚合是整体与部分的关系,但个体有独立的生命周期。

关联关系和聚合关系之间的主要区别:聚合是一种特殊的关联,它表示整体/部分关系。

(二)、面向对象的特点

  1. 对面向对象分析(OOA)阶段的描述,体现了信息域对问题域的直接映射,符合人们认识客观世界的思维方式,利于用户的理解和沟通,避免因分析员的误解而造成后续的错误。
  2. 对软件系统分析、设计和实现综合考虑,使用前后一致的UML图形模型元素,确保了软件系统的开发过程在方法、工具上的一致性和连续性。
  3. 将面向对象分析、设计、编程有机结合在一起,各阶段间没有明显界线,实现从分析到实现的自然过渡,有利于增加系统的稳定性。
  4. 面向对象具有良好的重用性特征,确保了软件质量和可靠性。

(三)、面向对象分析

面向对象分析(Object-Oriented Analysis,OOA)是以 对象 为基础,以 面向对象方法学 为指导,分析用户需求,并最终建立问题域模型的过程。

OOA模型由3类独立模型构成: 功能模型、静态模型和动态模型。

https://i-blog.csdnimg.cn/blog_migrate/a16e962c775b163883b14806a178123b.png

(四)、建立模型(3类模型)

https://i-blog.csdnimg.cn/blog_migrate/fc787b16d040ac0bf6aadc554a8b3a2f.png

https://i-blog.csdnimg.cn/blog_migrate/79e82c00ea26e92c7f4b413961f6864b.png

https://i-blog.csdnimg.cn/blog_migrate/5bff05488f36bf0e3b276a86e374e8ef.png

(五)、面向对象模型和结构化模型的对比

https://i-blog.csdnimg.cn/blog_migrate/464ed66e123d69a26197c0334e50a559.png

(六)、面向对象设计

https://i-blog.csdnimg.cn/blog_migrate/20c27489df84592d60518f8455b20c67.png

(七)、小题检测

https://i-blog.csdnimg.cn/blog_migrate/882d79a195318ac9d173bb304fdd78e5.png

(八)、面向对象设计原则和目标

面向对象设计原则

https://i-blog.csdnimg.cn/blog_migrate/1dab86c368c2e6e872ee9a79ab8a0e44.png

面向对象设计目标

https://i-blog.csdnimg.cn/blog_migrate/61d8c22a6b899d6d4db3030cddedab7b.png

https://i-blog.csdnimg.cn/blog_migrate/14898ef7f120d59b3521ff7625859790.png

祝大家顺利通过考试,加油加油加油!!!