考试范围

选择题

单选 10题 每题2分
瀑布模型,增量模型,快速原型模型

判断题

10题 每题2分
对了打勾,错了打叉并且写理由
不是55开

简答题

4题 每题5分

  • 软件危机是什么,产生的原因与解决措施
  • 面向对象建模的三个子模型是什么,最核心最基本的是哪个,对复杂问题的模型是由哪五个层次组成
  • 类聚和耦合的级别,具体从高到低排序
  • 需求分析工作结果有哪两个,分析建模,需求说明书文档,四个方面验证
  • 可行性分析的主要研究内容,五个方面
  • 面向对象方法的主要优点,5点,标题即可,p205
  • 软件文档的分类(两类),分别描述什么,满足什么要求,课本上有
  • 过程设计的工具可以分几类,课本中学过的分别是哪类

分析、设计、画图题

4题 每题10分

p336 4,5,6

判断树,pad图,盒图
DFD图,不要细化,知道功能就行,符号就四种,见p41
所有的图符都要有名字,数据流,原点,加工,存储都要有名字

设计测试用例:
白盒:语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,不能多写,最好两组。要写预期的路径和结果
黑盒:等价类划分,边界值分析,看例子与作业,先划分等价类表,再编号,防止遗漏,尽可能完成所有等价类覆盖。每个无效等价类,单独设计测试类。
测试样例:测试数据+预期结果,覆盖了哪个类最好写一下。边界值要作为测试用例,对于测试样例,需要取最接近边界值的测试样例。

考题分析

选择与判断题

第一章

  1. 产生软件危机的原因:与软件本身的特点有关(缺乏可见性;规模庞大);和软件开发与维护的方法不正确有关。
  2. 软件工程技术的两个明显特点:强调规范化、强调文档化
  3. 软件工程方法学包括三个要素:方法、工具和过程
  4. 目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学
  5. 软件生命周期模型:见书P14
  6. 软件工程过程:软件规格说明、软件开发、软件确认、软件演化
  7. 软件开发过程一般包括:需求、设计、实现、维护等活动
  8. 软件开发的基本策略:复用、分而治之、优化——折衷

第二章

  1. 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
  2. 可行性研究的内容:技术可行性、经济可行性、操作可行性,必要时还应该从法律 、社会效益等更广泛方面考虑。
  3. 数据字典是描述数据的信息的集合,是对系统中使用的所有数据元素的定义的集合。

第三章

  1. 数据模型包含三种相互关联的信息:数据对象、描述数据对象的属性及数据对象彼此间相互连接的关系。
  2. 图形工具:层次方框图、Warnier图、IPO图

第五章

  1. 总体设计过程通常有两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构
  2. 模块化是衡量软件设计好坏的一个重要准则
  3. 模块化方法带来的好处:一方面,模块化设计降低了系统的复杂性,使得系统容易修改;另一方面,推动了系统各个部分的并行开发,从而提高了软件的生产效率。
  4. 抽象:指的是解决问题时只考虑与问题有关的方面,不考虑与问题无关的方面。即抽出事物的本质特性而不考虑细节
  5. 信息隐蔽的目的:提高模块的独立性,减少修改或维护时的影响面
  6. 模块独立的含义:模块完成独立的功能、符合信息隐蔽和信息局部化原则、模块间关联和依赖程度尽量小
  7. 模块的独立程度可以由两个定性标准来度量,即模块之间的耦合性和模块自身的内聚性。
  8. 原则:尽量使用数据耦合、少用控制耦合和特征耦合、限制公共耦合的范围、坚决避免使用内容耦合
  9. 事实上,没有必要精确确定内聚的级别。重要的是设计时力争做到强内聚、弱耦合。
  10. 常用的软件结构设计启发规则:改进软件结构提高模块独立性;模块规模应该适中;深度、宽度、扇出和扇入都应适当;模块的作用域应该在控制域之内;力争降低模块接口的复杂程度;设计单入口单出口的模块;模块功能应该可以预测

