软件工程考试复习

第一章、软件工程概述

🌟软件=程序+数据+文档(考点)

🌟计算机程序及其说明程序的各种文档称为 ( 文件 ) 。计算任务的处理对象和处理规则的描述称为 (  程序 )。有关计算机程序功能、设计、编制、使用的文字或图形资料称为 ( 文档 ) 。

🌟软件与物质产品有很大的区别,软件是一种( 逻辑 )产品。

💯软件按功能划分可以分为:

系统软件

  • BI0S(基本输入输出系统)
  • Windows操作系统
  • 设备驱动程序

支撑软件

  • 软件开发环境
  • 数据库管理系统
  • 网络软件

应用软件

软件工程(1968年)方法学包含三个元素:🌟方法,工具和过程(考点)

  1. 方法是软件完成软件开发的各项任务的技术方法,
  2. 工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;
  3. 过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

🌟软件工程的出现主要是由于软件危机的出现(考点)

🌟软件工程的出现是为了解决生成工程化的问题(考点)

目前最广泛使用的软件工程方法学是,传统方法学和面向对象方法学。

传统方法学:传统方法学又称生命周期方法学或结构化范型。一个软件从开始计划起,到废弃不用止,称为软件的生命周期。在传统的软件工程方法中,软件的生存周期分为🌟问题定义、需求分析、总体设计、详细设计、编程和测试几个阶段。

优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作; 促进了软件重用。

缺点:不能适应事务变化的要求;开发周期长;当软件规模庞大时,使用传统方法学开发往往不成功,此外使用传统方法学开发出的软件难以维护。

面向对象方法学:(强调的是对象的数据结构)

优点:

1、易维护

采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。

2、质量高

在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。

3、效率高

在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。

4、易扩展

由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

1.软件生命周期:

软件生存期:🌟三个阶段软件定义期、软件开发期、运行维护期(考点)

软件定义时期:问题定义,可行性研究和需求分析。

💯问题定义:要解决的问题是什么

可行性研究:对于上一个阶段所确定的问题有行得通的解决办法吗?

需求分析:确定目标系统必须具备哪些功能

开发时期:总体设计,详细设计,编码和单元测试,综合测试

💯总体设计:又称为概要设计,从各种设计方案中选出最佳方案,制定出最佳方案的详细设计计划,设计软件的体系结构,确定程序模块间的关系。

详细设计:总体设计以比较抽象的方式提出了解决问题的方法,详细设计就是把方法具体化。

编码和单元测试:写出正确的,容易理解,容易维护的程序模块,并测试每一个模块

综合测试:通过各种类型的测试(以及相应的调试)使软件达到预定的要求

维护时期:维护

💯维护通常有四类:

改正性维护,诊断和改正软件使用过程中发现的错误。

适应性维护,修改软件以适应环境的变化。

🌟完善性维护,根据用户需求扩充软件,使软件更完善。也是维护中花费时间最多的(考点)

预防性维护,修改软件为将来的维护活动预先准备

2.软件过程:

瀑布模型(文档驱动)

瀑布模型将软件生命周期制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落

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

2.推迟实现的观点(不过早编程)

3.质量保证的观点

瀑布模型早期不可逆(考试中一般认定不可逆)

快速原型模型(用户需求驱动)

是用户和设计变换最频繁的方法

快速建立一个能反应用户需求的原型系统,让用户试用,通过实践了解系统概貌。(第四代技术4GL)

