软件工程考试复习

第一章、软件工程概述

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

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

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

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

系统软件

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

支撑软件

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

应用软件

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

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

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

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

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

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

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

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

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

优点:

1、易维护

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

2、质量高

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

3、效率高

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

4、易扩展

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

1.软件生命周期:

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

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

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

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

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

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

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

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

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

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

维护时期:维护

维护通常有四类:

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

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

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

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

2.软件过程:

瀑布模型(文档驱动)

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

软件工程考试复习_第1张图片

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

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

3.质量保证的观点

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

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

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

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

软件工程考试复习_第2张图片

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

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

软件工程考试复习_第3张图片

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

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

增量模型的特点

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

喷泉模型(用户驱动)

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

软件工程考试复习_第4张图片

螺旋模型(风险驱动)

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

软件工程考试复习_第5张图片

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

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.可行性分析主要任务是什么:用最小的代价在尽可能短的时间内确定问题是否可以解决

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

软件工程考试复习_第6张图片

数据流图

软件工程考试复习_第7张图片

业务流程图

组织结构图

第三章、需求分析

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

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

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

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

第五章、总体设计

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

设计过程:

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

典型的总体设计过程:

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

因果图法

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

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

调试

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

第八章、维护

软件维护的特点

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

非结构化维护

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

结构化维护

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

你可能感兴趣的:(软件工程)