第六章

  1. 详细设计的结果基本上决定了最终的程序代码的质量。结构程序设计技术是详细设计的逻辑基础。
  2. 结构程序设计的定义:是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口和单出口的控制结构。
  3. 人机界面设计的设计问题:系统响应时间、用户帮助设施、出错信息处理、命令交互。
  4. 过程设计工具:图形工具、表格工具、语言工具
  5. PDL 是用正文形式表示数据和处理过程的设计工具。
  6. Jackson 方法是一种典型的面向数据结构的分析与设计方法。
  7. 程序复杂性主要指模块内程序的复杂性。
  8. McCabe 度量法,又称环路复杂性度量,是一种基于程序控制流的复杂性度量方法。
  9. Halstead 方法,工具程序中运算符和操作数的总数来度量程序的复杂程度

第七章

  1. 程序设计语言分为以下几类:机器语言、汇编语言、高级语言
  2. 编码风格包括:源程序文档化、数据说明、语句结构、输入/输出方法和效率几个部分。力图从编码原则的角度提高程序的可读性,改善程序质量。
  3. 软件测试不等于程序测试,软件测试应贯穿于软件定义与开发的整个期间;
  4. 静态测试方法:人工测试方法,计算机辅助静态测试方法。动态测试方法:白盒测试,黑盒测试
  5. 测试可视为分析、设计、编码三个阶段的最终复审,以保证软件质量
  6. 测试过程需要三类输入:软件配置、测试配置、测试工具
  7. 大型软件系统的测试过程基本上由模块测试、子系统测试、系统测试、验收测试和平行运行等五个步骤组成。
  8. 单元测试主要对模块的五个基本特性进行评价:模块接口、局部数据结构、重要的执行通路、出错处理通路、边界条件
  9. 集成测试是测试和组装软件的系统化技术
  10. 集成测试方法通常采用黑盒测试技术。实施策略:非渐增式测试、渐增式测试
  11. 渐增式测试分为自顶向下结合(深度优先、广度优先)、自底向上结合
  12. 自底向上测试方法的优缺点与上述自顶向下测试方法的优缺点刚好相反。
  13. 确认测试必须有用户的参与,或者以用户为主。通常运用黑盒测试方法
  14. 用于系统测试的测试类型:恢复测试、安全性测试、强度测试、性能测试
  15. 通常把测试数据和预期的输出结果称为测试用例。

第八章

  1. 在软件产品发布后对软件产品进行的修改就是所谓的软件维护。
  2. 软件维护的类型有:改正性维护、适应性维护、完善性维护、预防性维护
  3. 事实证明,在几种维护活动中,完善性维护所占的比重最大。
  4. 软件维护活动所花费的工作占整个生存期工作量的70%以上
  5. 在软件维护中,影响维护工作量的程序特性有6种:系统大小、程序设计语言、系统年龄、数据库技术的应用、软件开发技术、其它
  6. 软件可维护性是指软件维护人员理解、改正、改动或改进软件的难易程度。
  7. 目前广泛使用的是用如下的七个特性来衡量程序的可维护性:可理解性、可使用性、可测试性、可移植性、可修改性、效率、可靠性

第九章

  1. 传统方法学的缺点:生产率提高的幅度远不能满足需要、软件重用程度很低;软件仍然很难维护;软件往往不能真正满足用户需要
  2. 面向对象方法学的优点:与人类习惯的思维方法一致、稳定性好、可重用性好
  3. 对象的特点:以数据为中心、对象是主动的、实现了数据封装、本质上具有并行性、模块独立性好
  4. 设计UML的目标:统一不同的建模语言、统一开发阶段、统一不同的软件应用论域、统一内部结构、与多种不同的开发过程并存
  5. 任何方法都应由建模语言和建模过程两部分构成。建模语言提供了用于表示设计的图形符号,建模过程描述了进行设计时所需遵循的步骤。

