1传统"瀑布模型"的主要缺陷是:
    阶段与阶段划分完全固定,阶段间产生的大量文档,极大地增加了工作量。
    由于开发模型呈线性,所以当开发成果尚未经过测试时,用户无法看到软件的效果。这样,软件与用户见面的时间较长,也增加了一定的风险。
    前面未发现的错误传到后面的开发活动中,可能会扩散,进而可能会造成更不理想的效果。
    造成问题的主要原因是:⑴现实的项目开发很少按"瀑布模型"的顺序进行,用户往往难以清楚地给出所有的需求,因此,使用该模型开发软件会存在许多步确定的因素。开发者常常被不必要地耽搁。
  2软件工程的目标就是建造高质量的软件。但是目前的软件开发面临着许多问题
    对软件开发成本和进度的估计常常很不准确。
    用户常对“已完成的”软件系统不满意。
    软件产品的质量往往靠不住。
    软件常常很难维护。
    软件常常缺乏适当的文档资料。
    软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
软件成本在计算机系统总成本中所占的比例逐年上升。
3.时间内聚是指某一软件运行中有几个动作经常需要在同一个时间段内完成。
    公共耦合是指若干个模块共同享有对公用数据区的读和写的访问权。
4软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。通常有四项基本维护:纠错性维护、完善性维护、适应性维护以及预防性维护等。
5序言性注释通常放在每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序具有引导作用。
  序言性注释一般包含下列内容:
  ① 程序标题;有关该模块的功能和目的说明;主要算法;
  ② 接口说明:包括调用形式,参数描述、子程序清单;
  ③ 有关数据描述(重要的变量及其用途,约束或限制条件,以及其他有关信息);
  ④ 模块位置(在哪一个源文件中,或隶属于哪一个软件包);
  ⑤ 开发简历 模块设计者,复审者,复审日期,修改日期及有关说明等。
