考研复试-前沿技术+软工+数据库速成

一、前沿技术

·大数据

1.什么是数据挖掘
数据挖掘是人工智能和数据库领域研究的热点问题,数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、统计学、数据库、可视化技术等,高度自动化地分析企业的数据,作出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,作出正确的决策。

2.什么是大数据?你接触到的最大的数据有多大?
大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

3.大数据的特点?
1.Volume:数据量巨大
体量大是大数据区分于传统数据最显著的特征。一般关系型数据库处理的数据量在TB级,大数据所处理的数据量通常在PB级以上。
2.Variety:数据类型多
大数据所处理的计算机数据类型早已不是单一的文本形式或者结构化数据库中的表,它包括订单、日志、BLOG、微博、音频、视频等各种复杂结构的数据。
3.Velocity:数据流动快
速度是大数据区分于传统数据的重要特征。在海量数据面前,需要实时分析获取需要的信息,处理数据的效率就是组织的生命。
4.Value:数据潜在价值大
在研究和技术开发领域,上述三个特征已经足够表征大数据的特点。但在商业应用领域,第四个特征就显得非常关键!投入如此巨大的研究和技术开发的努力,就是因为大家
都洞察到了大数据的潜在巨大价值。如何通过强大的机器学习和高级分析更迅速地完成数据的价值“提纯”,挖掘出大数据的潜在价值,这是目前大数据应用背景下苛待解决的难题。

4.大数据发展的瓶颈?
没有成熟的方法采集和处理大数据。
数据涉及到隐私,法律法规还没有完善。
大量不同类别的数据不知道怎么存储。
数据的独占性:有价值的数据别人不一定会分享。

5.大数据和数据挖掘有什么区别?举例生活中的大数据和数据挖掘的例子
大数据是指用现有的计算机软硬件设施难以采集、存储、管理、分析和使用的超大规模的数据集。而数据挖掘是指通过大数据集查找相关有价值的信息的活动。大数据是资产,数据挖掘是用于提供有益结果的处理程序。
例子:
1在电商平台上购物,系统会给你推荐某些的商品,依据就是用户数据分析。
2今日头条之类的应用,推送的内容就是利用大数据和人工智能技术实现。
2.某些平台使用的智能客服机器人,就是利用大数据,借助深度学习训练出来的。
3…网易云音乐之类的产品,通过大数据分析给用户推荐歌曲、歌单。

·机器学习

1.什么是机器学习?讲讲具体的算法。你认为你本科学的数学有哪些会用到机器学习中?
机器学习是一门多学科交叉专业,涵盖概率论知识,统计学知识和复杂算法知识,使用计算机作为工具并致力于模拟人类的学习方式,并将现有内容进行知识结构划分来有效提高学习效率。

2.什么是神经网络?
神经网络,它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

3.什么是深度学习?
深度学习(DL)是机器学习领域中一个新的研究方向。深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。
深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。

·其他

1.什么是人工智能,谈谈你对她的理解?
人工智能(Artificial Intelligence),AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理等。人工智能可以对人的意识、思维的信息过程的模拟。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。
(简略:人工智能系统以模拟神经元组成的神经网络算法为基础 ,通过数据挖掘和概率总结进行深度的学习、记忆和运算。并在硬件支持下利用算法进行交互学习和提升,不断提高预测和决策的能力)
2.用过哪些搜索引擎,他们的区别是什么
谷歌的优点:信息量广和百度比较能更有效的找到准确的信息而且广告少缺点:链接不能及时更新中文网站检索查找效率不高网站快照漏洞大。
百度的优点:百度的使用者标准低能广泛适用于任何人操作难度低
缺点:信息准确率低广告多商业的信息多目标信息不准确。
搜狗的优点:独立网站查找方便分类化查询缺点:内容更新慢信息量少

3.你认为的计算机发展前景,那些方面比较热门

4.什么是嵌入式系统
嵌入式系统由硬件和软件组成.是能够独立进行运作的器件。其软件内容只包括软件运行环境及其操作系统。硬件内容包括信号处理器、存储器、通信模块等在内的多方面的内容。相比于一般的计算机处理系统而言,嵌入式系统不能实现大容量的存储功能,因为没有与之相匹配的大容量介质, 软件部分以API编程接口作为开发平台的核心

5.云计算?
云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池,这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。
云计算是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并整合返回给用户。通过这项技术,可以在很短的时间内完成对数以万计的数据的处理,从而达到强大的网络服务。

6.计算机视觉
计算机视觉是深度学习领域最热门的研究领域之一。计算机视觉:使用计算机模拟人的大脑视觉机理获取和处理信息的能力,例如进行图像目标的检测、识别、跟踪等任务。计算机视觉也是跨领域交叉学科,包括了统计学、计算机科学、数学,工程学,生物学等学科,最终的目标就是实现计算机对三维现实世界的理解,实现人类视觉系统的功能。更抽象的,计算机视觉可以是看作在图像等高维数据中的感知问题,包含了,模式识别,图像处理和图像理解等。
计算机视觉有实际的应用,例如:人脸识别,如手机的人脸解锁,支付软件的人脸识别支付
图像检索:Google 使用基于内容的查询来搜索相关图片,算法分析查询图像中的内容并根据最佳匹配内容返回结果。
监测:各大公共场所中使用监视摄像头监测可疑行为。
生物识别技术:指纹、虹膜和人脸匹配
计算机视觉五大技术
图像分类,对象检测,目标跟踪,语义分割,实例分割
这5 种主要的计算机视觉技术可以协助计算机从单个或一系列图像中提取、分析和理解有用的信息。

7.谈谈你对区块链的理解
区块链,因比特币而生。交易数据放到区块中,并把其hash值存储到区块头当中。每个区块的hash值自动带入下一个区块,不仅存放在下一区块头中,还参与下一个区块的hash计算。这样一来,一个区块自然地与下一个区块通过hash值和hash运算绑定在一起,形成一个链式结构,即所谓的区块链。区块链技术在去中心化、各节点无需事先信任的情况下,通过加密算法、共识机制和特定的数据存储方式构建一个集体维护的可靠的数据模式,实现数字资产在网络节点之间的转移。区块链技术不光可用于比特币,还可以用于其它需要保护完整性的各种场合,像金融服务,资源共享,物联网与供应链等。比如说,区块链技术可以应用到食品产业链中,它所具备的数据不可篡改性和可追溯性,一方面能够确保食品在生产及销售的过程中信息不被篡改,另一方面可以确保商家在食品生产的过程中不会造假。运用区块链技术保证食品在生产、运输、经销等方面信息数据的公开化、共享化,从而解决食品安全问题

二、数据库原理

1.什么是存储过程
存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

2.数据库索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
索引并不是越多越好,索引固然可以提高相应的 SELECT 的效率,但同时也降低了 INSERT 及 UPDATE 的效率,因为 INSERT 或 UPDATE 时有可能会重建索引。