第十章

  1. 在面向对象分析中,主要由对象模型、动态模型和功能模型组成。对象模型是最基本、最重要、最核心的。
  2. 面向对象分析的关键工作,是分析、确定问题域中的对象及对象间的关系,并建立起问题域的对象模型
  3. 复杂问题(大型系统)的对象模型通常由下述5个层次组成:主题层、类与对象层、结构层、属性层、服务层
  4. 面向对象分析首要的工作,是建立问题域的对象模型。

第十一、十二章

  1. 面向对象设计细分为系统设计和对象设计。
  2. 面向对象设计的准则:模块化、抽象、信息隐藏、弱耦合、强内聚、可重用
  3. 启发规则:设计结果应该清晰易懂、一般-特殊结构的深度应适当、设计简单的类、使用简单的协议、使用简单的服务、把设计变动减至最小
  4. 软件复用可分为以下3个层次:知识复用、方法和标准的复用 、软件成分的复用
  5. 类构件有3种复用方式,分别是实例复用、继承复用和多态复用。
  6. 面向对象的对每个类进行单元测试方法:随机测试;划分测试;基于故障测试。
  7. 面向对象的集成测试方法:基于线程的测试;基于使用的测试。
  8. 面向对象的确认测试可以应用传统的黑盒测试方法。但是,基于情景的测试是主要的方法。

第十三章

  1. 估算软件规模:代码行技术、功能点技术
  2. 工作量估算:静态单变量模型、动态多变量模型、COCOMO2模型
  3. 人员组织:民主制程序员组、主程序员组、现代程序员组
  4. 能力成熟度模型(CMM)是改进软件过程的有效策略。

简答题

  • 什么是软件危机?产生的原因?以及解决措施?

    软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。

    产生软件危机的原因 :一、与软件本身的特点有关;二、和软件开发与维护的方法不正确有关。

    我们可以通过了解产生软件危机的原因,澄清错误认识,建立起关于软件开发和维护的正确概念,及采取一系列综合措施来达到消除的目的。这些措施包括技术措施(方法和工具),组织管理措施,以及运用软件工程理论和实践。

  • 面向对象建模的三个子模型是什么,其中最基本最核心的是哪个,对这个复杂问题的模型是由哪五个层次组成的

    三个子模型:对象模型、动态模型、功能模型

    对象模型是最基本、最重要、最核心的

    对这个复杂问题的模型是由主题层、类与对象层、结构层、属性层、服务层五个层次组成

  • 类聚和耦合的级别,具体的给出来后从高到低排下来

    耦合度(从低到高):非直接耦合,数据耦合,标志耦合;控制耦合;外部耦合,公共耦合;内容耦合

    内聚性(从低到高):偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚

  • 需求分析工作结果有哪两个,分析建模,需求说明书文档,四个方面验证

    一个是分析建模,一个是需求说明书文档(软件需求规格说明)

    四方面验证:

    1、一致性:所有需求必须是一致的,需求间不能互相矛盾;

    2、完整性:需求必须完整,规格说明书要包含用户的每个需求;

    3、现实性:需求在现有技术上可以实现;

    4、有效性:需求有效,能解决用户面对的问题;

  • 可行性分析研究的主要内容是什么(5个方面)

    可行性分析是对软件开发之后取得经济效益和社会影响力进行分析预测、从而提出软件是否值得开发、可行性分析应具有预见性、公正性、可靠性、科学性的特点。

    可行性分析就是分析软件是否具有开发价值、然后决定是否开发。

    可行性研究主要技术可行性、经济可行性以及操作的可行性3个方面加以研究,必要的时候还应该从法律和社会效益等更广泛方面研究每种解法的可行性。

  • 面向对象方法的主要优点是哪些(简单回答 5 点)P205,5个标题

    与人类习惯的思维方法一致

    稳定性好

    可重用性好

    较易开发大型软件产品

    可维护性好

  • 软件文档的分类(按照课本,分成两类)分别描述的是什么,应该满足什么要求

    用户文档主要描述系统功能和使用方法,并不关心这些功能是怎样实现的;系统文档描述系统分析、设计、实现和测试等各方面的内容。

    软件文档应满足的要求:

    1、必须描述如何使用这个系统,没有这种描述即使是最简单的系统也无法使用;

    2、必须描述怎样安装和管理这个系统;

    3、必须描述系统需求和设计;

    4、必须描述系统的实现和测试,以便使系统成为可维护的。

  • 过程设计的工具可以分几类,课本中学过的分别是哪类

    分为三类:图形工具,表格工具、语言工具

    图形工具:程序流程图、盒图、PAD

    表格工具:判定表、判断树

    语言工具:过程设计语言PDL(伪码)