1.什么是需求分析?需求分析阶段的基本任务是什么?
需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的 目的、范围、定义和功能时所要做的所有的工作。 需求分析阶段的基本任务是:要准确的定义新系统的目标,为了满足用户需要, 回答系统必须“做什么”的问题。
2. 为什么说面向对象方法学比传统方法学在稳定性方面要好?
传统的软件开发以算法为核心,开发过程基于功能分析和功能分解。用传统方法所建立起来的软件系统的结构紧密依赖于系统所要完成的功能, 当功能需求发生变化时将引起软件结构的整体修改。事实上,用户需求变化大部分是针对功能的,因此这样的软件系统是不稳定的。面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。它的基本作法是用对象模拟问题领域中的实体,以对象间的联系刻画实体间的联系。当对系统的功能需求变化时并不会引起软件结构的整体变化,仅仅只需要作一些局部性的修改。总之,由于现实世界中的实体是相对稳定的,因此,对象为中心构造的软件系统也是比较稳定的。
3. 什么是蜕变测试?编写蜕变测试的测试用例关键点是什么?
蜕变测试依据被测软件的领域知识和软件的实现方法建立蜕变关系(Metamorphic Relation, MR),利用蜕变关系来生成新的测试用例,通过验证蜕变关系是否被保持来决定测试是否通过。编写蜕变测试的测试用例关键点就是出蜕变关系。
4. 什么叫模块化?设计一个系统时是否分的模块越多就越好说明原因。
模块化就是把程序划分成可独立命名且独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
不一定。当模块数目增加时每个模块的规模将减小,开发单个模块需要的成本 (工作量)确实减少了,但是,随着模块数量增加,设计模块间接上所需要的工作量也将增加,根据这两个因素,得出设计一个系统时并不一定模块越多越好。
5. 画数据流图要注意哪些事项?
答:⑴ 设计数据流图时只需考虑系统必须完成的基本逻辑功能,不需要考虑怎样计算机软件系统包括 具体的实现这些功能。
从顶层数据流开始。
并不是所有数据存储和数据流都能直接从问题描述中提取出来;
当进一步分解将涉及如何具体地实现一个功能时,就不应该在分解了;
数据流图中个成分的命名要仔细推敲,看是否恰当;
1.就程序设计语言的工程特性而言,对程序编码有哪些要求?
就程序设计语言的工程特性而言,对程序编码有如下要求: 就程序设计语言的工程特性而言,对程序编码有如下要求:
(1)可移植性 2)开发工具的可利用性 3)软件的可重用性 4)可维护性
2. 3种方法计算下图所示程序图的环形复杂度。
环形复杂度等于程序图中的区域数
图中所示程序图共有5个区域,因此它的环形复杂度等于5
环形复杂度等于程序图中边的条数减去结点数之后再加2
图中所示程序图共有11条边,8个结点,所以它的环形复杂度为
11 - 8 + 2 = 5
环形复杂度等于程序中的判断数加1
流图中有2条输出弧的结点(例如图中的结点cf)对应于程序中的1个判断,有n( n > 2 )条输出弧的结点(例如图中的结点a3条输出弧)对应于程序中的n - 1个判断。因此,图中所示流图的环形复杂度为
2 × 1 + 1 × ( 3 - 1 ) + 1 = 5
3. 对象和属性之间有何区别?
答:对象是对客观世界实体的抽象,它是描述实体静态属性的数据和代表实体动态行为的操作结合在一起所构成的统一体。属性只不过是对象的一种特性,它是组成对象的一种成分。
4.应该依据什么准则来评价用例图?
答:用例图是从用户的观点来描述系统的功能,因此,必须包含用户关心的所有关键功能。
5. 画数据流图要注意哪些事项?
答:⑴ 设计数据流图时只需考虑系统必须完成的基本逻辑功能,不需要考虑怎样 具体的实现这些功能。
从顶层数据流开始。
并不是所有数据存储和数据流都能直接从问题描述中提取出来;
当进一步分解将涉及如何具体地实现一个功能时,就不应该在分解了;
数据流图中个成分的命名要仔细推敲,看是否恰当;
1. 从开发者角度进行程序质量的评审时,软件的结构包括哪些主要内容?
答:⑴功能结构:包括数据结构、功能结构、及其之间的关系。
⑵功能的通用性。
⑶模块的层次。
⑷模块结构:包括控制流结构和数据流结构及其之间的关系。
⑸处理过程的结构。
2. 请简单分析顺序图和活动图的区别。
答: 活动图反映系统中从一个活动到另一个活动的流程,强调对象间的控制流程。活动图特别适合描述工作流和并行处理过程。具体地说活动图可以描述一个操作过程中需要完成的活动;描述一个对象内部的工作;描述如何执行一组相关的动作,以及这些动作如何影响它们周围的对象;说明一个业务活动中角、工作流、组织和对象是如何工作的。 顺序图用于描述一组交互对象间的交互方式,它表示完成某项行为的对象和这些对象之间传递消息的时间顺序。
3. 面向对象的分析通常要建立三个模型,请问三个模型的作用?
答:a)功能模型:表达系统的详细需求,为软件的进一步分析和设计打下基础。在面向对象方法中,由用例图和场景描述组成。
b)对象模型:表示静态的、结构化的系统“数据”性质。描述现实世界中实体的对象以及它们之间的关系,表示目标系统的静态数据结构。在面向对象方法中,类图是构件对象模型的核心工具。
c)动态模型:描述系统的动态结构和对象之间的交互,表示瞬时的、行为化的系统的“控制”特性。面向对象方法中,常用状态图、顺序图、合作图、活动图构件系统的动态模型。
4.软件测试要经过哪些步骤,简述这些测试的基本任务。
答:单元测试、集成测试、确认测试、系统测试。
⑴单元测试:对源程序中的每个程序单元进行测试,检查各模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。
⑵集成测试:检查与设计相关的软件结构的有关问题。
⑶确认测试:主要检查已实现的软件是否满足需求规格说明书中确定了的各种需求。
⑷系统测试:把已确定的软件与其他系统元素结合在一起进行测试。
5. 简述提高软件可维护性的方法。
答:⑴建立明确的软件质量目标。
⑵利用先进的软件开发技术和工具。
  ⑶建立明确的质量保证工作。
  ⑷选择可维护的程序设计语言。
  ⑸改进程序的文档。
1. 功能模型的特征有哪些?
答:功能模型描述了系统的所有计算。功能模型指出发生了什么,对动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不考虑所计算的次序。功能模型由多张数据流图组成。数据流图说明数据流是如何从外部输入、经过操作和内部存储输出到外部的。功能模型也包括对象模型中值的约束条件。
2. 简述动态建模的过程。
答:⑴ 准备脚本。动态分析从寻事件开始,然后确定各对象的可能事件的顺序。在分析阶段不考虑算法的执行,算法是实现模型的一部分。
每当系统中的对象与外部用户发生互换信息时,就产生一个事件,所互换的信息值就是该事件的参数。对于各事件,应确定触发事件的动作对象和该事件的参数。屏幕布局和输出格式一般不影响交互行为的逻辑或所互换的信息值,对初始动态模型不必考虑其输出格式。
⑵ 确定事件。确定所有外部事件。事件包括所有来自或发往用户的信息、外部设备的信号、输入、转换和动作,可以发现正常事件,但不要遗漏条件和异常事件。
将各种类型的事件放入发送它和接收它的对象中,事件对发送者是输出事件,但对接收者则是输入事件。有时对象把事件发送给自身。这种情况下事件既是输出事件也是输入事件。
⑶ 准备事件跟踪表。把脚本表示成一个事件跟踪表,即不同对象间的事件排序表,对象为表中的列,给每个对象分配一个独立的列。
⑷ 构造状态图。对各对象类建立状态图,反映对象接收和发送的事件,每个事件跟踪都对应于状态图中的一条路径。
3. 怎样克服软件危机?
答:(1)充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。在开发软件的过程中努力作到良好的组织,严格的管理,相互友好的协作。