3.数据库视图及其优点
视图是从一个或几个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
优点:
(1) 简化了操作,把经常使用的数据定义为视图。
(2) 安全性,用户只能查询和修改能看到的数据。
(3) 逻辑上的独立性,屏蔽了真实表的结构带来的影响。

4.主属性与非主属性的区别
若关系中的一个属性或属性组的值能够唯一地标识一个元组,且他的真子集不能唯一的标识一个元组,则称这个属性或属性组做候选码。在一个关系中,如果一个属性是构成某一个候选关键字(候选码)的属性集中的一个属性,则称它为主属性。不包含在任何一个候选码中的属性称为非主属性。

5.完整性,独立性
数据库完整性是指数据库中数据的正确性和相容性。
数据独立性是指应用程序和数据结构之间相互独立, 互不影响。

6.数据库五层范式
第一范式(1NF)、第二范式(2NF) 、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)

7.事务
数据库事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

8.多用join操作好不好
遇到数据量大的表,join查询是非常损耗性能的,甚至导致数据库连接超时、挂掉等问题。

9.触发器
触发器一般有两种,一种是AFTER触发器,一种是INSTEAD OF触发器。after触发器是在某一类操作结束之后,触发器才会触发,而instead of触发器将替换某一类操作。

10.左连接和右连接的区别
左连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
右连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行

11.在数据库表中加入冗余字段破坏了第几范式?为什么破坏了范式还是要加入冗余字段?
破坏了第三范式。
考虑性能:以空间换时间,在数据库的实践过程中,我们可能遇到数据量非常大的数据表,这时候去做join查询是非常损耗性能的,甚至导致数据库连接超时、挂掉等问题。所以有时候就需要数据库做冗余设计,对一些字段做冗余到关联表中,以避免大表之间的join。

12.MySQL支持哪几种引擎
Innodb引擎、MyIASM引擎、MEMORY引擎

13.MySQL8.0与5.7是否兼容
不兼容, 找一个8.0的jar包,更换。

14.MySQl全量备份增量备份
1.全量备份
简单的说就是将所有数据库或一个库全部备份。
2.增量备份
从上一次全量备份之后到下一次全量备份之前都叫做增量备份。

15.规范化
从关系数据库的表中,除去冗余数据的过程称为规范化。

16.第一二三范式
第一范式要求每一个属性只有一个值,不允许一个属性有多个值。
若关系属于第一范式,在这之上若关系中每一个非主关键字段都完全依赖于主关键字段,没有部分依赖于主关键字段,则称其满足第二范式。
若关系属于第一范式,在这之上若关系中每一个非主关键字段都只依赖于主关键字字段,没有传递依赖,则称其符合第三范式。

17.数据库的三级模式
(1)外模式:也称用户模式,描述的是用户可见的局部数据的逻辑结构和特征。
(2)概念模式:是数据库中全体数据的逻辑结构和特征的描叙是所有用户数据的公共数据视图。
(3)内模式:也称存储模式,描述的是数据库的物理结构和存储方式,是数据在数据库内部的组织方式。

18.两级映射
外模式/模式的映像:实现外模式到概念模式之间的相互转换
模式/内模式的映像:实现概念模式到内模式之间的相互转换

19.事务执行的四个基本要素
原子性、一致性、隔离性、持久性

20.数据模型有哪几种
关系模型、层次模型、网状模型

21.关系数据库的基本运算
并、差、笛卡尔积、选择、投影

22.三级封锁协议
一级封锁协议:事务 T 要修改数据 A 时必须加写锁,直到事务结束才释放锁。
二级封锁协议:在一级的基础上,要求读取数据 A 时必须加读 锁,读取完马上释放读锁。
三级封锁协议:在一级的基础上,要求读取数据 A 时必须加读锁,直到事务结束了才能释放读锁。

23.两段锁协议
第一阶段只获得锁,第二阶段只释放锁。协议规定(1)对任何数据读写之前,必须要获得该数据的封锁;(2)释放了一个锁之后,事务不能再获取其它的封锁。

24.数据库的生命周期
需求分析、逻辑设计、物理设计、实现维护

三、软件工程

1.软件工程是什么
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。

2.软件生命周期
一个软件从定义,开发,使用,维护,直至被弃用,要经历一个漫长的周期。通常就把这段时间称为软件生命周期。概括的说一般将生命周期分为三个阶段,软件定义,软件开发,软件运行维护。

3.黑盒测试,白盒测试,及黑盒测试与白盒测试的方法
①黑盒测试:只通过研究程序组件的输入和输出来确定程序是否有问题,不用考虑程序内部的逻辑结构和内部特性。又称为功能测试和数据测试。有等价类划分,边界值分析,因果图等方法。
②白盒测试:需要对程序具体代码实现进行分析,了解代码的逻辑,设计测试用例,检测每条分支和路径。常用到的一些标准是:
语句覆盖:设计足够多的测试用例,使得程序中每个语句至少能执行一次。
判定覆盖:设计足够多的测试用例,使得程序中每个判定至少都获得一次真值和假值。每个分支至少通过一次。
条件覆盖:设计足够多的测试用例,使每个判断中每个条件的可能取值至少满足一次,但未必能覆盖全部分支。单单仅看即使每个if语句框至少取一次,不考虑组合。
判定/条件覆盖:设计足够多的测试用例,同时满足条件覆盖和判定覆盖。
条件组合覆盖:每个判定框之间相互组合。每个if语句里之间条件逻辑之间相互组合。

4.什么叫回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。

5.软件开发的流程
软件开发流程即软件设计思路和方法的一般过程,包括对软件先进行需求分析,设计软件的功能和实现的算法、软件的总体结构设计和模块设计、编码和调试、程序联调和测试以及编写、提交程序等一系列操作以满足客户的需求并且解决客户的问题,如果有更高需求,还需要对软件进行维护、升级处理,报废处理。

6.软件工程的三要素
方法、工具、过程

7.计算机组成原理
什么是冯诺伊曼结构
输入输出,计算单元,控制单元,存储单元。

8.总线的内容
计算机总线是一组能为多个部件分时共享的信息传送线,用来连接多个部件并为之提供信息交换通路。总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。

9.编译原理
常见的几种文法
0型文法、上下文有关文法、上下文无关文法、正规文法

10.编译程序的5个阶段
词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成

11.LL(1)文法
如果对于产生式左部相同的任意两条产生式的 select集相交为空且两者不能同时推出空,则是LL(1)文法。如果预测分析表的一格中只有一个产生式则为LL(1)文法。