增量模型(非整体开发模型(考点)

增量模型也称渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。

瀑布模型或快速原型模型目标是一次就把一个满足所有需求的产品提交给用户

增量模型把整个软件产品分解成许多个增量构件,分批地逐步向用户提交产品

增量模型的特点

把瀑布模型的顺序特征与快速原型法的迭代特征相结合

喷泉模型(用户驱动)

喷泉模型(Fountain Model)是一种以用户需求为动力,以对象为驱动的模型(考点),主要用于采用对象技术的软件开发项目。在喷泉模型中,软件开发过程的各阶段是相互迭代的、无间隙的。软件的某个部分常常被重复工作多次,相关对象在每次迭代中加入渐进的软件成分。无间隙是指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界线。由于对象概念的引入,表达分析、设计、实现等活动只用对象类和关系,从而可以较容易地实现活动的迭代和无间隙,使其开发自然地包括复用。喷泉模型如下图所示。

螺旋模型(风险驱动)

主要用于内部开发的大规模软件项目,每个阶段都要进行风险评估,快速原型模型以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。该模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。

敏捷过程(适用于中小型项目)

1.个体和交互胜过过程和工具

2.可以工作的软件胜过面面俱到的文本

3.客户合作胜过合同谈判

4.响应变化胜过遵循计划

极限编程 客户作为开发团队的成员

短期交付

结对编程:一人编码一人审查和测试,两人角色可交换

简单设计,及时调整计划。

rup模型(面向对象)

UP,Rational Unified Process,统一软件开发过程,是一个面向对象且基于网络的程序开发方法论,它可以为为所有方面和层次的程序开发提供指导方针,模版以及事例支持。

RUP的二维开发模型

RUP软件开发生命周期是一个二维的软件开发模型。如图:横轴通过时间组织,是过程展开的生命周期特征,体现开发过程的动态结构,用来描述它的术语主要包括周期(Cycle)、阶段(Phase)、迭代(Iteration)和里程碑(Milestone);纵轴以内容来组织为自然的逻辑活动,体现开发过程的静态结构,用来描述它的术语主要包括活动(Activity)、产物(Artifact)、工作者(Worker)和工作流(Workflow)。

🌟开发过程四个阶段:初始、细化、构造、交付(考点)

第二章、可行性研究

1.技术可行性

软件、硬件、人员

    • 使用现有的技术能否实现这个系统?
    • 是否有胜任开发该项目的熟练技术人员?
    • 能否按期得到开发该项目所需的软件、硬件资源?

2.经济可行性

是否可以赚到钱

3.操作可行性

操作可行性评价系统运行后会引起的各方面变化,如:对组织机构管理模式、用户工作环境等产生的影响。

4.法律可行性

社会可行性主要讨论法律方面和使用方面的可行性。

例如,被开发软件的权利归属问题、软件所使用的技术是否会造成侵权等问题。

1.什么是可行性分析:检查并确定是否值得为项目或产品投入时间、金钱和资源。这样的评估活动称为“可行性分析”。

2.为什么要进行可行性分析:由于受到资源和交付时间的限制,使得软件系统的开发变得越来越困难。因此,尽早对软件项目的可行性进行细致而谨慎的分析是十分必要的。

3.可行性分析主要任务是什么:用最小的代价在尽可能短的时间内确定问题是否可以解决

系统流程图是一种极好的分析和设计工具,它有助于开发人员和用户交流,在可行性分析中,可以通过绘制系统(业务)流程图了解要开发的系统的大概的业务处理流程、范围和功能等。🌟是用来描述物理系统的工具(考点)

数据流图

业务流程图

组织结构图

第三章、需求分析

需求分析不是在项目前期进行的工作

软件定义时期的最后一个阶段,基本目的:回答“系统必须怎么做”,任务是:确定软件系统功能,编写软件需求规格说明书;用户要很好地参与到需求分析过程中来;(需求需要不断地迭代

软件需求分析一般要确定的是用户对软件的功能需求和非功能需求

需求分析可以使用的工具:数据流图(加工规格说明 )、实体联系图(数据对象的描述)、数据字典

第五章、总体设计

总体设计基本目的:回答“概述的说系统应该怎么实现”,总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。

设计过程:

总体设计通常由两个阶段组成:系统设计阶段,确定系统的实现方案;结构设计阶段,确定软件结构。

典型的总体设计过程:

1.设想提供方案

2.选取合理方案

3.推荐最佳方案

4.功能分解

5.设计软件结构

6.设计数据库

7.制定测试计划

8.书写文档

9.审查和复查

信息隐藏和局部化:

  • 信息隐藏:指设计和确定模块时,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的。这种隐藏可以通过定义一组独立的模块来实现,每个模块仅交换必要的信息,从而避免了修改期间由于疏忽而引入的错误传播到软件的其他部分。例如,一个计算圆面积的模块可以隐藏其内部的数学公式和计算过程,对于其他模块而言只需要知道输入半径和输出面积即可。
  • 局部化:指把一些关系密切的软件元素物理地放得彼此靠近。这种局部化有助于实现信息隐藏,因为不同模块之间的紧密联系被限制在局部范围内,避免了系统中不必要的耦合和依赖。例如,一个处理用户输入的模块可以与一个处理输出的模块放在同一个文件夹内,而与其他模块放在不同的文件夹内,这样就实现了局部化。

模块独立:🌟高内聚低耦合(考点)🌟模块独立性衡量的标志:内聚和耦合(考点)

内聚的定义:度量一个模块内部各个元素彼此结合的紧密程度。

内聚(考点)(内聚程度依次递增)

1.偶然内聚:指一个模块内的各处理元素之间没有任何联系。(类似于把一推不相关的代码都组合在一个类里)

2.逻辑内聚:指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。(类似于完成加法运算,有多个加法运算代码块,分别处理参数为int或float或double等。这些代码块之所以聚在一起,只是它们都是为了完成加法运算而已)

3.时间内聚:指把需要同时执行的动作组合在一起形成的模块。(类似于利用抽象工厂模式生成一碗粥,你可以先放水,也可以先放米,这两个动作之间没有必然的顺序,但为了生成一碗粥,需要同时执行这两个动作)

4.过程内聚:指一个模块完成多个任务,这些任务必须按照指定的过程执行。(类似于利用原生JDBC操纵数据库。你需要先连接JDBC获得connection对象,然后才能创建Statement对象,最后才能执行sql语句)

5.通信内聚:指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。(类似于有一个数组,你只把它作为你遍历数组,增加数组节点,删除数组节点的参数)

6.顺序内聚:指一个模块中的各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入。(类似于程序模拟车间生产的某条流水线)

7.功能内聚:指模块内的所有元素共同作用完成一个功能,缺一不可。

类似于某排序算法的代码,不能缺少任意一行代码,否则整个排序功能失效)

耦合定义:度量模块之间互相连接的紧密程度。

耦合(考点)(耦合度依次递增)

💯1.无直接耦合:指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何消息。

2.数据耦合:指两个模块之间有调用关系,传递的是简单的数据值。(类似于高级语言中的值传递)

3.特征耦合:指两个模块之间传递的是数据结构。(类似于高级语言中的引用传递)

4.控制耦合:指一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择地执行模块内的某一功能。因此,被调用模块应具有多个功能,哪个功能起作用受调用模块控制。(类似于计算工资模块,调用它的模块先区别是普通员工还是经理,进而生成控制变量,传递给计算工资模块进而选择其中一种计算功能)

5.外部耦合:模块间通过软件之外的环境联结。(如I/O将模块耦合到特定的设备、格式、通信协议上)

6.公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。(例如某一模块把用户放到http session后,另外一些模块需要从http session取用户,那么它们之间就形成了公共耦合。如果必须存在公共耦合,应限制公共耦合的范围)

7.内容耦合:当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时。(类似于Java中不通过方法操作另一个类的数据,而是直接以类似于People.foot那样访问。)

第六章、详细设计

详细设计的任务

1.🌟为每个模块确定采用的算法(考点)

2.确定每一模块使用的数据结构

3.确定模块接口的细节

4.要为灭一个模块设计出一组测试用例

详细设计工具

1.图像工具(程序流程图、N-S图(不能实现任意的转移、可以表示模块之间的调用关系)、PAD)

2.表格工具 判定表(内容是:对象、条件和操作

3.语言工具 PDL(伪码)

🌟Jackson图上下层之间的关系是组成关系(考点)

第七章、实现

编码(少)

1.选择程序设计语言

2.编码风格

测试

🌟测试的目的是发现软件的错误(考点)

🌟软件测试的关键问题是如何选择测试用例(考点)

集成测试:发现概要设计阶段的错误

单元测试:主要是在编码阶段进行的,也就是测试写的代码有没有错误

验收测试:要用来满足用户的期望的测试,为了验证有效性

系统测试:通过与系统的需求定义做比较,发现软件与系统定义不符合或与之矛盾的地方,以验证软件的功能和性能等满足其规约所指定的要求。

白盒测试

 白盒测试:是一种测试用例设计方法,在这里盒子指的是被测试的软件,白盒,顾名思义即盒子是可视的,你可以清楚盒子内部的东西以及里面是如何运作的,因此白盒测试需要你对系统内部的结构和工作原理有一个清楚的了解,并且基于这个知识来设计你的用例。

覆盖率低-->高

语句覆盖

选择足够多的测试数据,使程序中每个语句至少执行一次

判定覆盖

语句覆盖的基础上每个判定的每个可能都执行一次

条件覆盖

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

条件组合覆盖

🌟差错能力最强(考点)

黑盒测试(根据需求说明)

黑盒测试又叫功能测试,这是因为在黑盒测试中主要关注被测软件的功能实现,而不是内部逻辑。在黑盒测试中,被测对象的内部结构,运作情况对测试人员是不可见的,测试人员对被测产品的验证主要是根据其规格,验证其与规格的一致性。

在绝大多数没有用户参与的黑盒测试中,最常见的测试有:功能性测试、容量测试、安全性测试、负载测试、恢复性测试、标杆测试、稳定性测试、可靠性测试等。

等价划分法

每类中的典型值在测试中的作用与这一类中所有其他值作用相同,可以从每个等价类中取一组数据作为测试数据

有效等价类(正确、符合条件的数据)+无效等价类(错误、不符合条件的数据)=等价类

🌟等价类的划分是关键(考点)

eg:程序输入条件为小于100大于20的整数,则有效等价类为20=100.

边界值法

若合法数据是0到100

4值法:-1,0,100,101

6值法:-1,0,1,99,100,101

因果图法

因果图是用图解的方法表示输入的各种组合关系,依据因果图写出判定表,从而设计相应的测试用例。

   它适合于检查程序输入条件的各种组合情况。例约束关系、组合关系。

调试

调试(也叫纠错)作为成功测试的后果出现(在测试发生错误时出现)

第八章、维护

软件维护的特点

💯回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他 代码 产生错误。

非结构化维护

若软件配置只有程序代码,程序内部文档不足,使评价更加困难,对软件结构,全程数据结构,系统接口,性能和设计约束等经常会产生误解。因为没有测试文档所以不能进行回归测试

结构化维护

有完整的软件配置,维护从文档开始,确定软件结构,性能,接口。然后修改设计并且对所做的修改进行复查,编写响应代码。可以回归测试,把修改后的文件再次交付。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言 内联函数 + 递归函数

函数分类 内联函数 1)内联函数在编译时将函数的代码直接插入到调用它的地方,而不是通过函数调用的方式执行,从而减少了函数调用的开销,提高了代码的执行速度 2)使用 inline 关键字来声明 3)将函数声明为内联…

