国企计算机类笔试-软件工程总结

软件工程基本概念

按照软件的作用进行分类可分为:系统软件、应用软件、工具软件、可重用软件。

软件演化历程:程序设计阶段、程序系统阶段、软件工程阶段,现代软件工程阶段。

软件危机:

  • 软件开发成本和进度估计不准确。
  • 软件需求分析不充分,开发出的系统和实际需求有差距。
  • 软件投入使用后经常出故障。
  • 软件难以维护。
  • 缺乏文档资料。
  • 总成本上升、维护费用增长迅速。

软件的成本决定了计算机系统的价格。

软件生命周期:软件计划、需求分析、软件设计、编码、软件测试、运行维护、软件废除。

软件需求规格说明(SRS)是分析阶段的最终产物,是需求分析阶段最重要的文档。

软件需求分析方法主要有:结构化方法(数据流图、ER图、数据字典、状态图)、原型化方法(抛弃式、演化式、增量式)、面向对象方法(UML)。 

UML适用于系统开发的全过程。

软件设计阶段可以分为概要设计(软件体系结构)和详细设计(软件过程)。

软件结构质量的度量标准是成分之间的耦合性和内聚性。

软件设计方法:面向数据流、面向对象、面向方面、面向agent、面向构件、敏捷方法。

实现阶段=编码阶段

没有发现错误的测试是不成功的。

测试阶段分为单元测试、集成测试(增殖测试、非增殖测试、混合增值测试)、确认测试、系统测试。

软件测试种类可以分为人工测试、计算机测试。人工测试分为桌面检查、代码会审、走查,计算机测试可以分为黑盒测试、白盒测试。

白盒测试:逻辑覆盖,语句覆盖、分支覆盖、条件覆盖、分支/条件覆盖、多重条件覆盖、路径覆盖。

黑盒测试:功能测试,等价类划分法、边界值分析法、错误推测法、因果图法。

人工测试主要有桌面检查(会议)、代码会审(会议)、走查。

调试与测试不同,调试是改错,测试是纠错,调试的方法有强力法排错、回溯法排错、归纳法排错、演绎法排错。

测试阶段交付的文档:软件测试计划、软件测试报告。

软件维护是软件生命周期中消耗时间最长,最费精力,费用最高的一个阶段,主要任务是如何提高可维护性、减少维护工作量和费用。

维护活动:完善性维护>适应性维护>纠错性维护>预防性维护。

瀑布模型是提出最早的、目前使用最广泛的软件开发模型,也是当前大型软件系统开发的最现实方法。

瀑布模型:

  • 优点:结构化开发,较为有效的管理模式,对各项软件工程活动都较为有效,能够保证软件质量。
  • 缺点:缺乏灵活性,无法应对软件需求不明确、不准确的问题,前期差错对后期影响大、纠正代价高。

演化模型=原型开发模型:快,但是开发出的软件质量不高。

螺旋模型=瀑布模型+演化模型,六个任务区域,进行风险分析。大型软件系统开发最现实的方法。

喷泉模型:面向对象软件的开发过程,连续无间隙。

面向复用的软件开发模型:减少了软件开发的工作量、开发成本、开发风险,快速交付,缺点是需求妥协不可避免。

需求分析

软件需求的三个层次:业务需求、用户需求、功能需求。

结构化分析设计技术(SADT)=结构化分析方法(SA)+结构化设计方法(SD)

结构化分析方法使用的工具:数据流图(DFD)、数据词典、结构化英语(半形式语言)、判定表、判定树,其中后三种为说明方式。

DFD的基本组成元素:

  • 数据对象:用带线的箭头表示,反映数据的路径和流向
  • 加工处理:用椭圆表示,反映对数据对象的变换。
  • 数据存储:用双线表示,可以是数据文件或者记录。
  • 外部实体:用矩形表示,系统之外的人或事物。

大型的系统采用分层的方式来画DFD,以便控制复杂性。

分层DFD的平衡:每个子图的输入和输出数据对象要与其父图中相应加工处理的输入输出相同。

一套分层DFD中每张图的加工处理不宜超过7个。

DFD中的数据守恒是指输入到某个加工处理的数据流与从该加工输出的数据流大小一样。

改进DFD:检查DFD正确性、改进DFD效能、重新分解DFD。

检查DFD的正确性:检查数据是否守恒、检查数据存储的使用是否正确、检查父图和子图是否平衡。

改进DFD效能:简化加工处理间的数据对象、分解要均匀、命名要合适。