12.LR(0)文法
如果文法对应的自动机中不存在移进-归约冲突和归约-归约冲突则为LR(0)文法。

  1. 面向过程:C
    面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。
    优点:流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结果,具体步骤清楚,便于节点分析。效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。
    缺点:需要深入的思考,耗费精力,代码重用性低,扩展能力差,后期维护难度比较大。
    面向对象
  2. 面向对象:C++、
    在日常生活或编程中,简单的问题可以用面向过程的思路来解决,直接有效,但是当问题的规模变得更大时,用面向过程的思想是远远不够的。所以慢慢就出现了面向对象的编程思想。世界上有很多人和事物,每一个都可以看做一个对象,而每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。
    优点:结构清晰,程序是模块化和结构化,更加符合人类的思维方式;
    易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;
    易维护,系统低耦合的特点有利于减少程序的后期维护工作量。
    缺点:开销大,当要修改对象内部时,对象的属性不允许外部直接存取,所以要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。
    性能低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。

【第5版】3、请说明多态重用与继承重用的关系。2017 (10分)
多态重用实际是一种特殊的继承重用,是充分利用多态性机制支持的继承重用。一般来说,使用多态重用方式重用已有的类构件时,在子类中需要重新定义的操作比较少,因此,多态重用方式比继承重用方式成本低。

【D13章】4、什么是软件质量?试叙述它与软件可靠性的关系。
软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征一致的程度。

5、谈谈Overload和Override的区别。2016 A(10分)
目的:overload用于增加程序的可读性。 override用于提供其超级类已经提供的方法的特定实现。
范围:overload 在相同的类范围内内执行。 override发生在两类具有继承(继承)的关系。
参数 :overload参数必须不同。 override参数必须相同。
多态性:overload 静态多态,调用的函数在编译时被选中。 override 是运行时多态性的

6、软件开发设计模式都有哪些?结合自身情况,谈谈你对设计模式的理解?
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结

【D1章】7、什么是软件危机?软件危机的表现是什么?其产生的原因是什么? 2015
软件危机的定义:
软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。