分层网络模型(OSI、TCP/IP)及对应的网络协议

OSI七层网络模型 OSI(Open System Interconnect),即开放式系统互连参考模型, 一般都叫OSI参考模型,是ISO组织于1985年研究的网络互连模型。OSI是分层的体系结构,每一层是一个模块,用于完成某种功…

pytorch一致数据增强

分割任务对 image 做(某些)transform 时,要对 label(segmentation mask)也做对应的 transform,如 Resize、RandomRotation 等。如果对 image、label 分别用 transform 处理一遍,则涉及随机操作的…

【概率方法】朗之万动力学 Langevin Dynamics

目前我们了解到采样方法有很多种,按照从朴素到高效的演变顺序大致是 反函数采样蒙特卡洛模拟(求统计量)接受-拒绝采样MCMC HM 算法Gibbs 采样 接上一篇文章,Gibbs 采样能在有条件分布 p ( x d ′ ∣ x − d ) p(\mathbf{x}_{d…

头歌-Python 基础

第1关:建模与仿真 1、 建模过程,通常也称为数学优化建模(Mathematical Optimization Modeling),不同之处在于它可以确定特定场景的特定的、最优化或最佳的结果。这被称为诊断一个结果,因此命名为▁▁▁。 填空1答案:决…

【数据挖掘】国科大苏桂平老师数据库新技术课程作业 —— 第四次作业

云数据库研究 云计算与云数据库背景 云计算(cloud computing)是 IT 技术发展的最新趋势,正受到业界和学术界的广泛关注。云计算是在分布式处理、并行处理和网格计算等技术的基础上发展起来的,是一种新兴的共享基础架构的方法。它…

大数据技术7:基于StarRocks统一OALP实时数仓

前言: 大家对StarRocks 的了解可能不及 ClickHouse或者是远不及 ClickHouse 。但是大家可能听说过 Doris ,而 StarRocks 实际上原名叫做 Doris DB ,他相当于是一个加强版的也就是一个 Doris ,也就是说 Doris 所有的功能 StarRocks 都是有的&a…

this.$emit(‘update:isVisible‘, false)作用

这个写是不是很新颖&#xff0c;传父组件传值&#xff01;这是什么鬼。。。 假设你有以下逻辑业务。在A页面弹出一个组件B&#xff0c;A组件里面使用B组件&#xff0c;是否展示B组件你使用的是baselineShow变量控制&#xff01; <BaselineData :isVisible.sync"basel…

SQL命令---修改字段的排列位置

介绍 使用sql语句表字段的排列顺序。 命令 alter table 表名 modify 字段名1 数据类型 first|after 字段名2;例子 将a表中的age字段改为表的第一个字段。 alter table a modify age int(12) first;下面是执行命令后的表结构&#xff1a; 将a表中的age字段放到name字段之…

ELK简单介绍二

学习目标 能够部署kibana并连接elasticsearch集群能够通过kibana查看elasticsearch索引信息知道用filebeat收集日志相对于logstash的优点能够安装filebeat能够使用filebeat收集日志并传输给logstash kibana kibana介绍 Kibana是一个开源的可视化平台,可以为ElasticSearch集群…

linux 15day apache apache服务安装 httpd服务器 安装虚拟主机系统 一个主机 多个域名如何绑定

目录 一、apache安装二、访问控制总结修改默认网站发布目录 三、虚拟主机 一、apache安装 [rootqfedu.com ~]# systemctl stop firewalld [rootqfedu.com ~]# systemctl disable firewalld [rootqfedu.com ~]# setenforce 0 [rootqfedu.com ~]# yum install -y httpd [rootqfe…

用23种设计模式打造一个cocos creator的游戏框架----(十二)状态模式

1、模式标准 模式名称&#xff1a;状态模式 模式分类&#xff1a;行为型 模式意图&#xff1a;允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 结构图&#xff1a; 适用于&#xff1a; 1、一个对象的行为决定于它的状态&#xff0c;并且它必须…

记录一次云原生线上服务数据迁移全过程

文章目录 背景迁移方案调研迁移过程服务监控脚本定时任务暂停本地副本服务启动&#xff0c;在线服务下线MySQL 数据迁移Mongo 数据迁移切换新数据库 ip 本地服务启动数据库连接验证服务打包部署服务重启前端恢复正常监控脚本定时任务启动旧服务器器容器关闭 迁移总结 背景 校园…

代码随想录二刷 |二叉树 |101. 对称二叉树

代码随想录二刷 &#xff5c;二叉树 &#xff5c;101. 对称二叉树 题目描述解题思路 & 代码实现递归法迭代法使用队列使用栈 题目描述 101.对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,…

adb unauthorized 踩坑记录

给Realme X7 Pro 安装Root后&#xff0c;发现adb连接设备呈现unauthorized 状态&#xff1a; 在Google以后&#xff0c;尝试了很多方案&#xff0c;均无效&#xff0c;尝试的方案如下&#xff1a; 重启手机&#xff0c;电脑。不行撤销调试授权&#xff0c;开关usb调试&#xf…

持续集成交付CICD:Jenkins配置Nexus制品发布

目录 一、实验 1.Jenkins配置Nexus制品发布 一、实验 1.Jenkins配置Nexus制品发布 &#xff08;1&#xff09;策略 发布其实就是下载制品&#xff0c;然后将制品发送到目标主机&#xff0c;最后通过脚本或者指令启动程序。 &#xff08;2&#xff09;安装Maven Artifact …

基于JavaWeb+SSM+Vue马拉松报名系统微信小程序的设计和实现

基于JavaWebSSMVue马拉松报名系统微信小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.…

SQL命令---添加新字段

介绍 使用sql语句为表添加新字段。 命令 alter table 表名 add 新字段名 数据类型;例子 向a表中添加name字段&#xff0c;类型为varchar(255)。 alter table a add name varchar(255);下面是执行添加有的表结构&#xff1a;

react之项目打包,本地预览,路由懒加载,打包体积分析以及如何配置CDN

react之项目打包,本地预览,路由懒加载,打包体积分析以及如何配置CDN 一、项目打包二、项目本地预览三、路由懒加载四、打包体积分析五、配置CDN 一、项目打包 执行命令 npm run build根目录下生成的build文件夹 及时打包后的文件 二、项目本地预览 1.全局安装本地服务包 npm…

内存分配器

实现分配器需要考虑的问题 空闲块的组织方式&#xff1a;如何记录现有的空闲块空闲块的选择&#xff1a;如何选择一个合适的空闲块空闲块的分割&#xff1a;选择了一个合适的空闲块后如何处理空闲块内部的剩余部分空闲块的合并&#xff1a;如何处理一个刚刚被释放的块&#xf…