文章目录
-
- 概论
-
- 软件产品的特点:
- 软件就是程序这个观点正确吗?给出原因(2017)。
- 软件危机、软件危机的特点以及软件危机产生的原因:
- 什么是软件工程?软件工程的出现主要是为了解决什么?
- 什么是软件过程?软件过程和软件工程方法学有什么关系(书+真题)?
- 为什么说分阶段的生命周期模型有助于软件项目管理(书)?
- 什么是里程碑?它应该有哪些特征(书)?
- 开发一个软件,功能是把读入的浮点数开平方,所得到的结果应该精确到小数点后4位,一旦实现并测试完以后,该产品将被抛弃。你打算选用哪种软件生命周期模型?为什么?(书)
- 假如你是一家软件公司的项目经理, 职责是管理该公司已经被广泛使用的图片处理软件新版本的开发。由于市场竞争激烈,公司规定了严格的完成期限并且已经对外公布。你打算采用哪种软件生命周期模型?为什么(书、2017)?
- 在需求分析和设计阶段建立原型的好处有哪些(2016)?
- 螺旋模型和Rational统一过程有什么相似之处?差异(书)?
- 说明敏捷开发的适用范围(书)。
- 对于螺旋模型的理解?
- 举例CASE工具
- 结构化分析与设计
- 编码和测试、质量保证
- 维护
- 面向对象方法学
-
- 面向对象分析建模的工具有哪些?面向对象分析时类和对象的静态关系主要有哪几种(2017)?
- 面向对象范型开发软件时与用结构化范型开发软件时,软件的生命周期有什么不同之处?这种差异带来了什么后果(书)
- 为什么在开发大型软件时,采用面向对象范型比采用结构化范型较易取得成功(书)?
- 对象和属性有什么区别(书)?
- 对象是什么,以及对象和数据实体的区别:
- 什么是模型?开发软件时为什么要建立模型(书)?
- 为什么夏利牌小汽车时小汽车类的特化,而发动机类不是?
- 为什么说面向对象方法和人类习惯的思维解题方法比较一致(书)?
- 面向对象方法学的优点以及原因:
- 面向对象方法学中其他的概念:
- 面向对象中类的封装性是什么?
- 面向对象方法学的几种模型和其间的关系:
- 面向对象分析与设计
- 面向对象实现
- 软件项目管理
- 其他
概论
软件产品的特点:
- 软件是逻辑部件而不是物理部件,缺乏可见性是其显著特征,因此,管理和控制软件开发过程相当困难。此外,软件维护通常意味着改正或修改原有的设计,从而使得软件维护困难。
- 软件的另一个突出特点是规模庞大,程序复杂性会随着程序规模增加以指数速度上升。状态数巨大,难以完全预见每种情况。
软件就是程序这个观点正确吗?给出原因(2017)。
不正确,软件等于程序加文档加数据。
- 文档是软件的一个重要组成部分,在软件的开发过程中起着非常重要的作用。
- 软件开发的每一个阶段都有响应的文档,它是开发人员与用户以及开发人员与用户管理人员之间交流的媒介。
- 文档是软件在不同阶段的表现形式。
- 程序和文档必须一致,软件才有价值。
- 文档质量直接决定软件质量的高低。
- 文档是软件测试和维护的依据,在没有文档或文档不全的情况下对大型软件进行测试和维护是困难的。
- 文档是软件可重用的依据。
软件危机、软件危机的特点以及软件危机产生的原因:
软件危机两个方面的问题:
如何开发软件,以满足对软件日益增长的需求。
如何维护数量不断膨胀的已有软件。
特点(7):
- 对软件开发成本和进度的估算不准确 – 项目管理
- 软件成本占计算机系统比例上升 – 项目管理
- 成果用户不满意 – 需求分析
- 产品质量靠不住 – 质量保证
- 软件不可维护 – 维护
- 没有合适文档 --文档与维护
- 软件开发生产率提高的速度,远远跟不上计算机应用普及的趋势 – 总结
原因:
客观上,软件产品的特点。
主观上,软件工程师的错误认识。包括:
忽视需求分析的重要性,不能明确用户的需求;认为软件开发就是写程序;轻视软件维护;忽视代码评审和软件测试。
缺乏正确的理论指导,包括缺乏有力的方法学和工具。
什么是软件工程?软件工程的出现主要是为了解决什么?
软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
软件工程的出现就是为了解决软件危机的两个方面:
如何开发软件,以满足对软件日益增长的需求。
如何维护数量不断膨胀的已有软件。
什么是软件过程?软件过程和软件工程方法学有什么关系(书+真题)?
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作量。
软件过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需的管理措施,以及标志软件开发各个阶段任务完成的里程碑。
通常把软件生命周期全过程使用的一整套技术方法的集合称为方法学,也成为范型。软件工程方法学包含三个要素:方法、工具和过程。(也即软件过程是软件工程方法学的一部分)
为什么说分阶段的生命周期模型有助于软件项目管理(书)?
软件是计算机的逻辑部件而非物理部件。其显著特点是缺乏可见性。因此,管理和控制软件开发过程相当困难。
分阶段的生命周期模型提高了软件项目的可见性,管理者可以把各个阶段任务的完成作为里程碑来对软件开发过程进行管理,把阶段划分的更细就能更密切的监控软件项目的进展情况。
什么是里程碑?它应该有哪些特征(书)?
里程碑是用来说明项目进展情况的事件。通常,把一个开发活动的结束或者一项开发任务的完成定义为一个里程碑。
开发一个软件,功能是把读入的浮点数开平方,所得到的结果应该精确到小数点后4位,一旦实现并测试完以后,该产品将被抛弃。你打算选用哪种软件生命周期模型?为什么?(书)
瀑布模型。
- 需求明确,实现开平方功能的算法也很成熟,因此,无需通过原型来分析需求或验证设计方案。
- 一旦实现并测试完后将被抛弃,因此无需使用有助于提高软件可维护性的增量模型或者螺旋模型来开发软件。
假如你是一家软件公司的项目经理, 职责是管理该公司已经被广泛使用的图片处理软件新版本的开发。由于市场竞争激烈,公司规定了严格的完成期限并且已经对外公布。你打算采用哪种软件生命周期模型?为什么(书、2017)?
增量模型。
原因:
- 增量模型开发软件时可以并行完成开发工作,因此能够加快开发进度。
- 旧版本相当于一个原型,通过收集用户对旧版本的反映,较容易确定用户对新版本的需求,没必要专门建立原型来分析用户需求。
- 公司软件工程师对这种软件很熟悉,有开发该种软件的丰富经验,具有采用增量模型开发需要的技术水平。
- 今后很可能还要开发新版本,因此需要把体系结构设计成开放式的,有利于今后的改进和扩充。
在需求分析和设计阶段建立原型的好处有哪些(2016)?
- 增进开发人员和用户对系统需求的一致理解,明确软件需求,尤其是功能含糊的需求。
- 提供了有力的学习手段,能够使用户尽早解除系统。
- 可以用来识别或者化解风险(螺旋模型)
- 有的原型可以原封不动地成为产品,有的略加修改就可以最终系统的一个组成部分,有利于系统的最终建成。
螺旋模型和Rational统一过程有什么相似之处?差异(书)?
RUP没在真题里面见过,关于RUP的题暂时不整理了,下面还有两道:
试比较Rational统一过程和敏捷过程
试讨论微软过程和RUP以及敏捷过程的关系。
说明敏捷开发的适用范围(书)。
敏捷过程具有对变化和不确定性的更快速、更敏捷的反应特性,而且在快速的同时能够保持可持续的开发速度。因此比较适用于开发可用资源以及开发时间都有苛刻约束的小型项目。
对于螺旋模型的理解?
螺旋模型是一种风险驱动型过程模型。基本思想是使用原型以及其他方法尽量降低风险。可以看作每个阶段之前都增加了风险分析过程的快速原型模型。主要适用于开发内部大型软件项目。
保留了经典模型中逐步细化的方法,同时纳入迭代思想。
优点:有利于已有软件的重用、有助于把软件质量作为软件开发的一个重要目标、减少了过多测试或者测试不足带来的风险、软件开发和维护没有本质区别。
举例CASE工具
Power Designer/Rational Rose
WinRunner/Microsoft Project
Microsoft Visio/Vss
结构化分析与设计
数据流图和数据字典的关系是什么(2017)?
DFD是一种图形化技术,描绘信息流和数据从输入、移动到输出的过程中经受的变换。数据流图中没有具体的物理部件,只是描绘在软件中流动和被处理的逻辑过程。数据流图时系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它。因此是分析员和用户之间极好的通信工具。
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素定义的集合。
数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不严格,没有数据流图,数据字典也难于发挥作用。只有数据流图和对数据流字典中每个元素的精确定义放在一起,才能共同够成系统的规格说明。
共同够成系统的逻辑模型。
为什么数据流图要分层?画分层DFD要遵循哪些原则(2015)?
为了控制复杂性,对数据流图分层,就能把复杂的数据简单化。
原则:自顶向下,逐步求精
具体原则:数据守恒和数据封闭原则。
加工分解的原则:父图和子图平衡的原则,合理使用文件的原则。
情景与描述了所有可能序列的状态图之间有什么关系(书)?
情景仅仅是通过部分或者全部状态图的一条路径,也就是说,情景仅仅描述了系统的某个典型行为,而状态图描述了系统的所有行为。
在程序流程图中的每个节点都必须有一条从开始节点到该节点本身的路径,以及一条从该节点到结束节点的路径。为什么数据流图没有关于节点之间可达性的类似规则(书)?
数据流图不描述控制。因此在同一个数据流图中两个处理之间可能没有通路。如果每个处理都是用不同的输入数据,并且生成不同的输出数据,而且一个处理的输出不用做另一个处理的输入,那么在他们之间没有弧。
总体设计五准则(设计原理)
模块化和模块独立、抽象、信息隐藏、逐步求精、局部化
模块的作用范围和控制范围是什么(2015)?
作用范围是指受模块内一个判定影响的所有模块集合。
控制范围是模块本身以及所有下属模块(直接与间接从属于它)的模块集合。
衡量模块独立性的两个标准及其含义(2017)?
内聚性:块内联系,模块的功能强度的度量,一个模块内部各个元素彼此结合的紧密程度的度量,模块内元素联系越紧密,内聚性越高。
耦合性:块间联系,软件系统结构中,各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,耦合性越强,模块独立性越差。
详细设计的目的和主要任务?
主要目的:确定怎样具体实现所要求的系统。
主要任务是过程设计、接口设计和数据设计
过程设计:设计软件体系结构中所包含的每个模块的实现算法
数据设计:设计软件中所需要的数据结构
接口设计:设计软件内部各个模块之间、软件与协作系统之间以及软件和使用它的人之间的通信方式,这里面包含了用户界面设计。
其中,过程设计是最主要的。