软件危机的典型表现:
(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对已完成的软件不满意的现象时有发生。
(3) 软件产品的质量往往是靠不住的。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。
(7) 开发生产率提高的速度远跟不上计算机应用普及的需求。

软件危机出现的原因:
(1) 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。
(2) 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。
(3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。

补充:如何克服软件危机
(1) 充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法, 特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。在开发软件的过程中努力作到良好的组 织,严格的管理,相互友好的协作。
(2) 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。
(3) 根据不同的应用领域,开发更好的软件工具并使用这些工具。将软件开发各个阶段使用的软件工具集合成一个 整体,形成一个很好的软件开发支环环境。总之为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

8、谈谈您对软件设计过程中应遵循的高内聚、低耦合原则的理解?
高内聚就是提高模快内部的关联程度,低耦合当然就是降低模快之间的关联程度
耦合性比较高的话,模块代码不易分离,是不好的编程模式
内聚是越高越好,内聚个人认为是只是实现一个功能,不是很多的功能。

(二)、课后题+书中重点(按章节整理)
第一章 软件工程学概述
1、什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?
软件工程是指导计算机软件开发和维护的一门工程学科。
具体的定义:1993年IEEE的定义:软件工程是:① 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;② 研究①中提到的途径。

软件工程的本质特征:
(1) 软件工程关注于大型程序的构造
(2) 软件工程的中心课题是分解问题,控制复杂性
(3) 软件是经常变化的,开发过程中必须考虑软件将来可能的变化
(4) 开发软件的效率非常重要
(5) 和谐地合作是开发软件的关键
(6) 软件必须有效地支持它的用户
(7) 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品

消除软件危机的途径:
(1) 对计算机软件有一个正确的认识(软件≠程序)
(2) 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目
(3) 推广使用在实践中总结出来的开发软件的成功技术和方法
(4) 开发和使用更好的软件工具

2、简述结构化范型和面向对象范型的要点,并分析他们的优缺点。
传统方法学:也称为生命周期方法学或结构化范型。
优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。
缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时 间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。

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

3、什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的使用范围。
软件生命周期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。

瀑布模型
优点:
它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。虽然有不少缺陷但比在软件开发中随意的状态要好得多。
缺点:
(1) 实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化而造成大的混乱。
(2) 经常情况下客户难以表达真正的需求,而这种模型却要求如此,这种模型是不欢迎具有二义性问题存在的。
(3) 客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误时,可能引起客户的惊慌,而后果也可能是灾难性的。

快速原型模型
优点:使用户能够感受到实际的系统,使开发者能够快速地构造出系统的框架。
缺点:产品的先天性不足,因为开发者常常需要做实现上的折中,可能采用不合适的操作系统或程序设计语言,以使原型能够尽快工作。

增量模型
优点:
(1) 人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量。
(2) 当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。
缺点:
(1) 至始至终开发者和客户纠缠在一起,直到完全版本出来。
(2) 适合于软件需求不明确、设计方案有一定风险的软件项目。
该模型具有一定的市场。

螺旋模型
优点:
对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。
缺点:
(1) 需要相当的风险分析评估的专门技术,且成功依赖于这种技术。
(2) 很明显一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化 的方法失去控制。
(3) 这种模型相对比较新,应用不广泛,其功效需要进一步的验证。
该模型适合于大型软件的开发

4、为什么说喷泉模型较好的体现了面向对象软件开发过程无缝和迭代的特性?
因为使用面向对象方法学开发软件时,各个阶段都使用统一的概念和表示符号,因此,整个开发过程都是吻合一致的,或者说是无缝连接的,这自然就很容易实现各个开发步骤的反复多次迭代,达到认识的逐步深化,而喷泉模型则很好的体现了面向对象软件开发过程迭代和无缝的特性。

5、试讨论Rational统一过程的优缺点。
优点:提高了团队生产力,在迭代的开发过程、需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模版和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。
缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,他没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。

6、Rational统一过程主要适用于何种项目?
大型的需求不断变化的复杂软件系统项目

7、说明敏捷过程的适用范围
适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束

8、说明微软过程的适用范围
适用于商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式

9、软件工程方法学:包含三个要素:方法、工具和过程。
最广泛的方法学包括传统方法学和面向对象方法学。

10、软件工程支撑环境:如果把各个阶段使用的软件工具有机地集合成一个集体,支持软件开发的全过程。

11、软件开发中有哪几种过程模型?哪些适用于面向对象的软件开发?
软件开发中常见的软件过程模型有瀑布模型、原型模型、螺旋模型、喷泉模型、统一软件过程等。其中喷泉模型、统一软件过程适用于面向对象的软件开发

12、什么是软件生存周期?它有哪几个活动?
软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。
包括:可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护。

13、什么是软件生存周期模型?有哪些主要模型?

生存周期模型:描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。
主要有:瀑布模型,增量模型,螺旋模型,喷泉模型,基于知识的模型,变换模型。

14、软件工程三要素之间的关系?
软件质量是软件工程的生命线,软件工程以质量保证为基础。
质量管理促进了过程的改进,创造了许多行之有效的软件开发方法和工具。
软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。
方法支撑过程和工具,过程和工具又促进方法学的研究。

第二章 可行性研究
1、应该从哪些方面研究目标系统的可行性?
一般说来,至少应该从以下三个方面研究每种解法的可行性:
a.技术可行性。对要开发项目的功能、 性能和限制条件进行分析, 确定在现有的资源条件下,技术风险有多大,项目是否能实现,这些即为技术可行性研究的内容。这里的资源包括已有的或可以搞到的硬件、软件资源,现有技术人员的技术水平和已有的工作基础。
b.经济可行性。进行开发成本的估算以及了解取得效益的评估, 确定要开发的项目是否值得投资开发,这些即为经济可行性研究的内容对于大多数系统,一般衡量经济上是否合算,应考虑一个“底线”,经济可行性研究范围较广,包括成本—效益分析, 长期公司经营策略, 开发所需的成本和资源,潜在的市场前景。
c.操作可行性。有时还要研究社会可行性问题,研究要开发的项目是否存在任何侵犯、妨碍等责任问题。社会可行性所涉及的范围也比较广,它包括合同、责任、 侵权和其他一些技术人员常常不了解的陷阱等。
必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。

2、可行性研究步骤:(7 步)
1复查并确定系统规模和目标
2研究目前正在使用的系统
3建立新系统的高层逻辑模型
4导出和评价各种方案
5推荐可行方案
6草拟初步的开发计划
7编写可行性研究报告提交审查

3、数据流图的定义(DFD):是一种图形化技术,描绘信息流和数据从输入移动到输出过程中所经受的变换。无具体物理部件,只是描绘数据在软件中流动和被处理的逻辑过程。在设计时值考虑系统必须完成的基本逻辑功能,完全不考虑具体怎么样实现。描绘数据流向,而不应该描绘出现啊某个数据流的条件。

4、数据流图的符号:
正方形(或立方体)——数据的源点或终点
圆角矩形(或圆形)——交换数据的处理
开口矩形(或两条平行线)——数据存储
→ ——数据流,即特定数据的流动方向

5、数据字典的作用:在软件分析和设计的过程中给人提供关于数据的描述信息。

6、数据字典由对4类元素的定义组成:
①数据流;②数据流分量(即数据元素);③数据存储;④处理

7、什么是数据字典?简述数据字典与数据流图的关系。
数据字典是关于数据的信息的集合,对数据流程图中的各个元素做完整的定义与说明,是数据流程图的补充工具;
数据字典与数据流图的关系:数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。 数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。

第三章 需求分析
1、为什么要进行需求分析?通常对软件系统有哪些要求?
(1)为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件,不论我们把设计和编码工作做得如何出色,不能真正满足用户需求的程序只会令用户失望,给开发者带来烦恼。
(2)确定对系统的综合要求:1、功能需求;2、性能需求;3、可靠性和可用性需求;4、出错处理需求;5、接口需求;6、约束;7、逆向需求;8、将来可以提出的要求,分析系统的数据要求。

2、需求分析的任务:
确定随系统的综合要求(①功能需求;②性能需求;③可靠性和可用性需求;④出错处理需求;⑤接口需求;⑥约束;⑦逆向需求;⑧将来可能提出的需求)
分析系统的数据要求
导出系统的逻辑模型
修正系统开发计划

3、验证软件需求的正确性的4个方面:
一致性 所有需求必须是一致的,任何一条需求不能和其他需求相互矛盾。
完整性 需求必须是完整的,规格说明书应包括用户需求的每个功能。
现实性 用现有的硬件技术或软件技术基本上能实现的。
有效性 需求是正确有效的,确实能解决用户面对的问题。

4、验证软件需求的方法:①验证需求的一致性;②验证需求的现实性;三验证需求的完整性和有效性。

5、需求分析的描述工具有哪些?
有数据流图、数据字典、判定表、判定树、结构化自然语言、层次方框图、Warnier 图、IPO 图和需求描述 语言等。

6、软件需求规格说明书由哪些部分组成?
组成包括:
(1)引言:编写目的、背景说明、术语定义及参考资料等。
(2) 概述主要功能、约束条件或特殊需求。
(3) 数据流图与数据字典。
(4) 用户接口、硬件接口及软件接口。
(5) 性能需求、属性等。
(6) 其它需求,如数据库、操作及故障处理等。

7、系统流程图与数据流程图有什么区别?
系统流程图描述系统物理模型的工具,数据流程图描述系统逻辑模型的工具。系统流程图从系统功能的角度抽象的描述系统的各个部分及其相互之间信息流动的情况。
数据流程图从数据传送和加工的角度抽象的描述信息在系统中的流动和数据处理的工作状况。

第四章 形式化说明技术
1、说明形式化说明技术和欠形式化方法的优缺点。

2、在什么情况下应该使用形式化说明技术?使用形式化说明技术应遵守哪些规则?
在用非形式化的方式描述时,存在矛盾,二义性,含糊性,不完整性级抽象层次混乱等问题时用形式化说明技术。
应用形式化方法的准则:
A 应该选用适当的表示方法;
B 应该形式化,但不要过分形式化;
C 应该估算成本;
D 应该有形式化的方法顾问随时提供咨询;
E 不应该放弃传统的开发方式;
F 应该建立详尽的文档;
G 不应该放弃质量标准;
H 不应该盲目依赖形式化方法;
I 应该测试,测试再测试;
J 应该重用

第五章总体设计
1、系统设计包括哪两个阶段
系统设计包括总体设计与详细设计两个阶段。

2、总体设计的主要任务是什么?
总体设计的主要任务是完成软件结构的设计,确定系统的模块及其模块之间的关系。

3、总体设计的9个步骤
1)设想供选择的方案
2)选取合理的方案
3)推荐最佳方案
4) 功能分解
5)设计软件结构
6)设计数据库
7)制定测试计划
8)书写文档
9)审查和复审
4、软件设计过程中遵循的基本原理
模块化、抽象、逐步求精、信息隐藏和局部化、模块独立

5、什么是模块?模块具有哪几个特征?总体设计主要考虑什么特征?
模块是数据说明、可执行语句等程序对象的集合,可以单独命名且可通过名字来访问。 模块具有输入和输出(参数传递)、功能、内部数据结构(局部变量)和程序代码四个特性。 概要设计主要考虑输入、输出(参数传递)和功能两个特性。

6、什么是模块化?模块设计的准则?
模块化是按规定的原则将一个大型软件划分为一个个较小的、相对独立但又相关的模块。
模块设计的准则:
(1) 改进软件结构, 提高模块独立性:在对初步模块进行合并、分解和移动的分析、精化过程中力求提高模块的内聚,降低藕合。
(2) 模块大小要适中:大约 50 行语句的代码,过大的 模块应分解以提高理解性和可维护性;过小的模块,合并到上级模块中。
(3) 软件结构图的深度、宽度、扇入和扇出要适当。一般模块的调用个数不要超过 5 个。
(4) 尽量降低模块接口的复杂程度;
(5) 设计单入 口、单出口的模块。
(6) 模块的作用域应在控制域之内。