综合题

软件过程模型与人员组织

瀑布模型

  • 阶段间具有顺序性和依赖性。
  • 推迟实现的观点。
  • 质量保证观点。(每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。)

优势是规范的、文档驱动的方法;这种模型的问题是,最终交付的产品可能不是用户真正需要的。

快速原型模型(原型模型)

一般用于最终系统的早期用户评价,开发工期短,质量有保证。

主要特点:

  • 使用这种软件过程开发出的软件产品通常能满足用户的真实的需求
  • 软件产品的开发过程基本上是线性顺序过程

增量模型

  • 能在较短时间内向用户提交可完成部分的工作的产品;
  • 逐步增加产品功能,从而使用户有较充裕的时间学习和适应新产品,减少一个全新的软件给客户带来的冲击。

增量模型具有能在软件开发的早期阶段使投资获得明显回报和易于维护的优点,开发出的软件具有较好的可扩充性。但是,要求软件工程师具有较高的技术水平,能够设计出开放的软件体系结构。

快速原型并不快,需要快的应该选增量模型,瀑布模型比快速原型都快

假设自己被指派为一个软件公司的项目负责人,任务是开发一个技术上具有创新性的产品,该产品把虚拟现实硬件和最先进的软件结合在一起。由于家庭娱乐市场的竞争非常激烈,这项工作的压力很大。应该选择哪种项目组结构?为什么?打算采用哪种软件过程模型?为什么?

答:由于是技术上具有创新性的产品,所以需要采用民主制程序员组,大家司以集思广益,共同攻关技术难题。

快速原型模型

假设你被指定为项目负责人,你的任务是开发一个应用系统,该系统类似于你的小组以前做过的那些系统,只不过规模更大且更复杂一些。客户已经写出了完整的需求文档。你将选用哪种项目组结构?为什么?你打算采用哪种软件过程模型?为什么?
答:由于待开发的应用系统类似于以前做过的系统,开发人员已经积累了较丰富的经验,没有多少技术难题需要攻克。为了减少通信开销,充分发挥技术骨干的作用,统一意志统一行动,提高生产率,加快开发进度,项目组的组织结构以基于主程序员组的形式为宜。

针对待开发的系统,客户已经写出了完整的需求文档,项目组又有开发类似系统的经验,因此,可以采用广大软件工程师熟悉的瀑布模型来开发本系统。


民主制程序员组

重要特点:小组成员完全平等,享有充分民主,通过协商做出技术决策。通常采用非正式的组织方式。

主要优点:

  • 组员们对发现程序错误持积极态度。这种态度有助于更快速地发现错误,从而导致高质量代码。
  • 有利于攻克技术难题。

要求:多数成员是经验丰富技术熟练的程序员。

主程序员组

主程序员组用经验多、技术好、能力强的程序员作为主程序员。

特性:专业化、层次性

核心人员的寻找困难,其中最大的问题是寻找主程序员的人选困难;小组成员发现程序错误的积极性不高。

现代程序员组

解决方法,取消了主程序员的大部分行政管理工作。一分为二,技术组长、行政组长。此外,还可以在合适的地方采用分散做决定的方法。