数据字典是DFD中所有成分的含义。

开发系统原型的好处:

  • 减少需求描述中出现问题的数量,减少总开发成本。
  • 允许用户改进需求描述。
  • 软件开发人员和用户之间的理解偏差可在功能展示时显露出来。
  • 软件开发小组可能会在原型设计中发现需求不一致和不完善。
  • 可以迅速展示一个应用系统对管理的可行性和作用。
  • 原型可以用作书写产量-质量系统描述的基础。

原型开发模型可以将软件开发过程分为四个阶段:建立原型目标、定义原型功能、开发原型、评估原型。

原型开发模型的具体形式:抛弃式、演化式、增量式。

抛弃式、演化式、增量式原型开发:书P45、P46、P47。

快速原型技术:使用动态高级语言开发应用系统、使用第四代语言开发DBMS、使用组件复用技术通过集成构造应用软件系统。

基于复用的可视化编程方法特别适合于个体或小规模团体进行小简单系统的快速开发软件。

使用原型化方法开发用户界面。

对象是构成系统的基本单位。

继承分为简单继承和多重继承。

对象之间通过消息进行通信。

对象之间的组成和连接关系:对象的分类关系、对象之间的组成关系、对象属性之间的静态联系、对象行为之间的动态联系。

面向对象建模的目标:描述客户需要什么、为软件设计奠基、确认需求。

数据对象只封装数据,所以于面向对象中的对象不同。

CRC卡片组成:类名、职责、协作者。

CRC建模将类分为三种:实体类、边界类、控制类。

UML的图可以分为两类:行为图、结构图。

UML开发过程:系统(用户)需求、系统分析、设计、编码、测试、维护扩展。

SRS特征:唯一性、完整性、可检验性、一致性、可修改性、可跟踪性、可利用性。

系统设计

软件设计阶段完成的工作:

  • 定义软件的主要构造元素之间的关系。
  • 定义实现软件需求的体系结构风格和设计模式。
  • 定义影响体系结构实现方式的约束。

软件设计流程:软件概要设计->概要设计文档->概要设计评审->软件详细设计->模块设计说明->详细设计评审。

软件设计的目标:软件系统易维护、易理解、高可靠、高效率。

软件设计的准则:软件系统有层次性、模块化、内聚性高、耦合度低、软件界面清晰、软件设计说明书清晰简洁完整无歧义。

软件体系结构研究的主要内容:软件体系结构描述、软件体系结构风格、软件体系结构评价、软件体系结构形式化方法。

常见的体系结构风格:以数据为中心的体系结构、管道-过滤器体系结构、主程序-子程序体系结构、层次体系结构。

两种衡量模块独立性的度量:耦合性(越低越好)、内聚性(越高越好)。

用户界面设计的黄金规则:

  • 软件应置于用户的控制之下。
  • 减少用户的记忆负担。
  • 保持界面一致。

用户界面设计过程四个不同的框架活动:

  • 通过界面分析定义界面对象和操作。
  • 定义界面发生变化的事件,并建模、设计页面。
  • 描述每个界面的状态并实现界面。
  • 判定用户能否从界面提供的信息来解释系统状态。

概要设计交付的文档:概要设计说明书、数据库/数据结构设计说明书和软件测试计划。

软件设计中,影响范围不在控制范围内,可以:

  • 将作判断的模块合并到它的父模块。
  • 将受判定的模块下移到控制范围内。
  • 把判断上移到层次中足够高的层次。

信息隐蔽原理:在设计模块时,包含在模块内的过程和数据对于无须这些信息的其他模块是不可取的。

冗余设计是指对同一问题由不同程序员采用不同的程序设计风格和不同的算法设计软件,提高可靠性,增加了成本。

防卫设计是指在软件设计中插入自动检错、报错、纠错功能。

程序的环形复杂度反应了程序控制流的复杂程度,当程序内分支数或循环个数增加时,环形复杂度也会随之增加,是对测试难度的一种定量度量。

详细设计的工具:图示工具、语言工具、表格工具。

图示工具包括:结构化流程图、N-S图、PAD图、HIPO图。

面向对象设计OOD分为两个阶段:高层设计(系统体系结构的设计)、低层设计(类的详细设计)。

敏捷方法AM是面向人的。

面向Agent的设计方法AOD与面向对象设计方法的最基本区别在于Agent的社会性。

系统实现

目前成熟的软件开发方法:面向过程、面向数据、面向对象。