7、6种耦合和6种内聚及其详细解释、作用等
耦合:
(1)无直接耦合:如果两个模块分别从属于不同模块的控制和调用,它们之间 不传递任何信息,没有直接的联系,相互独立,称无直接耦合。
(2)数据耦合:如果两个模块之间有调用关系,相互传递的信息以参数的形式 给出,而且传递的信息仅仅是简单的数据,则称为数据耦合。
(3)标记耦合:如果两个模块之间传递的是数据结构,而且被调用模块不需要 作为参数传递过来的整体数据结构,只需要使用数据结构其中一部分数据元素, 则称为标记耦合。
(4)控制耦合:当一个模块调用另一个模块时,传递的信息控制了该模块的功 能,则称为控制耦合。
(5)公共环境耦合:两个或多个模块共用一个数据环境,称为公共环境耦合。
(6)内容耦合:一个模块直接访问另一个模块的内部数据,一个模块 不通过正 常入口而转入另一个模块内部,一个模块有多个入口,这都属于内容耦合。
内聚:
(1)偶然内聚:模块内的元素之间没有意义上的联系。
(2)逻辑内聚:将逻辑上相同或相似的一类任务放在同一个模块中,每次被调 用时,由传送给模块的参数来确定该模块应完成的某一功能。
(3)时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。
(4)通信内聚:如果模块中所有元素都使用相同的输入数据或者产生相同的输 出数据,则称为通信内聚。
(5)顺序内聚:一个模块中各个处理元素都紧密相关于同一个功能个且必须顺 序执行,此模块的块内联系属顺序内聚。
(6)功能内聚:模块内所有元素属于一个整体,共同完成一个单一功能,缺一 不可,则称为功能内聚。
第六章 详细设计
1、详细设计的目的?
为软件结构图(SC 图或 HC 图)中的每一个模块确定采用的算法和块内数据结构,用某种选定的表达工具给出清晰的描述.

2、详细设计的主要任务?
编写软件的“详细设计说明书”.软件人员要完成的工作:
(1) 为每一个模块确定采用的算法, 选择某种适当的工具表达算法的过程,写出模块的详细过程描述
(2) 确定每一模块使用的数据结构.
(3) 确定模块结构的细节,包括对系统外部的接口和用户界面,对 系统内部其它模块的接口,以及关于模块输入数据、输出数据及局部数据的全部细节.
(4) 为每一个模块设 计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试.
【补充】详细设计的基本任务是什么?
详细设计的基本任务包括:为每个模块进行详细的算法设计;为模块内的数据结构进行设计;对数据库进行物理设计;其他设计;编写详细设计说明书;评审。

3、结构化程序设计的基本原则?
在详细设计中所有模块都使用单入口、单出口的顺序、选择、循环三种基本控制结构。

4、比较面向数据流和面向数据结构两类设计方法的异同?
相同点:
(1) 遵守结构程序设计“由顶向下”逐步细化的原则,并以其为共同的基础;
(2) 均服从“程序结构必须适应问题结构”的基本原则,各自拥有从问题结构(包括数据结构)导出程序结构的一组映射 规则。
不同点:
(1) 面向数据流的设计以数据流图为基础,在分析阶段用DFD表示软件的逻辑模型,在设 计阶段按数据流类型,将数据流图转换为软件结构。面向数据结构的设计以数据结构为基础,从问题的数 据结构出发导出它的程序结构。
(2) 面向数据流的设计的最终目标是软件的最终SC图,面向数据结构的 设计的最终目标是程序的过程性描述。

5.比较 Jackson方法和 LCP方法的异同?
Jackson 与 LCP 设计方法都是以数据结构为出发点,以程序的过程描述为最终目标,设计步骤基本相 似。
它们的主要差别是:
(1)使用不同的表达工具,其中 LCP 方法中的表达工具 Warnier 图比 Jackson 设计方法中的表达工具 Jackson 图有更大的通用性
(2)Jackson 方法的步骤和指 导原则有一定的灵活性,而 LCP 设计方法则更加严密。

6、详细设计有哪几种描述方法?
详细设计的描述方法有图形、表格和语言,其中图形常用结构化程序流程图、盒图和PAD(问题分析图)为描述工具,语言常用过程设计语言(PDL)来作为工具。

7、什么是结构化分析?它的结构化体现在哪里?
结构化分析:使用数据流程图、数据字典、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化说明书的目标文档-需求规格说明书。
结构化体现在将软件系统抽象为一系列的逻辑加工单元,各单元之间以数据流发生关联。

8、结构化程序设计的基本要点是什么?
(1)采用自顶向下、逐步求精的程序设计方法
(2)使用三种基本控制结构构造程序。任何程序都可以由顺序、选择、重复(循环)三种基本控制结构构造,这三种基本结构的共同点是单入口、单出口。
(3)主程序员组的组织形式。

第七章 实现
1、什么是模块测试和集成测试?它们各有什么特点?
模块测试是对每个单独的模块,分别用黑盒和白盒测试技术,测试它的功能是否正确,检查模块控制结构中的特定路径并发现最大数量的错误。其特点是:主要应用白盒测试的技术,对多个模块的测试可以并发的进行。
集成测试是把模块装配在一起形成完整的软件包,在装配的同时进行测试。特点是:可能发生接口问题。

2、软件测试的基本任务?
软件测试是按照特定的规则,发现软件错误的过程;好的测试方案是尽可能发现迄今尚未现错误的。测试成功的测试方案是发现迄今尚未发现错误的测试;

3、测试与调试的主要区别?
(1) 测试从一个侧面证明程序员的失败;调试证明程序员的正确;
(2) 测试从已知条件开始,使用预先定义的程序,且有预知的结果,不可预见的仅是程序否通过测试;调试从不可知内部条件开始,除统计性调试外,结果是不可预见的;
(3) 测试有计划并且要进行测试设计;调试不 受时间约束;
(4) 测试是发现错误、改正错误、重新测试的过程;调试是一个推理的过程;
(5) 测试执行 是有规程的;调试执行要求程序员进行必要的推理;
(6) 测试由独立的测试组在不了解软件设计的件下完 成;调试由了解详细设计的程序员成;
(7) 大多数测试的执行和设计可由工具支持;调试用的工具主要 是调试器。

4、人工复审的方式和作用?
人工复审的方式:代码会审、走查和排练和办公桌检查;
人工复审的作用:检查程序的静态错误。

5、什么是黑盒测试?黑盒测试主要采用的技术有哪些?
黑盒测试也称为功能测试,它着眼于程序的外部特征,而不考虑程序的内部逻辑结构。测试者把被测程序看成一个黑盒,不用关心程序的内部结构。黑盒测试是在程序接口处进行测试,它只检查程序功能是否能 按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信 息(如数据库或文件)的完整性。
黑盒测试主要采用的技术有:等价分类法、边沿值分析法、错误推测法和因果图等技术。