判断树

判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。其优点在于它的形式简单,易于掌握和使用,是一种比较常用的系统分析和设计的工具。

image-20210107143158315

image-20210107143208914

PAD图

image-20210107143257142

image-20210107143310386

盒图(N-S图)

image-20210107143405206

image-20210107143422404

DFD图(数据流图)

DFD图,不要细化,知道功能就行,符号就四种,见书本p41

所有的图符都要有名字,数据流,原点,加工,存储都要有名字

image-20210107143747777

image-20210107143828443

车间填写领料单,交给仓库要求领料,库长根据用料计划审批领料单,未批准的领料单退回车间,已批准的领料单被送到仓库保管处,由仓库管理员查阅库存帐。若帐上有货则通知车间前来领料,否则将缺货情况通知采购人员。 画出领料业务的数据流程图

image-20210112103157972

设计测试用例

详见书本P162

白盒

  1. 语句覆盖

    使程序中每个语句至少执行一次,语句覆盖是最弱的逻辑覆盖

  2. 判定覆盖

    每个语句执行一次,且每个判定的真假分支都至少执行一次。判定覆盖仍是弱的逻辑覆盖。

  3. 条件覆盖

    每个语句执行一次,且使每个判定的每个条件的可能取值至少执行一次。

    条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖

  4. 判定/条件覆盖

    选取足够多的测试用例,使判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次。

    能同时满足判定/条件两种覆盖标准取值

(不能多写,最好两组。要写预期的路径和结果)

黑盒

  1. 等价类划分
  2. 边界值分析

看例子与作业,先划分等价类表,再编号,防止遗漏,尽可能完成所有等价类覆盖。每个无效等价类,单独设计测试类。
测试样例:测试数据+预期结果,覆盖了哪个类最好写一下。边界值要作为测试用例,对于测试样例,需要取最接近边界值的测试样例。

详见书本P172

总结

  • 简答题和综合题一定要多背多记
  • 作业,测试要多看
  • 可以多刷题
  • 选择、判断随缘:)

上学期软件班期末考

部分题型

选择题

  1. 小组成员完全平等,享有充分民主,通过协商做出技术决策。这种组织方式是:

    民主制程序员组

    传统程序员组

    主程序员组

    现代程序员组

  2. 下列属于面向对象开发方法的是:

    Jackson

    Booch

    HIPO

    warnier

  3. 软件开发技术一般不包括:

    软件开发方法学

    软件工程环境

    软件工具

    软件质量度量

  4. 软件测试方法中的( )属于静态测试方法

    黑盒法
    逻辑覆盖
    错误推测
    人工检测

  5. Jackson方法是一种面向( )的设计方法

    数据流

    数据结构

    对象

    控制

  6. 软件需求规格说明的内容不包括( )

    算法的详细描述

    软件主要功能

    软件的性能

    用户界面及运行环境

  7. 软件生命周期中所花费用最多的阶段是:

    软件编译

    软件测试

    软件维护

    详细设计

  8. 面向对象方法学的主要优点不包括:

    稳定性好

    可重用性好

    与人类习惯的思维方法一致

    运行效率

  9. 经济可行性研究的范围包括:

    资源有效性

    管理制度

    效益分析

    开发风险

