简答题
1.简述软件生存期由哪些主要阶段组成,每一阶段的任务是什么?
软件生存期由软件定义、软件开发、和运行维护三个时期组成。
(1)软件定义时期的主要任务是解决“做什么”的问题;
(2)软件开发时期的主要任务是解决“如何做”的问题;
(3)运行维护时期的主要任务是使软件持久地满足用户的需要。
2.软件工程方法包含哪几种?简述最常用两种方法的特点。
软件工程方法包括:传统方法(结构化方法)、面向对象发法、面向服务方法、面向数据方法、形式化方法。最常用的为传统方法和面向对象方法。
(1)传统方法:采用结构化技术来完成软件开发的各项任务;
(2)面向对象方法:面向对象程序设计代表了一种全新的程序设计思路,与传统的面向过程的开发方法不同,面向对象的程序设计和问题求解更符合人们日常的思维习惯。
3.软件生存期模型有哪些?他们各自的特点是什么?
软件生存期模型包括瀑布模型、原型模型、增量模型、螺旋模型、喷泉模型、统一过程、基于构件的软件开发、敏捷过程。
(1)瀑布模型的特点:
1.阶段间具有顺序性和依赖性;
2.推迟实现的观点;
3.质量保证的观点。
(2)原型模型的特点:
1.有助于满足用户的需求。
2.软件产品的开发基本上是按照线性顺序进行的。
3.规格说明书文档正确描述了用户的需求,所以在开发过程中的后续阶段不会因发现规格说明书文档的错误而进行较大的返工。
(3)增量模型的特点:
1.在较短的时间内向用户提交一些有用的工作产品,即从第一个构件交付之日起用户就能做一些有用的工作;
2.逐步增加产品的功能可以使用户有充裕的时间来学习和适应新产品,从而减少全新的软件给用户、组织的冲击;
3.项目失败的风险较低;
4.优先级最高的服务优先交付。
(4)螺旋模型的特点:
1.对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
2.减少了过多的测试或测试不足所带来的风险。
3.在螺旋模型中维护只是模型的另一个周期,因而在维护和开发之间并没有本质的区别。
(5)喷泉模型:
面向对象开发软件时,在分析、设计和编码等项开发活动之间并不存在明显的边界,而各阶段在开发方法的一致性也保证了各项活动之间的无缝过渡。
(6)统一过程:
以用例驱动、以体系结构为核心、迭代及增量的软件过程模型,由UML方法和工具支持,广泛应用于各类面向对象项目。
(7)基于构件的软件开发模型:
①对该问题领域的基于构件的可用产品进行研究和评估。
②考虑构建的集成问题。
③设计软件体系结构以容纳这些软件。
④将构建集成到软件体系结构中。
⑤进行充分的测试以保证功能正常。
(8)敏捷过程:
4.结构化设计方法的 实施要点有哪些?
5.简述基于数据流方法的设计过程。
(1)复查并精化数据流图;
(2)确定数据流图中数据流的类型,典型的数据流类型有变换型数据流和事务性数据流,数据流类型决定了映射的方法;
(3)导出初始的软件结构图;
(4)逐级分解;
(5)精化软件结构;
(6)导出接口描述和全局数据结构。
6.UML中有哪些图,每种图的作用是什么?
(1)结构图:
1.类图:类图是描述系统中各个对象的类型以及其间存在的各种关系的图;
2.组合结构图:组合结构图是描述类和构建的内部结构的图,其中包括与系统其他部分的交互点;
3.构件图:是描述构件的组织结构和相互关系的图;
4.部署图:是描述节点、节点间的关系以及构件和节点间部署关系的图;
5.对象图:是描述在某一时刻一组对象以及它们之间的关系的图;
6.包图:描绘模型元素分组(包)以及分组之间依赖的图;
7.造型图:造型图是元模型的一种限制形式,可用于对UML进行扩展。最基本的扩展结构是构造型。
(2)行为图:
1.活动图:是描述活动、活动的执行顺序以及活动的输入与输出的图;
2.用例图:是描述一组用例、参与者以及它们之间关系的图;
3.状态图:是描述一个对象(或其他实体)在其生存期内所经历的各种状态以及状态变迁的图;
4.顺序图:是描述一组角色和由扮演这些角色的实例发送和接收的消息的图;
5.交互概览图:是以一种活动图的变种来描述交互的图:
6.通信图:描述一组角色、这些角色间的连接加件以及由扮演这些角色的实例所收发消息的图;
7.定时图:描述在线性时间上状态或条件变化的图。
7.面向对象模型的三个模型分别是什么?每种模型的功能是什么?
(1)功能模型(用例模型):用例模型是从用户的角度描述系统的功能,目的是提取和分析足够的需求信息;
(2)静态模型(对象模型):建立问题域的概念模型;
(3)动态模型(交互模型):描述系统的动态行为,显示对象在系统运行期间不同时刻的动态交互,主要是建立系统的交互图和行为图。
8.逻辑覆盖有哪些?他们分别有什么特点?
逻辑覆盖又可分为以下几种,从弱到强:
(1)语句覆盖(SC):设计足够多的测试用例,确保每条语句都被执行过。
(2)判定覆盖(DC):设计足够多的测试用例,确保每个判定都分别取真值与假值。
(3)条件覆盖(CC):设计足够多的测试用例,确保每个条件都分别取真值与假值。(一个判定里可能包含多个条件)
(4)判定/条件覆盖(DCC):设计足够多的测试用例,确保每个判定和条件分别取真值和假值。
(5)条件组合覆盖(CMC):设计足够多的测试用例,确保覆盖每个判定中的各个条件的所有组合情况。(只考虑同一个判定内的各条件组合情况)
(6)路径覆盖:设计足够多的测试用例,确保每条路径都被执行。如果程序复杂,比如包含循环的情况,路径覆盖的测试用例数将会是个天文数字,无法实现。可以采用简化了的路径覆盖,即将循环看成是一个判定,只考虑循环被执行和未执行两种情况。
9.简述基本路径覆盖的求解步骤。
(1)画出程序控制流图;
(2)计算环路复杂性;
(3)导出测试用例;
(4)准备测试用例;
(5)图形矩阵。
10.软件测试要经过哪些步骤?这些测试与软件开发各阶段有什么关系?
软件测试要经过的步骤是:单元测试→ 集成测试–> 确认测试–> 系统测试。
(1)单元测试又称为模块测试,是针对软件设计的最小单位----程序设计模块-----进行正确性检验的测试工作。其目的是在于发现是模块内部可能存在的各种错误,单元测试需要从程序的内部结构触发设计测试用例。多个模块可以。平行的独立的设计测试用例。
(2)集成测试检查概要设计是否合理有效。
(3)确认测试又称为有效性测试。他的任务是验证软件的