6、什么是白盒测试?白盒测试主要采用的技术有哪些?
测试者了解被测程序的内部结构和处理过程,对程序的所有逻辑路径进行测试,在不同点检查程序状态, 确定实际状态与预期状态是否一致。
白盒测试主要采用的技术有:路径测试技术和事务处理流程技术,对包含有大量逻辑判断或条件组合的程序采用基于逻辑的测试技术。

7、路径测试技术中几种主要覆盖的含义?
语句覆盖:至少执行程序中所有语句一次。
判定覆盖:使被测程序中的每一个分支至少执行一次。故也称为分支覆盖。
条件覆盖:执行所有可能的穿过程序的控制路流程。
条件组合测试:设计足够的测试用例,使每个判定中的所有可能条件取值组合至少执行一次。

8、等价分类法的测试技术采用的一般方法?举例说明?
(1) 为每个等价类编号;
(2) 设计一个新的测试 方案,以尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步骤,直到所有有效等价类被覆盖为止。
(3) 设计一个新的测试方案,使它覆盖一个尚未被覆盖的无效等价类, 重复这一步骤,直到所有无效等价 类被覆盖为止。

9、软件测试的一般步骤?
单元测试、子系统测试、系统测试、验收测试、平行测试。

10、软件测试的策略?
(1) 在任何情况下都应使用边界值分析的方法。
(2) 必要时用等价类划分法补充测 试方案。
(3) 必要时再用错误推测法补充测试方案。
(4) 对照程序逻辑,检查已设计出的测试方案。
(5) 根据对程序可靠性的要求采用不同的逻辑覆盖标准,再补充一些测试方案。

11、测试的定义及目的:
①测试是为了发现程序中的错误而执行的过程。
②好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
③成功的测试是发现了至今为止尚未发现的错误的测试。

12、什么是动态测试?为何静态测试方法往往比动态测试方法效率高?
动态测试是通过运行软件来检验其动态行为和运行结果的正确性。 动态测试是实际运行被测程序,输入相应的测试用例,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性。
静态测试是对被测程序进行特性分析的一些方法的总称,这种方法的主要特性是不利用计算机运行被测试的程序,而是采用其他手段达到检测的目的。因而在代码产生之前便可对各种文档进行测试,其效率当然高于动态测试。

13、单元测试与集成测试相关概念。
(1)请简述单元测试的主要内容?
模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试
(2)在单元测试中,所谓单元是如何划分的?
单元测试的对象通常是软件设计的最小逻辑单元,单元的划分在面向过程的结构化程序中一般是函数或子过程,在面向对象的程序中可以是类或类的成员函数。
(3)如果开发时间紧迫,是否可以跳过单元测试而直接进行集成测试?
不可以。因为没有经过单元测试的模块会遗留大量的缺陷到集成测试阶段,而在集成测试阶段对这些缺陷定位困难,导致后续工作展开困难,修复缺陷成本成指数级增长。
(4)集成测试也叫组装测试又叫联合测试,为何要进行集成测试?
在的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。

14、软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?
软件测试要经过的步骤是:单元测试→子系统测试→集成测试→确认测试→平行运行
单元测试对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。该阶段涉及编码和详细设计文档。
集成测试是为了检查与设计相关的软件体系结构的有关问题,也就是检查概要设计是否合理有效。
确认测试主要是检查已实现的软件是否满足需求规格说明书中确定了的各种需求。
系统测试是把已确认的软件与其他系统元素(如硬件、其他支持软件、数据、人工等)结合在一起进行测试。以确定软件是否可以支付使用。

15、调试的目的是什么?调试有哪些技术手段?
调试则是在进行了成功的测试之后才开始的工作。调试的目的是确定错误的原因和位置,并改正错误,因此调试也称为纠错(Debug)。调试的技术手段有简单的调试方法、归纳法、演绎法和回溯法等。
第八章 维护
1、在软件开发过程中应该采取哪些措施来提高软件产品的可维护性?
在每个阶段结束前的技术审查和管理复查中,应该着重对可维护性进行复审过程中,应该对将来要改进的部分和可能要改的部分加以注意指明,应该讨论软件的可移植性问题,考虑可能影响软件维护的系统界面。在设计和编码过程中应该尽量使用可重用的软件构件,每个测试步骤都可以暗示在软件正式交付使用之前,程序中可能需要做预防性维护的部分。在完成每项维护工作之后,都应该对软件维护本身仔细认真地复审。

2、维护的定义
软件维护是指软件系统交付使用以后,为了改正软件运行错误, 或者因满足新的需求而加入新功能的修改软件的过程

3、为什么说软件的维护是不可避免的?
因为软件的开发过程中,一般很难检测到所有的错误,其次软件在应用过程中需要随用户新的要求或 运行环境的变化而进行软件的修改或完成功能的增删等,为了提高软件的应用水平和使用寿命,软件的维 护是不可避免的。
4、软件的维护一般分为哪几类?
①为了纠正正在使用过程中暴露出来的错误而进行的改正性维护。
②为了适应外部环境的变化而进行的适应性维护
③为了改进原有的软件而进行的完善性维护
④为了改进将来的可维护性和可靠性而进行的预防性维护

5、影响软件维护的因素有哪些?
开发方法:采用模块化详细设计文档有助于理解软件的结构、界面功能和内部流程;开发过程中严格 而科学的管理规划及清晰可靠的文档资料对发生错误后的理解与纠错是至关重要的;开发过程中模块的独 立程度越高,对软件修改越容易,对软件的改进和移植越方便。
开发条件:软件开发及维护人员的水平决定了软件开发的质量和维护的效率;开发过程中使用标准的 程序设计语言和标准的操作系统接口,可以大大提高软件的可维护性;在测试过程中用例的有效性,可极 大地减少软件存在的错误;其次使用规范化的文档资料可为维护提供更好的依据。

6、软件维护困难主要表现在什么方面?
(1)理解别人写的程序通常很困难
(2)需要维护的软件文档资料太少
(3)当要求对软件维护时,不能指望由开发人员给人们仔细说明文档
(4)绝大多数软件在设计时没有考虑将来的修改
(5)软件维护不是一项吸引人的工作

7、决定软件可维护性的因素?
(1) 软件的可理解性、可测试性、可修改性、可移植性、可重用性
(2) 文档描述符合要求、用户文档简洁明确、系统文档完整并且标准

8、简述提高可维护性的方法。
(1)建立明确的软件质量目标;
(2)利用先进的软件开发技术和工具;
(3)建立明确的质量保证工作;
(4)选择可维护的程序设计语言;
(5)改进程序文档。

第九章 面向对象方法学引论
1、什么是面向对象方法学?它有哪些优点?
OO=objects+classes+inheritance+communication with messages 也就是说,面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。
尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。
优点:
与人类习惯的思维方法一致、稳定性好、可重用性好、较易开发大型软件产品、可维护性好。

2、什么是“对象”?它与传统的数据有何异同?
人们把客观世界中的实体抽象为问题域中的对象。
异同:它不是被动地等待外界对它施加操作,相反,它是进行处理的主体。必须发消息请求对象主动地执行它的某些操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。
(对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务。)