多选题

  1. 画分层DFD图的基本原则有:

    数据守恒原则
    分解的可靠性原则
    子、父图平衡的原则
    数据流封闭的原则

  2. 软件测试主要包括( )方面的差错和纠错

    软件计划

    软件设计

    软件编码

    软件价格

  3. 模块独立性准则由以下定性指标衡量:

    耦合

    信息屏蔽

    内聚

    分解度

  4. 以下属于软件测试的原则有:

    程序最好由编写该程序的程序员自己来测试

    所有测试标准都是建立在用户需求之上

    注意测试中的群集现象(2-8原则)

    测试是证明程序有错的一个过程

  5. 可重用的软构件应具有的特点包括:

    具有高度可塑性

    功能简单

    接口清晰、简明、可靠

    模块独立性强

  6. 下面哪些( )可以作为模块

    子程序

    函数

    过程

  7. 在人机界面的设计过程中,需要考虑下列( )问题

    系统响应时间

    输入输出数据

    出错信息处理

    用户帮助

  8. 软件危机的主要表现是:

    软件成本太高
    软件产品的质量低劣
    软件开发人员明显不足
    软件生产率低下

  9. 关于数据字典正确的描述是( )

    数据字典最重要的用途是作为分析阶段的工具

    实现数据字典三种常见的方法有全人工过程、全自动过程、混合过程

    数据字典应该容易更新和修改

    可以采用卡片形式书写数据字典

判断题

  1. 软件项目管理先于任何技术活动之前开始,并且贯穿于软件的整个生命周期之中。

  2. HIPO法既是需求分析方法,又是软件设计方法

  3. 在一个设计得很好的系统中,模块的控制域是模块的作用域子集。

    ,模块的作用域应该在控制域之内,如果模块的作用域不在控制域之内,则会增加模块间数据的传递量,使模块间出现控制耦合。(详见书本P100)

  4. 在发现错误后,则应按照一定的技术去纠正它,纠错的关键是错误定位。

  5. 面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的实现。

综合题

  1. 为方便储户,某银行开发计算机存储系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。请画出此系统的数据流图。

    答:

    img

  2. 在程序流程图,试分别用N-S图和PAD表示之,并计算它们的McCabe复杂性度量。

    image-20210106143857048

    答:

    image-20210106143919637

    McCabe 复杂性度量为 3

  3. 假设自己被指派作为一个大型软件产品公司的项目负责人,工作是管理该公司已被广泛应用的字处理软件的新版本开发。由于市场竞争激烈,公司规定了严格的完成期限并且对外公布了。应选择哪种项目组结构?为什么?打算采用哪种软件过程模型?为什么?

    1. 应该选择现代程序员组,因为小组成员都能对发现程序错误持积极、主动的态度。能更好的适应竞争。
    2. 对这个项目的一个重要要求是,严格按照已对外公布了的日期完成产品开发工作,因此,选择生命周期模型时应该着重考虑哪种模型有助于加快产品开发的进度。使用增量模型开发软件时可以并行完成开发工作,因此能够加快开发进度。这个项目是开发该公司已被广泛应用的字处理软件的新版本,从上述事实至少可以得到3点结论:第一,旧版本相当于一个原型,通过收集用户对旧版本的反映,较容易确定对新版本的需求,没必要再专门建立一个原型系统来分析用户的需求;第二,该公司的软件工程师对字处理软件很熟悉,有开发字处理软件的丰富经验,具有采用增量模型开发新版字处理软件所需要的技术水平;第三,该软件受到广大用户的喜爱,今后很可能还要开发更新的版本,因此,应该把该软件的体系结构设计成开发式的,以利于今后的改进和扩充。综上所述,采用增量模型来完成这个项目比较恰当。
  4. 设计下列伪代码程序的语句覆盖和路径覆盖的测试用例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    INPUT(A, B, C)
    IF A>5
    THEN X=10
    ELSE X=1
    END IF
    IF B>10
    THEN Y=20
    ELSE Y=2
    END IF
    IF C>15
    THEN Z=30
    ELSE Z=3
    END IF
    PRINT(X, Y, Z)
    STOP

    答:
    语句覆盖:每条语句都要被覆盖到
    所以是A>5,B>10,C>15
    路径覆盖:每条路径都要被覆盖到
    A、B、C各有真和假这两条路径
    组合有8条路径
    A>5,B>10,C>15
    A>5,B>10,C<=15
    A>5,B<=10,C>15
    A>5,B<=10,C<=15
    A<=5,B>10,C>15
    A<=5,B>10,C<=15
    A<=5,B<=10,C>15
    A<=5,B<=10,C<=15