程序设计语言分类:

  • 按照语言的级别可以分为高级语言和低级语言(机器语言和汇编语言)。
  • 按照解决问题的方式可以分为面向机器的语言(汇编语言)、面向过程的语言(数据结构+算法)、面向对象的语言(对象+消息)和面向问题的语言。
  • 按照程序的执行方式可以分为解释执行语言(边解释边执行,效率低)、编译执行语言(程序编译成机器语言,执行效率高)、编译解释型语言(先编译为中间代码,然后在虚拟机中解释执行)。
  • 按照应用领域来分,可以分为单机语言、网络编程语言、数据库语言、人工智能语言。
  • 按照应用范围来分,可以分为通用程序语言、专用程序语言。

程序设计语言的发展历程:面向机器语言、高级语言、甚高级语言。

汇编程序是系统软件中的语言处理软件,用汇编语言写的程序叫作源程序。

高级语言按照应用特点可以分为基础语言、结构化语言、专用语言、面向对象语言,按照语言内在特点可以分为系统实现语言、块结构语言、静态高级语言、动态高级语言。

4GL是非过程性语言,只需要告诉计算机做什么,是信息时代的标志。

程序可读性和易理解性的基本要求是要使源程序文档化。

源程序文档化三个要求:符号的命名要求、注释要求、空行和缩进要求。

Smalltalk是第一个流行的OO语言。

软件测试与维护

软件维护是软件生命周期中消耗时间最长、最费精力、费用最高的一个阶段。

软件的可测试性表征了计算机程序能够被测试的容易程度。

软件开发过程是一个自顶向下、逐步细化的过程,测试过程是一个自底向上、逐步集成的过程。

测试的四个步骤:单元测试(模块测试,可并行进行)、集成测试、确认测试(有效性测试)、系统测试。

测试过程的三类输入:软件配置、测试配置、测试工具。

测试环境由被测环境、与被测环境相关的驱动模块和桩模块构成。

集成测试分为增殖(逐个集成单元)和非增殖(一次性集成单元)两种方式。

增殖集成测试分为自顶向下、自底向上、混合增值三种方式。

确认测试的主要阶段:有效性测试(黑盒测试)、软件配置复查(确保配置安全)、验收测试、安装测试(查找安装错误)。

α测试:一个用户在开发环境下进行测试,公司内部用户模拟实际操作环境下进行测试。

β测试:多个用户在实际使用环境下进行测试。

系统测试可分为恢复测试、安全测试、压力测试、性能测试。

有效的白盒测试方法是逻辑覆盖,覆盖测试目标的标准分为语言覆盖、分支覆盖、条件覆盖、分支/条件覆盖、条件组合覆盖、路径覆盖、循环覆盖。

黑盒测试方法:等价类划分法、边界值分析、划分测试与随机测试(面向对象软件的测试)、错误推测法、因果图法。

软件调试方法:强力法排错、回溯排错法、归纳排错法、演绎排错法。

面向对象两种集成测试策略:基于线程的测试、基于使用的测试。

类测试方法:基于状态的测试、数据流测试、继承层次测试。

软件维护:软件系统交付使用后改变系统的任何工作。

现实世界:S-系统(静态)、P-系统(基于问题)、E-系统(嵌入)。

衡量软件可维护性的特性:可理解性、可测试性、可修改性、可靠性、可移植性、可使用性、效率。

软件危险程度:灾难性、重大、较大、较小。

软件的平均失败时间MTTF越大,越可靠。

四种类型的软件审查:在检查点进行审查、验收检查、周期性维护审查、对软件包进行检查。

CS维护方法:将客户机服务器两部分分来维护。

面向过程开发应该使用结构化维护方法;面向数据开发应该从数据库表结构入手,运用视图、事务处理技术等维护数据库服务器上数据的完整性和一致性;面向对象开发应该使用对象继承的特兴奋,从维护类库、构件库、中间件库、组件库入手。

软件再工程使用逆向工程、重构等技术,理解原有软件后,进行分解、综合,并重新构建软件。

软件再工程过程模型:信息库分析、文档重构(必须更新)、逆向工程、代码重构、数据重构、正向工程。

逆向工程的核心活动是抽取抽象。

逆向工程的三个问题:抽象层次、完备性、方向性。

软件重构分为代码重构和数据重构。

软件的正向工程:CS体系结构的正向工程、OO体系结构的正向工程、用户界面的正向工程。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值