3、什么是“类”?
类是对具有相同属性和行为的一个或多个对象的描述。

4、什么是“继承”?
子类自动地共享基类中定义的数据和方法的机制。

5、什么是模型?开发软件为何要建模?
模型就是为了理解而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
软件开发建立模型是为了帮助我们思考问题、定义术语、在选择术语时作出适当的假设,并且有助于保持定义和假设的一致性。

6、面向对象的方法学方程
OO=objects+classes+inheritance+communication with messages
对象 类 继承 消息

7、面向对象方法学的优点:
①与人类习惯的思维方法一致、②稳定性好、③可重用性好、④较易开发大型软件产品
⑤可维护性

12、面向对象方法学包含哪些核心概念?简述之
(1) 对象:对象是现实世界中个体或事物的抽象表示,是其属性和相关操作的封装。
(2) 类:类是对具有相同属性和行为的一个或多个对象的描述。
(3) 继承:类之间的继承关系是现实世界中遗传关系的模拟,它表示类之间的内在联系 以及对属性和操作的共享。
(4) 聚集:现实世界普遍存在部分—整体关系。
(5) 消息:消息传递是对象与其外部世界相互关联的唯一途径。

13、说明面向对象的特征?
(1)对象唯一性。每个对象都有自身唯一的标识,在对象生存期中,其标识不变,不同的对象不能有不同的标识。
(2)分类性。是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类
(3)继承性。是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
(4)多态性。是指相同的操作或函数过程可以作用于多种类型的对象上并获得不同的结果。

第十一章 面向对象设计
1、面向对象设计应该遵循哪些准则?简述每条准则的内容,并说明遵循这条准则的必要性
模块化、抽象、信息隐藏、弱耦合、强内聚、可重用。

2、简述有助于提高面向对象设计质量的每条主要启发规则的内容和必要性。
(1)设计结果应该清晰易懂,使设计结果清晰、易读、易懂,是提高软件可维护性和可重用性的重要措施;
(2)一般、特殊结构的深度应适当,应该使类等级中包含的层次数适当;
(3)设计简单的类,应该尽量设计小而简单的类,以便于开发和管理;
(4)使用简单的协议,一般说来,消息中的参数不要超过3个;
(5)使用简单的服务,一般只有3—5行源程序语句,可以用仅含一个动词和一个宾语的简单句子描述它的功能;
(6)把设计变动减至最小,即使出现必须修改设计的情况,也应该使修改的范围尽可能小。

3、为什么说类构件是目前比较理想的可重用软构件?它有哪些重用方式?
具备可重用的软构件应有的特点:独立、可塑、接口清晰(文档详尽)。
重用方式有:实例重用、继承重用和多态重用。

第十二章 面向对象实现
1、面向对象实现应该选用哪种程序设计语言?为什么?
(1)将来能否占主导地位,为了使自己的产品在若干年后仍然具有很强的生命力;
(2)可重用性,采用面向对象方法开发软件的基本目的和主要优点,是通过重用提高软件生产率;
(3)类库和开发环境,决定可重用性的因素,不仅仅是面向对象程序语言本身,开发环境和类库也是非常要的因素;
(4)其他因素,对用户学习面向对象分析、设计和编码技术所能提供的培训服务;在使用这个面向对象语言期间能提供的技术支持;能提供给开发人员使用的开发工具、开发平台、发行平台;对机器性能和内存的需求;集成已有软件的容易程度等。

2、面向对象程序设计语言主要有哪些技术特点?
(1)支持类与对象概念的机制、(2)实现整体部分(即聚集)结构的机制
(3)实现一般特殊(即泛化)结构的机制、(4)实现性和服务的机制
(5)类型检查、(6)类库、(7)效率、(8)持久保存对象、(9)参数化类、(10)开发环境

3、良好的面向对象程序设计风格主要有哪些准则?
良好的面向对象程序设计风格,即包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念(例如,继承性)而必须遵循的一些新准则。
提高可重用性:1、提高方法的内聚;2、减小方法的规模;3、保持方法的一致性;4、把策略与实现分开;5、全面覆盖;6、尽量不使用全局信息;7、利用继承机制。
提高可扩充性:1、封装实现策略;2、不要用一个方法遍历多条关联链;3、避免使用多分支语句;4、精心确定公有方法。
提高健壮性:1、预防用户的操作错误;2、检查参数的合法性;3、不要预先确定限制条件;4、先测试后优化。

4、测试面向对象软件时,单元测试、集成测试和确认测试各有哪些新特点?
面向对象的单元测试,最小的可测试单元是封装起来的类和对象。测试面向对象软件时,不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试。
面向对象的集成测试,主要有下述两种不同的策略:1、基于线程的测试。这种策略把响应系统的一个输入或一个事件所需要的那些类集成起来。
基于使用的测试。面向对象的确认测试,面向对象软件的确认测试也集中检查用户可见的动作和用户可识别的输出。

5、测试面向对象软件时,主要有哪些设计单元测试用例的方法?
随机测试、划分测试、基于故障的测试

6、测试面向对象软件时,主要有哪些设计集成测试用例的方法?
多类测试、从动态模型中导出测试用例。也可采用随机测试、划分测试的方法。

7、测试面向对象软件时,主要有哪些设计确认测试用例的方法?
可以采用传统的黑盒方法,也可以采用基于情景的方法

第十三章 软件项目管理
1、一个程序能既正确又不可靠吗?解释一下自己的答案。
答:能。所谓软件可靠性,是程序在给定的时间间隔内按照规格说明书的规定成功地运行的概率.通常认为,软件可靠性既包含正确性又包含健壮性,也就是说,不仅在预定环境下程序应该能正确地完成预期功能,而且在硬件发生故障,输入的数据无效或用户操作错误等意外环境下,程序也应该能做出适当的响应. 如果一个程序在预定环境下能够正确地完成预期的功能,但是在意外环境下不能做出适当的响应,则该程序就是既正确又不可靠

2、什么是基线?为什么要建立基线?
答:是已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。建立基线的三大原因是:重现性、可追踪性和报告。重现性是指及时返回并重新生成软件系统给定发布版的能力,或者是在项目中的早些时候重新生成开发环境的能力。可追踪性建立项目工件之间的前后继承关系。其目的在于确保设计满足要求、代码实施设计以及用正确代码编译可执行文件。报告来源于一个基线内容同另一个基线内容的比较。基线比较有助于调试并生成发布说明。建立基线后,需要标注所有组成构件和基线,以便能够对其进行识别和重新建立。

3、配置审计和技术复审有何不同?可否把它们的功能放在一次复审终完成?
答:正式的技术复审关注被修改后的配置对象的技术正确性。复审者审查该对象以确定它与其他软件配置项的一致性,并检查是否有遗漏或副作用,软件配置审计通过评估配置对象的那些通常不在复审过程中考虑的特征,而成为对正式技术复审的补充。

4、CMM的基本思想是什么?为什么要把能力成熟度划分为5个等级?
CMM的基本思想是,由于问题是由我们管理软件过程的方法不当引起的,所以软件技术的运用并不会自动提高软件的生产率和质量。把能力成熟度划分成5个等级的原因是:对软件的改进不可能一撅而就。

四、遇到不会的问题

1.”对不起老师,这个知识点我记得不是很清楚,但是,跟它相关的XXX,我知道一些,blabla…"
2.“不好意思老师,我对这一块掌握不是很熟,但是就我的理解,这个问题应该是这样的 blabla…”

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

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

相关文章

蓝桥杯第19天(Python)(疯狂刷题第2天)

题型: 1.思维题/杂题:数学公式,分析题意,找规律 2.BFS/DFS:广搜(递归实现),深搜(deque实现) 3.简单数论:模,素数(只需要…

国产ARM+FPGA架构在“能源电力”中的典型应用详解

能源电力作为国民经济发展的“先导产业”和“基础行业”,面对当今复杂多变的国际形势,国内能源电力企业为追求更高的自主可控,正不断寻求各种经过行业验证的国产方案。 而单ARM架构已很难应对能源电力多通道/高速AD数据采集、处理、存储和显示的应用场景。目前,ARM + FPGA异…

Linux系统-gunzip命令简介以及常用参数

命令 – 解压提取文件内容 gzip命令 gzip命令是一种数据压缩方式,它是在Linux操作系统中常用的一种压缩工具,是GNU项目中自带的压缩程序之一。它是采用Lempel-Ziv编码(LZ77)和哈夫曼编码(Huffman Coding)进行压缩数据的,被广泛应用于软件发…

用Qt编写STM32烧录软件(ISP模式)代码

1.前言 之前写了一篇【用Qt编写STM32烧录软件(ISP模式)】,但是在文中没有具体的实现代码。 现在补上,各位有兴趣的同学可以参考以下。但是代码里面还有很多没有完善的,必定会存在一些bug,目前只是堪堪能用…

redis-数据结构、io

1.redis 数据结构 1.1 字典 kv是什么 每个键值对都会是一个dictEntry set hello word为例,因为Redis是KV键值对的数据库,每个键值对都会有一个dictEntry(源码位置:dict.h) 简单描述 加载原理 server 启动,加载redisdb进内存形…

厉害了!Facebook优惠广告让你的广告预算翻倍

如果你是一个企业主或者市场营销人员,你可能已经知道Facebook广告平台是一个强大的数字广告工具,可以帮助你推广产品和服务,并且吸引潜在客户到你的网站上。 而今天,我们将教你如何创建和投放Facebook优惠广告以及如何利用这些广…

【Redis学习】Redis事务

理论简介 是什么 可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。 能干嘛 一个队列中,一次性、顺序性、排他性的执行一系列命令 Redis事务 V…

花3个月面过华为测开岗,拿个30K不过分吧?真不是凡尔赛。。。

背景介绍 美本计算机专业,代码能力一般,之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发,第二份实习由于大三暑假回国的时间比较短(小于两个月),于是找的实…

Apsara Clouder阿里巴巴开发规范认证

apsara n. 飞天;阿普萨拉 俗话说:“没有规矩,不成方圆。”今天我们来介绍一下,阿里巴巴对于开发规范的考试认证。 报名地址: https://edu.aliyun.com/certification/cldt04 1.证书 我们先来看一下考试通过的证书&…

vue 实现左滑图片验证

前言 众所周知,网页中滑动图片验证一直是各大网站、移动端的主流校验方式,其主要作用是为了区分人和机器以及为了防止机器人程序暴力登录或攻击从而设置的一种安全保护方式。从开发的角度来看要想实现这个功能还是需要一点时间的,但其实网上已…

C++源码剖析——forward_list

前言:之前看过侯老师的《STL源码剖析》但是那已经是多年以前的,现在工作中有时候查问题和崩溃都需要了解实际工作中使用到的STL的实现。因此计划把STL的源码再过一遍。   摘要:本文描述了llvm中libcxx的forward_list的实现。   关键字&am…

【排序算法】排序算法介绍及插入排序 ( 直接插入排序 希尔排序 )

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录1.排序的概念和运用1…

关于Warning: World-writable config file ‘/etc/mysql/my.cnf‘ is ignored

不知道那个大兄弟,更改了my.cnf的权限为 0777 登陆mysqll的时候提示:Warning: World-writable config file /etc/mysql/my.cnf is ignored 里面的配置被忽略了, my.cnf不起作用 如果不是安装在docker里面的话,直接 chmod 0644 /etc/mysql/…

Java每日一练(20230405)

目录 1. 地下城游戏 🌟🌟🌟 2. 汇总区间 🌟🌟 3. 寻找旋转排序数组中的最小值 II 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C…

Selenium被检测为爬虫,怎么屏蔽和绕过

01、Selenium 操作被屏蔽 使用selenium自动化网页时,有一定的概率会被目标网站识别,一旦被检测到,目标网站会拦截该客户端做出的网页操作。 比如淘宝和大众点评的登录页,当手工打开浏览器,输入用户名和密码时&#x…

Java SE 基础 (6) 第一个Java程序

开发环境已经搭建完毕,可以开发我们第一个Java程序了。 Java程序开发三步骤:编写、编译、运行。 编写Java源程序 public class HelloWord {public static void main(String[] args) {System.out.println("HelloWord!");} } 第一个 HelloWo…

蓝桥杯 路径

答案 import mathdef lcm(i,j):m math.gcd(i,j)return i*j//m n 2021 dp [float(inf)]*2022 dp[1] 0 for i in range(1,n1):for j in range(i1,i22):if j > n:breakdp[j] min(dp[j],dp[i]lcm(i,j)) print(dp[n]) 对dp[j] min(dp[j],dp[i]lcm(i,j))的解析:…

JAVASE 继承

文章目录继承1.为什么需要继承2.继承的概念3.继承的语法4.父类成员访问4.1 子类中访问父类的成员变量4.2 子类中访问父类的成员方法5 super关键字6.子类的构造方法7.super和this8.再谈初始化9.protected关键字10.继承方法11.final 关键字12.继承与组合继承 1.为什么需要继承 …

【C++笔试强训】第十天

选择题 解析:内联函数(inline)一般用于代码较少,代码块里面没有递归且频繁调用的函数,是一种以空间换时间(不是指内存,而是指令变多编译出来的可执行程序会变大)的做法。内联函数在预…

49天精通Java,第14天,Java泛型方法的定义和使用

目录一、基本介绍1、Java泛型的基本语法格式为:2、在使用泛型时,还需要注意以下几点:二、泛型的优点1、类型安全2、消除强制类型转换3、更高的效率4、潜在的性能收益三、常见泛型字母含义四、使用泛型时的注意事项五、泛型的使用1、泛型类2、…
最新文章