软件工程导论

软件工程导论

1、软件工程概述

  1. 在下列选项中,()不是软件的特征。
  • 系统性和复制性
  • 可靠性和一致性
  • 抽象性和智能性
  • 有形性和可控性
  1. 软件危机的主要原因是()
  • 软件工具落后
  • 软件生产能力不足
  • 对软件的认识不够
  • 软件本身的特点及开发方法
  1. 下列说法中正确的是()
  • 20世纪50年代提出了软件工程的概念.。
  • 20世纪60年代提出了软件工程的概念
  • 20世纪70年代出现了客户机/服务器技术
  • 20世纪80年代软件工程学科达到成熟
  1. ()是将系统化的、规范的、可定量的方法应用于软件的开发、运行与维护的过程,它包括方法、工具和过程三个要素。
  • 软件生命周期
  • 软件测试
  • 软件工程
  • 软件过程
  1. 在下列选项中,()不属于软件工程学科所要研究的基本内容
  • 软件工程材料
  • 软件工程目标
  • 软件工程原理
  • 软件工程过程
  1. 软件工程的三要素是()
  • 技术、方法和工具
  • 方法、对象和类
  • 方法、工具和过程
  • 过程、模型和方法
  1. 用来辅助软件开发、运行、维护、管理、支持等过程中的活动的软件称为软件开发工具,通常也称为()工具
  • CAD
  • CAl
  • CAM
  • CASE
  1. 软件就是程序,编写软件就是编写程序。
  • ×
  1. 软件危机的主要表现是软件需求增加,软件价格上升。
  • ×
  1. 软件工程学科出现的主要原因是软件危机的出现。
  1. 与计算机科学的理论研究不同,软件工程是—门原理性学科。
  • ×

1.与计算机硬件相比,计算机软件有哪些特点?

无法直接观察计算机软件的物理形态,只能通过观察它的实际运行情况来了解它的功能、 特性和质量等。人们在分析、设计、开发、测试软件产品,以及在软件开发项目的管理过程中,渗透了大量的脑力劳动。不存在像硬件一样的磨损和老化现象,但存在着缺陷维护和技术更新的问题。软件的开发和运行必须依赖于特定的计算机系统环境,具有可复用性。

2.软件就是程序吗?如何定义软件?

人们经过长期的实践已经逐步认识到,软件即程序,程序只是软件的关键要素。普遍能被 接受的观点是:软件=程序+数据+文档。

3.什么是软件危机?什么原因导致了软件危机?

经费超岀预算,项目一再拖延。

不重视需求,开发的软件不能满足用户的要求,项目成功率低。

没有规范的软件工程方法,软件可维护性差、软件质量差、可靠性差。

开发工具落后,手工方式,开发效率低。

所有导致软件危机的原因,都与软件本身的产品特点相关。

软件是一个复杂的逻辑产品。如果没有解决复杂问题的有效方法,以及软件产品的结构、 质量、可维护性得不到保障,开发与维护费用就会持续升高。

软件产品不能实现大规模复用,这导致了软硬件生产效率的不同。

软件生产是脑力劳动,它看不见、摸不着,开发成本、开发周期等都无法做到准确估算, 生产过程不易控制。

软件成本主要是由研发成本构成;而硬件的生产成本主要是材料和制造成本,分摊的研发 成本很少,即软件研发过程与硬件制造过程相比要复杂得多。

(1)客观原因:
1. 软件本身的特点
逻辑部件:管理和控制软件开发过程相当困难,较难维护
规模庞大:代码长度不正比程序复杂程度
2. 软件开发与维护的方法不正确
(2)主观原因:
软件专业人员错误的认识,没有认识到软件的生命周期,采用错误的方法和技术,忽视软件需求分析的重要性,认为软件开发就是编写程序使之运行。

如何解决:
其次是必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,特别要吸取几十年来人类从事计算机硬件研究和开发的经验教训。
1.技术措施
 使用更好的软件开发技术、开发工具、开发工具。
2.组织管理措施 
(1)创造良好的组织、严密的管理与协调工作的机制软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
(2)摆脱软件危机的主要出路是,按工程化的原则和方法组织软件的开发工作。 
(3)强调文档的重要性。 “口说无凭,立字为据!  !”是解决软件危机的格言。       

4.为什么说软件工程的发展可以在一定程度上解决软件危机的各种弊端?

软件工程的提出是为了解决软件危机所带来的各种弊端。具体地讲,软件工程的目标主要 包括以下几点。

  • 使软件开发的成本能够控制在预计的合理范围内。
  • 使软件产品的各项功能和性能能够满足用户需求。
  • 提高软件产品的质量。
  • 提高软件产品的可靠性。
  • 使生产出来的软件产品易于移植、维护、升级和使用。
  • 使软件产品的开发周期能够控制在预计的合理时间范围内。

5.请简述软件工程研究的内容。

软件工程研究的内容包括软件开发方法、软件开发模型、软件支持过程和软件管理过程。

软件开发方法的内容涵盖市场调研、正式立项、需求分析、项目策划、概要设计、详细设 计、编程、测试、试运行、产品发布、用户培训、产品复制、销售、实施、系统维护、版本升 级等。

常用的软件开发模型有瀑布模型、迭代模型、增量模型和原型模型等。

软件支持过程由所支持的CASE工具组成,常用的CASE工具有Power Designer和Rational Rose 等。

6.请简述软件工程的三要素。

软件工程的三要素是从计算机科学的观点来看软件工程,即从软件开发的技术层面来看有 过程、方法和工具这三要素。

  • “过程”是软件产品加工所经历的一系列有组织的活动,保证能够合理、高质量和及时地 开发出软件。

  • “方法”为软件开发提供“如何做”的技术。它涵盖了项目计划、需求分析、系统设计、 程序实现、测试与维护等一系列活动的做法,如经常说的面向结构、面向对象、面向组件等开发 方法,以及项目管理中的估算、度量、计划等管理方法。软件工程以介绍方法为主。

  • “工具”可为过程和方法提供自动的或半自动的支持。这些工具既包括软件,也包括硬件。

软件工具包括编程、建模、管理等开发工具。通过网络环境把这些软件工具集成起来搭建一个能 够支持团队开发的平台,称为计算机辅助软件工程,即CASEO CASE集成了软件、硬件和一个存放开发过程信息的软件工程数据库,形成了一个软件工程环境。

软件工程是一种层次化的技术。任何工程方法(包括软件工程)必须以有组织的质量保证为基础。全面的质量管理和类似的理念刺激了不断的过程改进,正是这种改进导致了更加成熟的软件工程方法的不断出现。支持软件工程的根基就在于对质量的关注。

7.请简述软件工程的目标、过程和原则。

目标、过程和原则是一切工程的三维框架,这里是以工程的观点来看待软件开发。

软件工程的目标:降低成本、及时交付高质量的软件产品(高质量、高效率、高效益)。

实现目标的过程即完成产品加工的过程,包括:基本过程、支持过程和组织过程。

进行过程应遵守的原则:原则就是过程中的轨道约束,包括:选取适宜的开发范型、采用 合适的设计方法、提供高质量的工程支持、重视开发过程的管理。

8.请简述软件工程的基本原则。

软件工程的基本原则如下。

  • 将软件的生命周期划分为多个阶段,对各个阶段实行严格的项目管理。
  • 坚持阶段评审制度,以确保软件产品的质量。
  • 实施严格的产品控制,以适应软件规格的变更。在软件开发的过程中,用户需求很可能不 断地发生变化。
  • 釆用现代的程序设计技术。
  • 开发出来的软件产品应该能够清楚地被审查。
  • 合理地安排软件开发小组的人员,并且开发小组的人员要少而精。
  • 不断地改进软件工程实践。

9.请简述现代软件工程与传统软件工程显著的区别和改进。

传统的软件工程是基于结构化的软件开发方法,而现代软件工程是以面向对象技术为标志。不仅在编程技术上有很大的改进,而且在分析、设计等整个开发过程中,采用面向对象的 思维方式,更加完整、自然地反映客观世界。采用架构技术,开发效率、产品质量得到了极大提高。更注重团队开发和管理,融入更多、更新的管理理念和手段,如RUP模型、XP模型、过程改进、能力成熟度模型、配置管理等。

2、软件过程

  1. 软件生命周期模型不包括()
  • 瀑布模型
  • 用例模型
  • 增量模型
  • 螺旋模型
  1. 包含风险分析的软件工程模型是()
  • 喷泉模型
  • 瀑布模型
  • 增量模型
  • 螺旋模型
  1. 软件过程是()
  • 特定的开发模型
  • —种软件求解的计算逻辑
  • 软件开发活动的集合
  • 软件生命周期模型
  1. 软件工程中描述生命周期的瀑布模型—般包括计划、需求分析、设计、编码、()、维护等几个阶段
  • 产品发布
  • 版本更新
  • 可行性分析
  • 测试
  1. 软件开发的瀑布模型,一般都将开发过程划分为:分析、设计、编码和测试等阶段,一般认为可能占用人员最多的阶段是(
  • 分析阶段
  • 设计阶段
  • 编码阶段
  • 测试阶段
  1. 增量模型本质上是一种()
  • 线性顺序模型
  • 整体开发模型
  • 非整体开发模型
  • 螺旋模型
  1. 螺旋模型综合了()的优点,并增加了风险分析。
  • 增量模型和喷泉模型
  • 瀑布模型和演化模型
  • 演化模型和喷泉模型
  • 原型和喷泉模型
  1. CMM模型将软件过程的成熟度分为5个等级。在()使用定量分析来不断地改进和管理软件过程
  • 管理级
  • 优化级
  • 定义级
  • 可重复级
  1. 瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰。
  • ×
  1. 原型化开发方法包括生成原型和实现原型两个步骤
  • ×
  1. 软件过程改进也是软件工程的范畴
  1. 在软件开发中采用原型系统策略的主要困难是成本问题。
  • ×

1.如何理解软件生命周期的内在特征?

软件产品的生命周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件 实现、产品测试与验收、投入使用以及产品版本的不断更新,再到最终该产品被市场淘汰的全过程。软件生命周期这个概念从时间的角度将软件的开发和维护的复杂过程分解为了若干个阶段, 每个阶段都完成特定的相对独立的任务。由于每个阶段的任务相对于总任务难度会大幅度降低,因此在资源分配、时间把握和项目管理上都会比较容易控制°应该合理地划分软件生命周期的各个阶段,使各个阶段之间既相互区别又相互联系,为每个阶段赋予特定的任务。

2.对比瀑布模型、原型模型、增量模型和螺旋模型。

4种模型的对比如下:

  • 瀑布模型:主要体现了分阶段、有控制的思想。活动间强调按顺序、文档化;存在的问题 是过于理想化,每一步的工作必须完整准确,否则无法进行下一步工作。

  • 原型模型:需求分析入手快速、表达直观、容易交流。重点解决瀑布模型的需求分析入手难的问题。

  • 增量模型:对于需求复杂的系统,采用分块开发、逐步集成的开发策略。增量体现了演进、 迭代思想,每一块就是一个增量。每个增量是一次迭代。增量模型的新版本叫做“极限编程(XP)”。

  • 优点 :
    采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量。当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。这样即可先发布部分功能给客户,对客户起到镇静剂的作用。此外,增量能够有计划地管理技术风险。 
    缺点  :
      1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。 
      2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。 
    3)如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。
    
  • 螺旋模型:融合了上述3种模型,融进了循环往复、强化了演进迭代的思想,增加了风险 控制环节。但是,风险分析的正确性是左右软件演进的关键因素。

3.当需求不能一次搞清楚,且系统需求比较复杂时应选用哪种开发模型比较适合?

开发模型不是孤立或排斥的,它们之间需要相互借鉴和参考。螺旋模型是一种综合性的模型,适和于较复杂的系统。

4.RUP包含了哪些核心工作流和哪些核心支持工作流?

RUP建立了对软件过程普遍适用的理论指导框架,是典型的软件开发过程。它包括直接参与软件产品构造的核心工作流和若干属于项目管理范畴的支持工作流。

  • 核心工作流包括:业务建模、需求、分析与设计、实现、测试、部署。
  • 支持工作流包括:配置与变更管理、项目管理、环境。

5.XP是一种什么样的模型?

XP是现代版的增量模型,特点是客户参与、适应变化、测试驱动、以代码为核心。实行XP的条件如下。企业具有较高的能力成熟度,具有团队开发环境和配套的测试工具。软件结构是开放的,增量可随意整合。开发团队拥有“系统隐喻”。

6.每个软件企业遵循的软件开发过程都是一样的吗?

任何软件过程只是给软件开发组织的一个参考,并非清规戒律。企业规划软件过程要适合企业的实际情况,并且不是一成不变,要随着企业的发展、环境的变化和项目的性质来改进软件 过程。RUP就是一个可裁剪的软件过程模板。

7.请简述软件过程。

软件过程就是软件产品的加工过程,其本质就是将“客观世界”映射(虚拟)到“计算机世界”,即从抽象到具体的逐步细化过程。系统分析就是对客观世界的抽象,中间要经过分析模型、设计模型的逐步细化(具体化),最终的具体结果就是计算机世界里的代码。

8.敏捷方法的核心价值观有哪些?它对传统方法的“反叛”体现在哪些方面?

敏捷思想的核心价值观大体包括以下几方面。

  • 注重个人与交互。
  • 重点关注可以工作的软件。
  • 提高客户参与程度。
  • 以积极的心态响应需求变化。

敏捷联盟强调的价值观是这一流派的核心。人是受价值观驱使的,敏捷项目管理因而也是以 价值观为推动力的。一个团队可以采用敏捷做法,但如果它不接受敏捷价值观,它将不能得到敏 捷方法的潜在好处。

敏捷方法对传统方法的“反叛”体现在以人为中心,不再依靠文档来控制过程,认为传统过 程过于僵化、文档繁烦,主张对传统过程瘦身,在上述价值观的支配下,做到够用为准。

9.请简述CMM的作用。

CMM的作用如下。

  • CMM是评价软件组织开发能力(水平)的参考模型,是一种认证标准,认可软件工程达 到的程度(如同评定职称的条件)。
  • CMM是软件组织提升自身能力、走向成熟的参照系。它提供了走向成熟的阶梯目标,但 并不提供走向目标的方法。
  • CMM等级的提高依靠软件过程改进。
  • CMM既是评估软件能力成熟度的模型,也起到了促进软件企业按照该模型设置的级别和 关键过程域不断改进自己的软件过程的作用。

10.请简述CMM软件过程成熟度的5个级别,以及每个级别对应的标准。

5个级别如下

  • 初始级的软件过程是无秩序的,它几乎处于无步骤可循的状态。管理是随机的,软件产品 的成功往往取决于个人。
  • 在可重复级,已建立了基本的项目管理过程,对成本、进度和功能特性进行跟踪,并且在 借鉴以往经验的基础上制定了必要的规范。
  • 在已定义级,用于管理和工程两个方面的过程均已文档化、标准化,并形成了整个软件组 织的标准软件过程。所有项目均使用经过批准、裁剪的标准软件过程来开发和维护软件。
  • 已管理级的软件过程和产品质量有详细的度量标准并且得到了定量的认证和控制。
  • 优化级的软件过程可以通过量化反馈和先进的新思想、新技术来不断地、持续性地改进。

11.假设你要开发一个软件,它的功能是把73624.9385这个数开平方,所得到的结果应该精 确到小数点后4位。一旦实现并测试完之后,该产品将被抛弃。你打算选用哪种软件生命周期模型?

对这个软件的需求很明确,实现开平方功能的算法也很成熟。因此,既无须通过原型模型来分析需求也无须用原型模型来验证设计方案。此外,一旦实现并测试完之后,该产品将被抛 弃,因此也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件。

综上所述,为了开发这个简单的软件,使用大多数人所熟悉的瀑布模型就可以了。

3、结构化分析

  1. 需求工程的主要目的是()
  • 系统开发的具体方案
  • 进一步确定用户的需求
  • 解决系统是“做什么的问题”
  • 解决系统是“如何做的问题”
  1. 需求分析的主要方法有()
  • 形式化分析方法
  • PAD图描述
  • 结构化分析SA方法
  • 程序流程图
  1. SA方法的主要描述手段有()
  • 系统流程图和模块图
  • DFD图、数据词典、加工说明
  • 软件结构图、加工说明
  • 功能结构图、加工说明
  1. 画分层DFD图的基本原则有()
  • 数据守恒原则
  • 分解的可靠性原则
  • 子、父图平衡的原则
  • 数据流封闭的原则
  1. 在E-R模型中,包含以下基本成分()
  • 数据、对象、实体
  • 控制、关系、对象
  • 实体、关系、控制
  • 实体、属性、关系
  1. 在下面的叙述中哪一个不是软件需求分析的任务?()
  • 问题分解
  • 可靠性与安全性要求
  • 结构化程序设计
  • 确定逻辑模型
  1. 需求规格说明书的作用不应该包括()
  • 软件设计的依据
  • 用户与开发人员对软件要做什么的共同理解
  • 软件验收的依据
  • 软件可行性研究的依据
  1. 软件需求规格说明书的内容不应该包括(
  • 对重要功能的描述
  • 对算法的详细过程描述
  • 对数据的要求
  • 软件的性能
  1. 软件需求分析阶段的工作,可以分为以下4个方面:对问题的识别、分析和综合、编写需求分析文档以及()
  • 总结
  • 阶段性报告
  • 需求分析评审
  • 以上答案都不正确
  1. 下述任务中,不属于软件工程需求分析阶段的是()
  • 分析软件系统的数据要求
  • 确定软件系统的功能需求
  • 确定软件系统的性能需求
  • 确定软件系统的运行平台
  1. 进行需求分析可使用多种工具,但()是不适用的。
  • 数据流图
  • PAD图
  • 状态转换图
  • 数据词典
  1. 在需求分析之前有必要进行()工作
  • 程序设计
  • 可行性分析
  • E-R分析
  • 2NF分析
  1. 数据流图是进行软件需求分析的常用图形工具,其基本图形符号是()
  • 输入、输出、外部实体和加工
  • 变换、加工、数据流和存储
  • 加工、数据流、数据存储和外部实体
  • 变换、数据存储、加工和数据流
  1. 在结构化分析方法中,用以表达系统内数据的运动情况的工具是()
  • 数据流图
  • 数据字典
  • 结构化语言
  • 判定表与判定树
  1. 需求规格说明书在软件开发中具有重要的作用,它也可以作为软件可行性分析的依据。
  • ×
  1. 需求分析的主要目的是解决软件开发的具体方案。
  • ×
  1. 需求规格说明书描述了系统每个功能的实现。
  • ×
  1. 非功能需求是从各个角度对系统的约束和限制,反映了应用对软件系统质量和特性的额外要求。
  1. 需求评审人员主要由开发人员组成,一般不包括用户。
  • ×
  1. 分层的DFD图可以用于可行性分析阶段,描述系统的物理结构。
  • ×
  1. 信息建模方法是从数据的角度来建立信息模型的,最常用的描述信息模型的方法是E-R图。
  1. 用于需求分析的软件工具,应该能够保证需求的正确性,即验证需求的一致性、完整性、现实性和有效性。
  1. 需求分析是开发方的工作,用户的参与度不大。
  • ×

1.如何理解需求分析的作用和重要性。

一般情况下,用户并不熟悉计算机的相关知识,而软件开发人员对相关的业务领域也不甚了解,用户与开发人员之间对同一问题理解的差异和习惯用语的不同往往会为需求分析带来很大 的困难。因此,开发人员和用户之间充分和有效的沟通在需求分析的过程中至关重要。

2.如何理解结构化需求分析方法的基本思想。

结构化需求分析是一种面向数据流的需求分析方法。它基于“分解”和“抽象”的基本思 想,逐步建立目标系统的逻辑模型,进而描绘出满足用户要求的软件系统。“分解”是指对于一个复杂的系统,为了将复杂性降低到可以掌握的程度,可以把大问题分解 为若干个小问题,然后分别解决。最顶层描述了整个目标系统,中间层将目标系统划分为若干个模块,每个模块完成一定的功能,而最底层是对每个模块实现方法的细节性描述。可见,在逐层分解的过程中,起初并不考虑细节性的问题,而是先关注问题最本质的属性,随着分解自顶向下进行,才逐渐考虑越来越具体的细节。这种用最本质的属性表示一个软件系统的方法就是“抽象”。

3.如何进行结构化需求分析,其建模方法都有哪些?

结构化分析的具体步骤如下

建立当前系统的“具体模型”:系统的“具体模型”就是现实环境的真实写照,这样的表 达与当前系统完全对应,用户容易理解。

抽象出当前系统的逻辑模型:分析系统的“具体模型”,抽象出其本质的因素,排除次要因素,获得当前系统的“逻辑模型”。

建立目标系统的逻辑模型:分析目标系统与当前系统逻辑上的差别,从而进一步明确目标 系统“做什么”,建立目标系统的“逻辑模型”。

为了对目标系统进行完整的描述,还需要考虑人机界面和其他一些问题。

在结构化分析中经常用到的建模方法主要有以下几种。

  • 数据流图。
  • 实体关系。
  • 控制流图。
  • 状态转换图。

4.为什么需求分析特别重要?

需求分析特别重要,是因为以下几点

许多大型应用系统的失败,最后均归结到需求分析:要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客 户配合不好,导致客户又孺求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。

需求分析的输出文档是《用户需求报告》。它既是软件生命周期中的第一个里程碑,又是 客户、软件开发人员和项目管理人员三者必须遵守的一根基线,是三者共同工作的基础,是项目 Alpha测试和Beta测试的准则,是供方交付产品和需方验收产品的依据。

需求分析要占用整个软件开发时间或工作量的30%左右。

需求获取中的错误,属于软件开发中的早期错误,它会在后续的设计和实现中进行发散式 的传播。

根据以上4个原因,IT企业的高层经理对需求分析特别重视,常常派经验最丰富的人员去作 项目需求。正因为如此,“系统分析员”才是软件行业中最高的技术职称。

5.需求分析的目的和目标是什么?

  • 需求分析的目的:弄清用户对系统的细节要求,完整、准确、清晰、具体地回答目标系 统“做什么”。
  • 需求分析的目标:是对用户提出的软件功能、性能等应用问题及其环境进行分析与理解, 釆用一系列的分析方法和技术,把系统可行性分析阶段产生的系统规格说明书和项目规划逐步 精确化、完全化、一致化,借助于当前系统的逻辑模型导出目标系统的逻辑模型,最终形成需 求规格说明文档的过程。

6.需求开发经过哪些步骤?每个步骤有何作用?

  • 需求获取:即调查软件需求,需求是用户对目标软件系统在功能、性能、行为、设计约束 等方面的期望。
  • 需求分析:分析建模也称需求建模,建模是对现实世界进行抽象的过程。它通过符号和文 字说明来描述系统模型,使用户和开发者之间建立共同的语言基础,消除理解歧义。
  • 需求说明:编写需求文档,也称编写需求规格说明书,或称需求说明、需求描述。需求说 明书是需求阶段的最终成果,也是需求分析阶段复审的依据。它是用户领域专家、软件分析师、 软件设计师共同交流的途径和媒介;是交付给用户文档的一部分。
  • 需求验证:即需求评审。根据需求说明书,分析师、设计师、客户会评审文档,对需求的 正确性、一致性、完整性、无二义性进行评审、确认。

7.需求分析的难点在哪里?

需求分析的难点:在系统的功能、性能和接口方面,开发者与客户要达成完全一致的需求,让客户最终签字确认,并保证在项目验收前,需求相对稳定不变。万一需求有一点变化,双方必须履行“需 求变更管理程序”,而变更管理程序在签订合同时已经做了规定。要知道,合同是具有法律效力的。

8.需求分析的理论基础有哪些?

需求分析的理论基础:什么是软件需求、软件需求需要量化、需求是一个过程、需求过程 中的角色、需求过程是一个迭代的过程、需求来源。

9.为什么说需求过程是一个迭代过程?

由于人们对客观事物的认识是不断深化的,因此需求过程是一个迭代过程,每次迭代都可 提供更高质量和更详细内容的软件需求。这种迭代会给项目带来一定的风险,上一次迭代的设计 实现可能会因为需求不足而被推翻。

在很多情况下,对需求的理解会随着设计过程和实现过程的深入而不断深化,这也会导致在 软件生命周期的后期,重新修订软件需求。原因可能来自于错误的分析,客户环境和业务流程的 改变,市场趋势的变化等。无论是什么原因,软件分析师应认识到需求变化的必然性,并采取相 应的措施,减少需求变更对软件系统的影响。

10.需求管理过程的目标和内容是什么?

  • 需求管理的目标:保证软件项目或产品满足客户在软件功能、性能、接口3个方面的需求。
  • 需求管理过程的内容,主要包括需求确认、需求评审、需求追踪和需求变更活动管理。

11.用户需求报告与需求分析规格说明书有何差异?

用户需求报告与需求分析规格说明书的差异如下

用户需求报告是对外的,需求规格说明书是对内的。用户需求报告是站在用户(使用者) 的角度、用他们可以看懂的语言(如自然语言)写的,需要用户签字确认。需求规格说明书则不同,它是对内的,不需要用户签字确认。它是站在开发者的角度、可以采用形式化或半形式化的语言进行描述。

一般来说,用户需求报告是合同的产物,需求规格说明书是立项建议书的产物。用户需求 报告是对合同而言的。需求规格说明书是对立项建议书而言的。由用户需求报告可产生需求规格说明书。签完合同后,一般是先写出用户需求报告,后写出需求规格说明书。当需求报告由用户签字 确认后,需求规格说明书很快就会出来了。

12.需求评审的作用是什么?为什么必须评审?评审的标准是什么?

评审的作用,必要性及标准如下

  • 评审的作用(目的):为了及早消除隐藏的错误,确保需求说明准确、完整、清晰、无二 义性地表达产品的功能和质量要求。
  • 评审的必要性:需求说明书的描述几乎用的都是自然语言,这种非形式化的语言容易岀现 不准确、冗余、遗漏和理解不一致等问题。因此,对规格说明书的审查是必须的。通过评审后的需求文档才是有效的。
  • 评审的标准:就是对需求分析和说明的质量要求:正确性、无歧义性、完整性、一致性、 重要性/稳定性分级、可验证性、可修改性、可追踪性。

13.请简述可行性研究所研究的问题。

可行性研究主要做4个方面的研究

  • 经济可行性:进行成本/效益分析。从经济角度判断系统开发是否“合算”。
  • 技术可行性:进行技术风险评价。从开发者的技术实力、以往工作基础、问题的复杂性等出发,判断系统开发在时间、费用等限制条件下成功的可能性。
  • 法律可行性:确定系统开发可能导致的任何侵权、妨碍和责任。
  • 方案的选择:评价系统或产品开发的几个可能的候选方案,最后给出结论意见。

14.请简述数据流图的作用。

数据流图的作用:数据流图可以用来抽象地表示系统或软件。从信息传递和加工的角度, 它以图形的方式刻画数据流从输入到输出的移动变换过程,同时可以按自顶向下、逐步分解的方法表示内容不断增加的数据流和功能细节。因此,数据流图既提供了功能建模的机制,也提供了信息流建模的机制,从而可以建立起系统或软件的功能模型。

15.请简述数据字典的作用。

数据词典的作用:分析模型中包含了对数据对象、功能和控制的表示。在每一种表示中, 数据对象和控制项都扮演一定的角色。为表示每个数据对象和控制项的特性,建立了数据词典。数据词典精确地、严格地定义了每一个与系统相关的数据元素,并以字典式顺序将它们组织起来, 使得用户和分析员对所有的输入、输出、存储成分和中间计算有共同的理解。

4、结构化设计

  1. 为了提高模块的独立性,模块之间最好是()
  • 公共环境耦合
  • 控制耦合
  • 数据耦合
  • 特征耦合
  1. 在面向数据流的软件设计方法中,一般将信息流分为()
  • 数据流和控制流
  • 交换流和控制流
  • 事务流和控制流
  • 交换流和事务流
  1. 模块独立性是软件模块化所提出的要求,衡量模块独立性的度量标准是模块的()
  • 内聚性和耦合性
  • 局部化和封装化
  • 抽象和信息隐藏
  • 逐步求精和结构图
  1. 模块的独立性是由内聚性和耦合性来度量的,其中内聚性是()
  • 模块间的联系程度
  • 信息隐藏程度
  • 模块的功能强度
  • 接口的复杂程度
  1. 当算法中需要用一个模块去计算多种条件的复杂组合,并根据这些条件完成适当的功能时,从供选择的答案中,选出合适的描述工具。()
  • 程序流程图
  • N-S图
  • PAD图
  • 判定表
  1. 面向数据流的软件设计方法可将()映射成软件结构。
  • 控制结构
  • 模块
  • 数据流
  • 事务流
  1. Jackson方法根据()来导出程序结构。
  • 数据流图
  • 数据间的控制结构
  • 数据结构
  • IPO图
  1. 软件设计说明书是软件概要设计的主要成果。
  • ×
  1. 软件设计中设计复审和设计本身—样重要,其主要作用是避免后期付出高代价。
  1. HIPO法既是需求分析方法,又是软件设计方法。
  1. 划分模块可以降低软件的复杂度和工作量,所以应该将模块分得越小越好。
  • ×
  1. SD法是—种面向数据结构的设计方法,强调程序结构与问题结构相对应。
  • ×
  1. 判定表的优点是容易转换为计算机实现,缺点是不能够描述组合条件。
  • ×
  1. 模块独立要求高耦合低内聚。
  • ×

1.请简述软件设计与需求分析的关系。

软件设计可看作将需求规格说明书逐步转换为软件源代码的中间过渡过程。

  • 活动输入 需求规格说明书
  • 活动输出 设计规格说明书
  • 活动目标 需求模型转换成设计模型
  • 活动过程 层层分解,逐步求精

2.请简述软件设计的工作目标和任务。

  • 软件设计的目标:将需求模型细化为设计模型,形成“设计规格说明书”。
  • 软件设计的任务:概要设计和详细设计。概要设计是根据需求确定软件和数据的总体框架, 详细设计是将其进一步精化成软件的算法表示和数据结构。

3.请简述在软件设计的过程中需要遵循的规则。

在软件设计的过程中需要遵循的规则:模块化、抽象化、逐步求精和信息隐藏。

4.软件设计如何分类,分别有哪些活动?

从活动任务来看,软件设计是对软件需求进行:数据设计、体系结构设计、接口设计、构 件设计和部署设计。

从工程管理角度来看,软件设计分为概要设计和详细设计。前期进行概要设计,得到软件系 统的基本框架。后期进行详细设计,明确系统内部的实现细节。

5.什么是模块、模块化?软件设计为什么要模块化?

定义如下

  • 模块:是完成特定功能的程序实体。模块是构成程序的基本构件。
  • 模块化:是指解决一个复杂问题时自顶向下逐层分解成若干模块的过程。每个模块完成一 个特定的子功能,所有模块按系统结构组合起来,完成整个系统所要求的功能。
  • 模块化设计:将问题简化,划分模块可使每一个模块完成单一的功能。可以独立地进行模块的编码测试,便于软件开发工作的组织。把每一个模块要解决的问题局限在有限的范围,减少出错机会。便于纠错。便于对特定的模块进行优化处理。一个模块可被重复使用,以提高软件产品的复用率。程序易于理解。利于估计工作量和开发成本。

6.为什么说“高内聚、低耦合”的设计有利于提高系统的独立性?

内聚和耦合往往密切相关,模块的高内聚通常意味着低耦合。低耦合因为模块之间的耦合 程度越低,相互影响就越小,发生异常后产生连锁反应的概率就越低;在修改一个模块时,低耦 合的系统可以把修改范围尽量控制在最小的范围内;对一个模块进行维护时,其他模块的内部程 序的正常运行不会受到较大的影响。

7.请简述面向数据流的设计方法的主要思想。

面向数据流的设计方法就是通常所说的结构化设计方法。它是以数据流图为基础,将DFD 变换成软件结构的不同映射方法,以软件结构图(SC图)的形式表现。SC图描述软件系统的层 次和分块结构的关系,体现模块与模块之间的联系与通讯,从而表达软件的体系结构。

8.请简述界面设计应该遵循的原则。

界面设计应该遵循的原则如下。

  • 置界面于用户控制之下:以不强迫用户进入不必要的或不希望的动作的方式来定义交互 模式;提供灵活的交互;允许用户交互可以被中断和撤销;当技能级别增长时可以使交互流水化 并允许定制交互;使用户隔离内部技术细节;设计应允许用户和出现在屏幕上的对象直接交互。
  • 减少用户的记忆负担:减少对短期记忆的要求;建立有意义的缺省;定义直觉性的捷径; 界面的视觉布局应该基于真实世界的隐喻;以不断进展的方式揭示信息。
  • 保持界面一致:允许用户将当前的任务放入有意义的语境;在应用系列内保持一致性;如 果过去的交互模式已经建立起了用户期望,不要改变它,除非有不得已的理由。

9.改进的Jackson图与传统的Jackson图相比有哪些优点?

运用改进的Jackson图表达选择型或循环型结构时,选择条件或循环结束条件可以在图上直接表现出来,并且框间连线为直线,方便打印输出。

10.请简述软件设计优化的准则。

软件设计优化的准则如下

  • 划分模块时,尽量做到高内聚、低耦合,保持模块的相对独立性。模块划分的准则:将相关的各部分放在一起,无关的东西不要放在一起。
  • 模块的大小要适中。
  • 模块的接口要简单、清晰、含义明确,便于理解,易于实现、易于测试和维护。
  • 一个模块的作用范围应在其控制范围之内,且判定所在的模块,应与受其影响的模块在层 次上尽量靠近。
  • 软件结构的深度、宽度、扇入、扇出应适当。
  • 力求设计单入口和单出口的模块,避免“病态连接”,防止内容耦合。
  • 设计功能可预测模块的划分,应防止功能过分局限。

11.请简述结构化设计的优点。

  • 减少设计复杂性。将大化小,使复杂问题简单化
  • 结构独立。将程序划分成多个相对独立的模块
  • 模块功能单一化,可使软件设计获得最大的益处
  • 易于进行软件修改
  • 易于开发和维护

5、结构化实现

  1. 程序语言的特性包括()
  • 习惯特性
  • 算法特性
  • 工程特性
  • 技术特性
  1. 软件实现是软件产品由概念到实体的一个关键过程,它将( )的结果翻译成用某种程序设计语言编写的并且最终可以运行的程序代码。虽然软件的质量取决于软件设计,但是规范的程序设计风格将会对后期的软件维护带来不可忽视的影响。
  • 软件设计
  • 详细设计
  • 架构设计
  • 总体设计
  1. 成功的测试是指运行测试用例后()
  • 发现了程序错误
  • 未发现程序错误
  • 证明程序正确
  • 改正了程序错误
  1. 白盒测试法是根据程序的()来设计测试用例的方法。
  • 输出数据
  • 内部逻辑
  • 功能
  • 输入数据
  1. 软件的集成测试工作最好由()承担,以提高集成测试的效果。
  • 该软件的设计人员
  • 该软件开发组的负责人
  • 不属于该软件开发组的软件设计人员
  • 该软件的编程人员
  1. 黑盒测试是从()观点的测试,白盒测试是从()观点的测试。
  • 开发人员、管理人员
  • 用户、管理人员
  • 用户、开发人员
  • 开发人员、用户
  1. 软件测试可能发现软件中的(),但不能证明软件()。
  • 所有错误、没有错误
  • 设计错误、没有错误
  • 逻辑错误、没有错误
  • 错误、没有错误
  1. 软件测试的目的是()
  • 证明软件的正确性
  • 找出软件系统中存在的所有错误
  • 证明软件系统中存在错误
  • 尽可能多的发现软件系统中的错误
  1. 使用白盒测试方法时确定测试数据应根据()和指定的覆盖标准。
  • 程序的内部逻辑
  • 程序的复杂程度
  • 程序的难易程度
  • 程序的功能
  1. 黑盒测试方法根据()设计测试用例。
  • 程序的调用规则
  • 软件要完成的功能
  • 模块间的逻辑关系
  • 程序的数据结构
  1. 在软件测试中,逻辑覆盖标准主要用于()
  • 白盒测试方法
  • 黑盒测试方法
  • 灰盒测试方法
  • 回归测试方法
  1. 集成测试的主要方法有两个,一个是(),一个是()
  • 白盒测试方法、黑盒测试方法
  • 等价类划分方法、边象值分析方法
  • 渐增式测试方法、非渐增式测试方法
  • 因果图方法、错误推测方法
  1. 验收测试的任务是验证软件的()
  • 可靠性
  • 正确性
  • 移植性
  • 有效性
  1. 软件测试的目的是尽可能发现软件中的错误,通常()是代码编写阶段可进行的测试,它是整个测试工作的基础。
  • 集成测试
  • 系统测试
  • 验收测试
  • 单元测试
  1. 程序设计语言是指编程时表现出来的特点、习惯、逻辑思维等。
  • ×
  1. 进行程序设计语言的选择时,首先考虑的是应用领域。
  1. 好程序的一个重要标准是源程序代码的逻辑简明清晰、易读易懂。
  1. 软件测试的目的是尽可能多地发现软件中存在的错误,将它作为纠错的依据。
  1. 测试用例由输入数据和预期的输出结果两部分组成。
  1. 白盒测试是结构测试,主要以程序的内部逻辑为基础设计测试用例。
  1. 软件测试的目的是证明软件是正确的。
  • ×
  1. 单元测试通常应该先进行“人工走查”,再以白盒法为主,辅以黑盒法进行动态测试。
  1. 白盒测试法是—种静态测试方法,主要用于模块测试。
  • ×
  1. 在等价分类法中,为了提高测试效率,一个测试用例可以覆盖多个无效等价类。
  • ×
  1. 发现错误多的模块,残留在模块中的错误也多。

1.在选择编程语言时,通常要考虑哪些因素?

  • 待开发系统的应用领域,即项目的应用范围。
  • 用户的要求。
  • 软件开发人员的喜好和能力。
  • 系统的可移植性要求。
  • 算法和数据结构的复杂性。

2.请简述编码风格的重要性。要形成良好的编码风格可以从哪些方面做起?

阅读程序是软件开发和维护过程中的一个重要组成部分,程序实际上也是一种供人阅读的文章。应当在编写程序时讲究程序的风格,这将大量地减少人们阅读程序的时间。良好的编码风 格有助于编写岀可靠而又容易维护的程序,编码的风格在很大程度上决定着程序的质量。要形成 良好的编码风格可从以下方面做起。

  • 版权和版本声明。
  • 程序版式。
  • 注释。
  • 命名规则。
  • 数据说明。
  • 代码构造。
  • 输入输出。
  • 效率。

3.什么是调试?什么是测试?二者有何区别?

  • 调试(debug )指的是对模块的调试,是程序员交付可运行的代码模块所必须经历的工作。 软件测试(test)有如下特点。
  • 软件测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错。
  • 不仅仅是测试程序,还应该对开发过程中所有的产品进行测试,包括文档,其目的是为了尽早地、尽可能多地发现并排除软件中潜在的错误。

4.请简述软件测试的原则?

软件测试的原则如下。

  • 完全测试是不可能的。
  • 测试中有风险存在。
  • 软件测试只能表明缺陷的存在,而不能证明软件产品已经没有缺陷。
  • 软件产品中所存在的错误数与已发现的错误数成正比。
  • 要避免软件测试的杀虫剂现象。
  • 在设计测试用例时,应包括输入数据和预期的输出结果两个部分,并且,输入数据不仅应包括合法的情况,还应该包括非法的输入情况。
  • 要集中测试容易出错或错误较多的模块。
  • 应该长期保留所有的测试用例。
  • 使开发人员和测试人员分立,即软件的开发工作和测试工作不能由同一部分人来完成。
  • 测试工作应该尽早开始,并且贯穿于整个开发过程中。

5.请简述静态测试和动态测试的区别。

按照执行测试时是否需要运行程序,软件测试可以划分为静态测试和动态测试。

  • 静态测试以人工测试为主,通过测试人员认真阅读文档和代码,仔细分析其正确性、一致性 及逻辑结构的正确性,从而找岀软件产品中的错误或缺陷。静态测试对自动化工具的依赖性较小, 通过人脑的思考和逻辑判断来查找错误,因而可以更好地发挥人的主观能动性。
  • 与静态测试不同的是,动态测试需要通过实际运行被测程序来发现问题。测试人员可以输入一系列的测试用例,通过观察测试用例的输出结果是否与预期相符来检验系统内潜在的问题或缺陷。

6.请对比黑盒测试与白盒测试。

黑盒测试

  • 优点:适用于各阶段测试; 从产品功能角度测试; 易入手生成测试数据
  • 缺点:某些代码得不到测试;如果规格说明有误,则无法发现; 易进行充分性测试
  • 性质:是一种确认技术,回答"我们在构造的是一个正确的系统吗"

白盒测试

  • 优点:可构成测试数据使特定程序部分得到测试; 有一定的充分性度量手段;可有较多工具支持
  • 缺点:通常不易生成测试数据;无法对未实现规格说明的部分进行测试; 工作量大,通常只用于单元测试,有应用局限
  • 性质:是一种验证技术,回答“我们是在正确地构造一个系统吗”

7.软件测试的目的是什么?

  • 测试是一个为了发现程序中的错误为目的的程序执行过程。
  • 一个好的测试用例是能最大限度地找到迄今为止尚未发现的错误。
  • 成功的测试是能发现了那些尚未发现的错误。

8.什么是黑盒测试?有哪些常用的黑盒测试方法。

  • 黑盒测试是依据软件的需求规格说明书,检查程序功能是否满足需求的要求。黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据,产生正确地输出信息。
  • 主要的黑盒测试方法有:等价类划分、边界值分析、错误推测法、因果图法和场景法。

9.什么是白盒测试?有哪些常用的白盒测试方法。

  • 白盒测试主要针对于程序内部逻辑和数据流程的测试,因此白盒测试的测试用例设计需要 了解程序的内部逻辑。
  • 常用的白盒测试方法主要有逻辑覆盖法、基本路径测试法。

9.什么是白盒测试?有哪些常用的白盒测试方法?

10.请简述验证与确认之间的区别。

11.软件测试应该划分几个阶段?各个阶段应重点测试的内容是什么?

10.简述验证与确认之间的区别。

  • 验证是检验开发出来的软件产品和设计规格说明书的一致性,即是否满足软件厂商的生产要求,保证生产出的产品是高质量的产品。确认就是检验产品功能的有效性,即是否满足用户的真 正需求,确认是用户需要的产品。
  • 设计规格说明书本身有可能存在错误,即便软件产品中某个功能实现的结果和设计规格说明书完全一致,但也可能不是用户需要的。因为设计规格说明书一开始就对用户需求的理解错了, 所以仅仅进行验证测试是不充分的,还要进行确认测试。

11.软件测试应该划分几个阶段,各个阶段应重点测试的内容是什么?

或者说软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?

软件测试总的来说可分为单元测试、集成测试、系统测试、验收测试。每个阶段又分为确定测试计划,测试设计,设计测试用例,实施测试,进行测试报告5个步骤。

  • 单元测试是对软件中的基本组成单位进行的测试,如一个模块、一个过程等。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。
  • 集成测试是软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。
  • 系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求,检查软件的行为和输出是否正确并非是一项简单的任务,它被称为测试的“先知者问题”。
  • 验收测试是向软件的购买者展示该软件系统满足其用户的需求。它的测试数据通常是系统测试的测试数据的子集。
  • 回归测试是在软件维护阶段,对软件进行修改之后进行的测试。其目的是检验对软件进行的修改是否正确。

6、面向对象方法学导论

  1. 汽车有一个发动机,汽车和发动机之间的关系是()关系。
  • 组装
  • 整体部分
  • 分类
  • —般具体
  1. ()是把对象的属性和操作结合在一起,构成一个独立的对象,其内部信息对外界是隐藏的,外界只能通过有限的接口与对象发生联系。
  • 多态性
  • 继承
  • 消息
  • 封装
  1. ()意味着—个操作在不同的类中可以有不同的实现方式。
  • 多继承
  • 多态性
  • 消息
  • 封装
  1. 每个对象可用它自己的一组属性和它可以执行的一组()来表征。
  • 操作
  • 功能
  • 行为
  • 数据
  1. 应用执行对象的操作可以改变该对象的() 。
  • 行为
  • 功能
  • 属性
  • 数据
  1. 面向对象的主要特征除了对象的唯—性、封装、继承外,还有()
  • 兼容性
  • 完整性
  • 可移植性
  • 多态性
  1. 关联是建立()之间关系的一种手段。
  • 对象
  • 功能
  • 属性
  1. 面向对象软件技术的许多强有力的功能和突出的优点,都来源于把类组织成一个层次结构的系统,一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是(),一个类可获得其父类的全部描述(数据和操作)。
  • 兼容性
  • 继承性
  • 复用性
  • 多态性
  1. 所有的对象可以成为各种对象类,每个对象类都定义了一组()
  • 说明
  • 类型
  • 过程
  • 方法
  1. 通过执行对象的操作可改变对象的属性,但它必须通过()的传递。
  • 操作
  • 消息
  • 信息
  • 集成
  1. 下列不属于面向对象的要素有()
  • 继承
  • 抽象
  • 分类性
  • 封装
  1. 类是指具有相同或相似性质的对象的抽象,类的具体化就是对象。
  • ×
  1. 继承性是父类和子类之间共享数据结构和消息的机制,这是类之间的一种关系。
  1. 多态性增强了软件的灵活性和重用性,允许用更为明确、易懂的方式去建立通用软件,多态性和继承性相结合使软件具有更广泛的重用性和可扩充性。
  1. 类的设计过程包括:确定类、确定关联类、确定属性和识别继承关系。
  1. 用面向对象方法开发的软件系统,可维护性好。
  1. 模型是对现实的简化,建模是为了更好地理解所开发的系统。
  1. 多态性防止了程序相互依赖而带来的变动影响。
  • ×
  1. 类封装比对象封装更具体、更细致。
  • ×
  1. 面向对象的继承性是子类自动共享父类数据结构和方法的机制。

1.请阐述面向对象的基本概念。

面向对象的基本概念包括对象、类、封装、继承和多态。对象可以是客观世界中存在的事物,也可以是概念化的实体,它由一组属性和操作组成。属性是用来描述对象静态特征的数据项,是对客观世界实体所具有性质的抽象。操作是用来描述对象动态特征。类是对对象的抽象,是对具有相同属性和相同操作的一组相似对象的定义。封装是指把对象的属性和操作结合在一起,组 成一个独立的单元。继承表示类之间的层次关系,它使得某类对象可以自动拥有另外一个或多个

对象的全部属性和操作。多态是一种使父类中定义的属性或操作被子类继承后,可以有不同的实现的机制。

2.与面向结构化开发过程相比,为什么面向对象能更真实地反映客观世界?

  • 结构化也就是面向过程的方法:从客观事物的行为出发,肢解客观事物的整体性,从分析、 设计到编程完全看不出事物的原貌。
  • 面向对象:从观察、抽象客观事物开始,就以事物原貌、事物的整体为出发点。从分析、设计、编程一直反映事物的原貌,它利用事物具有整体性、关联性、交互性、继承性和多态性的本源特征映射领域问题到计算机世界中。

3.什么是面向对象技术?面向对象方法的特点是什么?

  • 面向对象分析的目标是完成对所需求解问题的分析,确定待建的系统所要做的工作,定义 所有与待解决问题相关的类,并建立系统的模型。面向对象分析的关键是识别出问题域中的对象, 并分析它们之间的关系,最终建立起问题域的简洁、精确、可理解的正确模型。
  • 面向对象分析模型通常包括对象模型、动态模型和功能模型。对象模型是最基本、最重要、最核心的模型,描述软件系统的静态结构;动态模型描述系统的控制结构;功能模型描述软件系统必须完成的功能。这3种模型各自从不同的侧面反映软件系统的内容,相互影响、相互制约, 有机的结合在一起,全面地表达对目标系统的需求。

4.什么是类?类与传统的数据类型有什么关系?

  • 具有相同特征和行为的对象归结在一起就形成类,也就是说,类是具有相同属性和服务的 一组对象的集合。
  • 在面向对象方法学中,类是某些对象的模板,抽象地描述属于该类的全部对象的属性和操作。 属于某个类的对象称为该类的实例。每个对象都是某个类的实例,对象的状态则包含在实例的属 性中。类和实例的关系是一种抽象与具体的关系。实例是类的具体体现,类是多个实例的综合抽 象。现实中没有真正的类存在,类只是对具有相同属性和行为的一组相似的对象的抽象,而现实 中存在的只是某一类的具体的实例。例如,现实中没有抽象的“汽车”,人们只见到了具体的一辆辆的卡车、小轿车等。

5.与传统的软件工程方法相比,面向对象的软件工程方法有哪些优点?

  • 符合人类的思维习惯。面向对象的软件工程方法最重要的特点就是把事物的属性和操作组成一个整体,以对象为核心,更符合人类的思维习惯。此外,它更注重人类在认识客观世界时循 序渐进、逐步深化的特点。它主张在软件开发的过程中多次反复迭代的思想。
  • 可复用性好。面向对象的软件工程方法由于采用了继承和多态的机制,,极大地提高了代码的可复用性。
  • 稳定性好。面向对象的软件工程方法基于对象的概念。当目标系统的需求发生变化时,只要实体及实体之间的联系不发生变化,就不会引起软件系统结构的变化,而只需要对部分对象进行局部修改即可。
  • 可维护性好。由于利用面向对象软件工程方法开发的软件系统稳定性好和可复用性好,而且采用了封装和信息隐藏机制,易于对局部软件进行调整,因此系统的可维护性比较好。

7、面向对象分析

  1. 面向对象分析的首要工作是建立( )
  • 系统的动态模型
  • 系统的功能模型
  • 基本的E-R图
  • 问题的对象模型
  1. 面向对象的分析方法主要是建立3类模型,即()
  • 系统模型、ER模型、应用模型
  • 对象模型、动态模型、功能模型
  • ER模型、对象模型、功能模型
  • 对象模型、动态模型、应用模型
  1. 软件开发过程中,抽取和整理用户需求并建立问题域精确模型的过程称为()
  • 生命周期
  • 面向对象设计
  • 面向对象分析
  • 面向对象程序设计
  1. 面向对象分析阶段建立的3个模型中,核心的模型是()模型
  • 功能
  • 动态
  • 对象
  • 分析
  1. 面向对象分析是对系统进行( ) 的—种方法。
  • 设计评审
  • 程序设计
  • 需求建模
  • 测试验收
  1. 应该在( ),确定对象类中应有的服务。
  • 建立对象模型之时
  • 建立动态模型和功能模型之后
  • 建立功能模型之后
  • 建立动态模型之后
  1. 面向对象的动态模型中,每张状态图表示()的动态行为。
  • 某一个类
  • 有关联的若干个类
  • —系列事件
  • —系列状态
  1. 在考察系统的一些涉及时序和改变的状况时,要用动态模型来表示。动态模型着重于系统的控制逻辑,它包括两个图:一个是事件追踪图,另一个是( ) 。
  • 顺序图
  • 状态图
  • 系统结构图
  • 数据流图
  1. 动态模型的描述工具是( ) 。
  • 设计图
  • 结构图
  • 状态图
  • 对象图
  1. 对象模型的描述工具是( ) 。
  • 状态图
  • 数据流图
  • 结构图
  • 对象图
  1. 功能模型中所有的()往往形成一个层次结构,在这个层次结构中一个数据流图的过程可以由下一层数据流图做进一步说明。
  • 事件追踪图
  • 物理模型图
  • 状态迁移图
  • 数据流图
  1. 面向对象的开发方法将过程作为最基本元素,是分析问题、解决问题的核心。
  • ×
  1. 用例需求分析方法采用的是—种结构化的情景分析方法,即基于场景建模的方法。
  1. 面向对象分析方法认为系统是对象的集合,是以功能和数据为基础的。
  • ×
  1. 面向对象分析的核心在于建立—个描述软件系统的模型。
  • ×
  1. 面向对象的分析过程主要包括3项内容:理解、表达和验证。
  1. 面向对象分析就是抽取和整理用户需求并建立问题域精确模型的过程。
  1. 面向对象的方法是以类作为最基本的元素,它是分析问题、解决问题的核心。
  • ×
  1. 功能模型是类似编译器之类系统的主要模型。

1.请对比面向对象需求分析方法和结构化需求分析方法。

  • 结构化需求分析方法基于“分解”和“抽象”的基本思想,逐步建立目标系统的逻辑模型, 进而描绘出满足用户要求的软件系统。
  • 常用的结构化需求分析工具有数据流图、数据字典和E-R 图。数据流图把软件系统看成是由数据流联系的各种功能的组合,可以用来建立目标系统的逻辑 模型。数据字典用于定义数据流图中各个图元的具体内容,为数据流图中出现的图形元素做出确 切的解释。E-R图可以用于描述应用系统的概念结构数据模型,它采用实体、关系和属性这3个基本概念来进行建模。面向对象需求分析方法主要基于面向对象的思想,以用例模型为基础进行需求分析。面向对 象的概念中主要涉及了对象、类、封装、继承和多态等概念。因为面向对象的软件工程方法更符 合人类的思维习惯,稳定性好,而且可复用性好,所以在目前的软件开发领域中最为流行。

2.类间的外部关系有几种类型?每种关系表达什么语义?

类的外部关系有关联、继承、依赖3种关系,画出完整的类图是OOA建模的最终结果。

  • 关联:对象之间的静态关系,表示一个对象拥有另一些对象,或一个对象是由另外一些对 象组成。
  • 继承:对象之间的静态关系,表示对象之间的父子关系,可提高类的复用性。
  • 依赖:对象之间的信息交互关系,一个对象需要另一些对象为它提供服务。

3.请简述面向对象分析的过程。

面向对象分析的基本任务是运用面向对象的方法,软件工程师和用户必须进行充分的沟通, 以了解基本的用户需求,对问题域和系统责任进行分析和理解。

4.什么是动态模型?

对于一个系统来说,功能模型指明了系统应该“做什么”,而动态模型则明确规定了 “什么时候做”。即在何种状态下、接受了什么事件的触发,来确定对象的可能事件的顺序。

5.请简述如何准备脚本。

在建立动态模型的过程中,脚本是指在某一执行期间内系统中的对象(或其他外部设备) 与目标系统之间发生一个或多个典型的互换信息时产生的事件,所互换的信息值就是该事件的参数。对于各事件,应确定触发事件的动作对象和该事件的参数。

6.请简述如何准备事件跟踪图。

事件跟踪图能形象、清晰地表示事件序列以及事件与对象的关系。在事件跟踪图中,一条竖线代表一个类和对象,每个事件用一条水平的箭头线表示,箭头方向从事件的发送对象指向接受对象。事件按照先后顺序排列,时间从上向下递增。

7.请简述面向对象分析的目的。

  • 面向对象分析的目的是对客观世界的系统进行建模,是定义所有与待解决问题相关的类。
  • 完成对所求解问题的分析,确定系统“作什么”,并建立系统的模型。

8.请简述面向对象分析的基本任务。

面向对象分析的任务如下

  • 获取客户对系统的需求。
  • 标识类和对象。
  • 定义类的结构和层次。
  • 建造对象一关系模型。
  • 建立对象一行为模型。

8、面向对象设计

  1. 只有类的共有界面的成员才能成为使用类的操作,这是软件设计的()原则。
  • 过程抽象
  • 信息隐藏
  • 功能抽象
  • 共享性
  1. ()是表达系统类及其相互联系的图示,它是面向对象设计的核心,是建立状态图、协作图和其他图的基础。
  • 部署图
  • 类图
  • 组件图
  • 配置图
  1. 下面所列的性质中,( ))不属于面向对象程序设计的特性。
  • 继承性
  • 重用性
  • 封装性
  • 可视化
  1. 下列是面向对象设计方法中有关对象的叙述,其中()是正确的。
  • 对象在内存中没有它的存储区
  • 对象的属性集合是它的特征表示
  • 对象的定义与程序中类型概念相当
  • 对象之间不能相互通信
  1. 面向对象程序设计中,基于父类创建的子类具有父类的所有特性(属性和方法),这一特点称为类的()
  • 多态性
  • 封装性
  • 继承性
  • 重用性
  1. 面向对象设计OOD模型的主要部件中,通常不包括( )。
  • 通信部件
  • 人机交互部件
  • 任务管理
  • 数据管理
  1. 面向对象设计时,对象信息的隐藏主要是通过()实现的。
  • 对象的封装性
  • 子类的继承性
  • 系统模块化
  • 模块的可重用
  1. 面向对象设计阶段的主要任务是系统设计和( )。
  • 结构化设计
  • 数据设计
  • 面向对象程序设计
  • 对象设计
  1. 面向对象设计是在分析模型的基础上,运用面向对象技术生成软件实现环境下的设计模型。
  1. 软件设计—般分为总体设计和详细设计,它们之间的关系是全局和局部。
  1. 在面向对象的设计中,应遵循的设计准则除了模块化、抽象、低耦合、高内聚以外,还有信息隐藏。
  1. 一个设计的好的软件系统具有低内聚、高耦合的特征。
  • ×
  1. 面向对象分析和设计活动是一个多次反复迭代的过程。
  1. 关系数据库可以完全支持面向对象的概念,面向对象设计中的类可以直接对应到关系数据库中的表。
  • ×
  1. 用户界面设计对于一个系统的成功是至关重要的,一个设计得很差的用户界面可能导致用户拒绝使用该系统。

1.请比较结构化软件设计方法和面向对象软件设计方法。

结构化软件设计方法和面向对象软件设计方法是两种主流的软件设计方法。

  • 结构化软件设计方法更关注于系统的功能,釆用自顶向下、逐步求精的设计过程,以模块为中心来解决问题,按照工程标准和严格的规范将目标系统划分为若干功能模块。面向数据流的方法和面向数据结构的方法是两种常用的结构化软件设计方法。面向数据流的设计方法大多在概要设计阶段使用,它借助于数据流图来进行设计工作,而面向数据结构的设计方法通常在详细设计阶段使用, 它按输入、输出以及计算机内部存储信息的数据结构进行软件结构的设计,从而把对数据结构的描 述转换为对软件结构的描述。常用的结构化软件设计工具有流程图、N-S图和PAD图等。
  • 与结构化软件设计方法相比,面向对象软件设计方法的使用范围更广。与传统的软件工程方法不同的是,面向对象的方法不强调需求分析和软件设计的严格区分。从分析到设计的过渡,是一个逐渐扩充、细化和完善分析阶段所得到的各种模型的过程。面向对象的设计可以分为系统设计和对象设计两个阶段。系统设计关注于确定实现系统的策略和目标系统的高层结构,而对象设计是对需求分析阶段得到的对象模型的进一步完善、细化或扩充。

2.对基于面向对象思想的设计而言,有哪些方法或机制可以实现信息隐藏?

通常,模块的信息隐藏可以通过接口来实现。模块通过接口与外部进行通信,而把模块的具体实现细节(如数据结构、算法等内部信息)隐藏起来。一般来说,一个模块具有有限个接口, 外部模块通过调用相应的接口来实现对目标模块的操作。

3.请简述面向对象的启发规则。

面向对象启发规则如下

  • 设计结果应该清晰易懂。
  • 一般一特殊结构的深度应适当。
  • 设计简单类。
  • 使用简单的协议。
  • 使用简单的操作。
  • 把设计变动减至最小。

4.请简述何为面向对象设计。

面向对象设计是面向对象方法在软件设计阶段应用与扩展的结果,就是根据在问题域中已建立的分析模型,运用面向对象技术进行系统软件设计,并且补充实现的细节部分,如人机界面、数据 存储、任务管理等,形成符合成本和质量要求的、抽象的系统实现方案,在求解域中建立设计模型。

5.请简述如何优化对象设计。

  • 确定优先级。
  • 提高效率。
  • 调整继承关系。

9、面向对象实现

  1. 面向对象的实现主要包括( )。
  • 把面向对象设计用某种程序设计语言书写为面向对象程序,测试并调试面向对象的程序。
  • 面向对象设计
  • 选择面向对象语言
  • 单元测试
  1. 面向对象程序设计语言不同于其他语言的最主要特点是()
  • 模块性
  • 抽象性
  • 继承性
  • 内聚性
  1. 面向对象的测试与传统测试方法的主要区别是()
  • 面向对象的测试可在编码前进行,传统测试在编码后进行。
  • 面向对象的测试以需求和设计阶段的测试为主,不需要进行代码测试
  • 测试对象不同
  • 面向对象的测试不需要设计测试用例,只需要进行会议评审。
  1. 面向对象设计的结果,既可以用面向对象语言,也可以用非面向对象语言实现。
  1. 一般来说,应该尽量选用面向对象语言来实现面向对象分析、设计的结果
  1. 良好的面向对象程序设计风格,既包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念(如继承性)而必须遵循的一些新准则。
  • ×
  1. 面向对象测试用例的设计由软件的输入-处理-输出视图或单个模块的算法细节驱动。
  • ×
  1. 面向对象系统的确认测试是面向白盒的,并且可以应用传统的白盒方法完成测试工作。
  • ×

1.面向对象实现应该选用哪种程序设计语言?为什么?

在选择编程语言时,应该考虑的首要因素是哪个语言能最好地表达问题域语义。一般来说, 应该尽量选用面向对象程序设计语言来实现面向对象分析、设计的结果。

2.面向对象程序设计语言主要有哪些技术特点?

  • 支持类与对象概念的机制。
  • 实现整体一部分结构的机制。
  • 实现一般一特殊结构的机制。
  • 实现属性和服务的机制。
  • 类型检查。
  • 类库一大多数面向对象程序设计语言都提供一个实用的类库。
  • 效率。
  • 持久保存对象。
  • 参数化类。
  • 开发环境一软件工具和软件工程环境对软件生产率有很大影响。

3.选择面向对象程序设计语言时主要应该考虑哪些因素?

  • 将来能否占主导地位。
  • 可重用性。
  • 类库和开发环境。
  • 其他因素。

4.良好的面向对象程序设计风格主要有哪些准则?

良好的面向对象程序设计风格,既包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念(如继承性)而必须遵循的一些新准则。

  • 提高可重用性。
  • 提高可扩充性。
  • 提高健壮性。

5.测试面向对象软件时,单元测试、集成测试和确认测试各有哪些新特点?

  • 最小的可测试单元是封装起来的类和对象。一个类可以包含一组不同的操作,而一个特定 的操作也可能存在于一组不同的类中。因此,对于面向对象的软件来说,单元测试的含义发生了 很大变化。不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试。
  • 面向对象软件的集成测试有两种不同的策略。
  1. 基于线程的测试。这种策略把响应系统的一个输入或一个事件所需要的一组类集成起来分 别集成并测试每个线程,同时应用回归测试以保证没有产生副作用。
  2. 基于使用的测试。这种方法首先测试几乎不使用服务器类的那些类(称为独立类),把独 立类都测试完之后,接下来测试使用独立类的下一个层次的类(称为依赖类)。对依赖类的测试一 个层次一个层次地持续进行下去,直至把整个软件系统构造完为止。
  • 和传统的确认测试一样,面向对象软件的确认测试也集中检查用户可见的动作和用户可识 别的输出。为了导出确认测试用例,测试人员应该认真研究动态模型和描述系统行为的脚本,以 确定最可能发现用户交互需求错误的情景。

6.面向对象的测试和传统开发方法的测试有什么不同?

  • 二者都可以分成4个阶段进行。但传统测试的最小单元是模块,而在面向对象环境下,最 小的可测试的单元是封装了的类或对象,而不是程序模块。
  • 因为面向对象软件没有一个层次的控制结构,所以传统的自顶向下和自底向上的集成策略 意义不大。每次将一个操作集成到类中常常行不通,这是因为在构成类的各个部件之间存在各种 直接的和非直接的交互。对于面向对象系统的集成测试,存在两种不同的测试策略。

10、统一建模语言

1.UML的作用和优点有哪些?

  • UML是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。它不是一种可视化的程序设计语言,而是一种可视化的建模语言;它不是工具或知识库的规格说明,而是一种建模语言规格说明,是一种表示的标准;它不是过程,也不是方法,但允许任何一种过程和方法使用它。
  • 优点:更好地表现同一事物的不同方面,釆用不同的视图,每个视图从一个角度看待和描述 问题.建模语言就是设计语言,是从自然语言到计算机语言的中间的过渡性语言,它提供表达设 计语义的语法或图形符号用来建立软件的模型。

2.UML有多少图,分别有什么作用?

UML的模型是用图来表示的,共有5类9种图

(1)用例图:

(2)静态图:

(3)行为图:

(4)交互图:

(5)实现图:

3.如何着手从自然语言描述的用户需求中画出用例图?

用自然语言进行用户需求的描述,是最高级的抽象。降解抽象层次的第一步就是画用例图, 也就是能找出系统的用例,统一方法建模称为“用例驱动”。由于找用例要先找角色(执行者), 因此又称“角色驱动”。

找出系统边界以外的角色,角色是与系统进行交互的外部实体,可以是与系统交互的人员、与系统相连并交换信息的设备和其他系统。

从这些角色如何与系统进行交互的角度,找出用例。用例表示向角色提供什么功能,每个 用例代表一个完整的功能。

绘制用例图,用例图表达角色如何使用系统功能,角色启动用例并与之通讯。用例图能完 整地描述系统所具备的基本功能。

用例描述。用例图只能宏观地表达系统功能,但却不能提供用例模型所必需的所有信息, 采用文本方式对每个用例的含义和具体动作序列加以详细的描述。用例描述也可釆用列表方式并 辅以活动图。

4.用例脚本有何作用?有哪3种描述方式?用例脚本是针对什么层次的用例?

  • 作用:只画出用例图还不能完整地表达出用户的需求,还要辅以一定形式的说明,说明每个用例里面的事件流,即业务流程,也就是用例脚本。
  • 表达方式:用例脚本用纯文字、表格、活动图3种方式来表述。活动图具有直观性,可以用来对文字和表格形式进行补充。
  • 针对的层次:对用例的说明称为“用例描述”,也称为“用例脚本”,它描述的是具有实际行为的“操作用例”,也就是发生逻辑运算(如数据的增、删、改、查的操作)的用例。这些用例往往就是用例图中的叶子级用例,而这层用例在复杂系统中不提倡画在较高层次的用例图中。可以通过分层细化来表达叶子用例。

11、计划

1.请简述项目、项目管理和软件项目管理。

  • 项目是一次性的多任务工作,它具有确定的开始日期、结束日期、工作范围、经费预算、 质量标准,以及特定的功能、性能和接口要求。
  • 项目管理是为了实现项目目标,运用相关的知识、技能、方法与工具,对项目的计划、进 度、质量、成本、资源进行管理和控制的活动。
  • 软件项目管理以通用的项目管理知识体系为基础,管理的对象是软件工程项目。它结合软 件工程自身的科学规律,釆用适合软件产品自身特点的管理方法,使得整个软件开发过程(从分 析、设计、编码到测试、维护全过程)都能在管理者的控制之下,以预定成本按期、按质的完成 软件交付用户使用。

2.请简述软件项目管理和软件工程的区别和关系。

  • 目标相同:软件工程与软件项目管理都是围绕软件产品开发的管理。
  • 作用不同:软件工程是软件开发方法论,是关于如何开发出好的软件产品;软件项目管理 是软件产品的生产管理形式,项目目标是项目的绩效。
  • 两者关系:软件工程对于任何软件项目具有指导性,软件项目管理是落实软件工程思想的载体。

3.请简述项目计划应该包括的内容。

  • 确定详细的项目实施范
  • 定义递交的工作成果。
  • 评估实施过程中主要的风险。
  • 制定项目实施的时间计划。
  • 成本和预算计划。
  • 人力资源计划等。

4.请简述软件估算的意义。

科学的软件估算可以在项目早期就相对精确地估算出项目的人力、时间和资金等成本,有利于制定合理的计划和安排合理的预算,保证项目的顺利实施。

5.如何进行项目的时间管理?

项目的时间管理首先要对项目活动进行定义,依据包括:工作分解结构、项目范围说明、 历史信息、约束条件、假定和专家评论。

在整个项目中,我们需要一份能清晰描述活动发生的时间和所需要的资源的计划,项目进度 安排的内容为如下。

  • 定义一组项目活动,并建立活动之间的相互关系。
  • 估算各个活动的工作量和完成任务所需要的资源。
  • 定义里程碑。
  • 分配人力和其他资源,制定进度时序。
  • 检查进度安排,确保任务之间没有冲突,并且包含了完成项目必需的所有任务。

6.怎样进行代码行LOC度量?怎样进行功能点FP度量?它们可以度量的指标有哪些?

度量方法如下

代码行度量:是指统计可执行的源代码行数来反映软件规模。采用直接测量法和经验估算 法都可以获得数据。虽然如何定义源代码行缺乏统一的认识和标准,时代的差异、语言的差异和 经验的差异可能会造成统计数据的差异较大,但是在一个企业内部仍具有参照性。

功能点度量:通过统计系统的“功能性”来反映软件规模。它只能釆用间接测量找出系统 的功能点FPO尽管是间接测量,但克服LOC度量存在的问题,FP度量用于事前规模估算要比 LOC严谨些。

用这两种规模度量的结果,可进一步计算生产率、软件质量、软件成本和文档数量等指标。

7.请简述估算的作用

计划是项目的启动入口,项目开展过程就是执行计划。而估算是制定计划的依据,因此估算是项目开展的基础。估算的主要工作如下。

  • 范围估算:搞清软件边界。
  • 规模估算:定量单位采用LOC或FP。
  • 工作量估算:工作量估算决定了开发团队的规模和组建,决定开发周期和进度估算。
  • 开发周期与进度估算:进度估算是对整个开发周期中不同阶段的里程碑进行估算。
  • 人力资源估算:在考虑各种软件开发资源时,人是最重要最优先考虑的资源。
  • 开发成本估算:整个开发周期所花费的工作量产生的劳动费用。
  • 软硬件资源估算:软件开发所需的硬件工具及软件工具。

8.项目的时间管理是否就是做进度计划?

完整的时间管理还包括活动定义、活动排序、活动资源估算、活动历时估算、进度计划、进度控制。进度计划只是项目时间管理的一个子集。

9.请简述做进度计划的两种方式。

① Gantt图用线段标明子任务的分解;标明各个任务的计划开始时间、完成时间;标明各个任务与参与工作的人数,各子任务间的并行和串行的关系的衔接情况。

特点:简单、明了、直观、易于编制;以文档与评审作为开发进度的里程碑。

缺点:无法标明多个任务之间存在的相互制约关系;无法标明关键的控制作业。

② 工程网络图是用时间和节点来表示工作流程的有序、有向的网状图形。它可弥补Gantt图 无法表达关键路径和作业之间的制约关系,并且易于调整。

10.请简述度量、估算和计划之间的关系。

  • 度量:是对已发生事物的某个属性指标的获取。度量是通过大量的数据测量反映的。
  • 估算:是对未发生事物的评估,主要评估未知事物的规模以及将要占用的资源,以期估算 成本和工作量。
  • 计划:是对资源按开发进度进行合理的预配置;
  • 度量与估算:作用期不同,度量用于事后的指标评估,估算用于事前的资源计划。但估算 有可能利用原先的度量指标;有的度量有可能来自经验数据,有的度量指标有可能用估算的方法。
  • 估算与计划:估算是制定计划的依据,好的计划来源于正确的估算。

12、组织

1.目前项目开发时常用的小组组织方法有哪些?

目前,项目开发时常用的小组组织方法:民主制程序员组、主程序员组和现代程序员组。

2.请简述主程序员组的优缺点。

主要优点:主程序员广播式发布工作要求,组织管理好、效率高、质量容易保证、成本相对较低。主要缺点:人员完整配备较难、不利人才脱颖而出。并且,能够在技术和管理两方面都能同 时具备优秀品质的主程序员更不多见。

3.民主制、主程员制各存在什么问题?

民主制程序员组中所有程序员不分主次,这样在责任落实、分工协作方面存在一些问题。 责任不明,分工不清,大家都负责,实际上没有人负责。

主程序员制是主程序员负责制,克服了民主制的缺点,但又走到了另一个极端一一只有主程序员负责,其他成员的积极性就被扼杀了。另外,主程序员这个位置既是一个技术岗位,也是一个管理角色,这样的位置很难找到胜任的人担任。热衷于技术的人,往往对管理不感兴趣,而具 有管理才能的人,大多不会是技术专家。

4.你所在的信息系统开发公司指定你为项目负责人。你的任务是开发一个应用系统,该系统 类似于你的小组以前做过的那些系统,只是这一个规模更大而且更复杂一些。需求已经由客户写成了完整的文档。你将选用哪种小组结构?为什么?你准备采用哪(些)种软件过程模型?为什么?

由于待开发的应用系统类似于以前做过的系统,开发人员已经积累了较丰富的经验,没有多少技术难题需要攻克。为了减少通信开销,充分发挥技术骨干的作用,统一意志统一行动,提 高生产率,加快开发进度,项目组的组织结构以基于主程序员组的形式为宜。

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

13、控制

1.风险识别的步骤有哪些?

  • 收集资料
  • 估计项目风险形势
  • 识别风险

2.如何进行软件项目的风险分析?

软件项目的风险分析主要在可行性分析阶段进行,其内容包括风险识别、风险预测和风险管理。风险识别主要从项目、技术和商业的角度对潜在的风险进行识别。风险预测利用定量的方法对风险发生的可能性和产生后果的严重程度做出估计。风险管理的内容涉及两个方面。一方面, 风险管理者需要综合考虑风险发生的概率及发生后产生后果的严重性,确定特定风险的处理策略。 对于发生概率低,影响也低的风险可以采用规避策略,即不需要考虑。另一方面,风险管理者需 要对已经识别出的风险定期进行评估,重新预测其发生的可能性和产生后果的严重程度,从而根 据变化及时调整对该风险的处理策略。由于变化具有永恒性,风险管理的活动应该存在于项目进行的整个过程中。

3.请简述软件质量的定义。

所谓软件质量,就是供方提供的软件产品满足用户明确和隐含需求的能力特性的总和。

4.针对软件质量保证问题,最有效的办法有哪些?

通常,人们将“质量标准”、“配置管理”、“测试测量”作为质量管理的三大支柱,而将“SQA 计划”、“SQA进度”、“SQA评审和审计”作为质量管理三大要素。软件质量保证是一个质量管理 过程,基本思想是以事前预防为主,以事后测试和纠偏为辅,釆取标本兼治的方法,且以治本为主。为此,要从“事前、事中、事后” 3个层次上对软件质量进行控制。归根结底一句话:软件质量保证的最有效的办法是软件质量过程管理,因为质量蕴涵在过程之中。

5.什么是配置项?什么是配置管理?

  • 软件配置管理中的基本单元,称为软件配置项。
  • 在开发过程中,将软件的文档、程序、数据进行分割与综合,以利于软件的定义、标识、跟踪、管理,使其最终形成受控的软件版本产品,这一管理过程称为软件配置管理。

6.软件配置管理的目的是什么?

通俗地讲,软件配置管理的目的,就是为了做到3个有利于:有利于配置项的综合管理;有利于基线的变更管理;有利于版本的升级管理,以保证所交付的软件版本产品能够满足需求规格说明书中的各项具体要求,节省人力、物力资源,加强安全与保密工作。

科学地讲,软件配置管理的目的,就是为了建立和维护在整个软件生命周期内软件产品的完整性。

7.请简述软件配置管理的工作内容。

配置管理的工作内容一般包括如下的4个方面。

①标识配置项。配置项是配置管理中的基本单元,每个配置项应该包含相应的基本配置管理的信息。标识配置项就是要给配置项取一个合适的名字。

②进行配置控制。进行配置控制是配置管理的关键,包括存取控制、版本控制、变更控制和产品发布控制等。存取控制通过配置管理中的“软件开发库”、“软件基线库”、“软件产品库”来实现。每个库对应着不同级别的操作权限,为团队成员授予不同的访问权利。版本控制往往使用自动的版本控制工具来实现,如SVN。变更控制是应对软件开发过程中各种变化的机制,可以通过建立控制点和报告与审查制度来实现。产品发布控制面向最终发布版本的软件产品,旨在保证提交给用户的软件产品版本是完整、正确和一致的。

③记录配置状态。配置状态报告记录了软件开发过程中每一次配置变更的详细信息。记录配置状态的目的是使配置管理的过程具有可追踪性。

④执行配置审计。配置审计是为了保证软件工作产品的一致性和完整性,从而保证最终软件版本产品发布的正确性。

14、软件维护与软件文档

1.为什么要进行软件维护?软件维护的作用有哪些?

软件维护是软件产品生命周期的最后一个阶段。在产品交付并且投入使用之后,为了解决 在使用过程中不断发现的各种问题,保证系统正常运行,同时使系统功能随着用户需求的更新而不断升级,软件维护的工作是非常必要的。概括地说,软件维护就是指在软件产品交付给用户之 后,为了改正软件测试阶段未发现的缺陷,改进软件产品的性能,补充软件产品的新功能等,所进行的修改软件的过程。

2.什么是软件的可维护性?软件的可维护性与哪些因素有关?

软件的可维护性是用来衡量对软件产品进行维护的难易程度的标准,它是软件质量的主要特征之一。影响软件可维护性的因素有很多,如可理解性、可测试性、可修改性等。

3.传统软件维护分哪几大类?

传统软件维护分4类,分别是纠错性维护、适应性维护、完善性维护和预防性维护。

4.请简述软件维护的工作程序。

软件维护的工作程序与软件开发的工作程序相仿。其工作程序是:维护的需求分析、维护的设计、修改程序代码、维护后的测试、维护后的试运行、维护后的正式运行、维护过程的评审和审计

5.请简述结构化维护和非结构化维护。

维护软件时,如果有一个完整的软件配置存在,那么维护人员可以进行结构化维护。结构化维护的起点是评价设计文档,维护步骤如下:

  • 确定软件结构特点
  • 性能特点分析
  • 接口特点分析
  • 估计改动带来的影响
  • 计划实施途径
  • 修改设计并对所做的修改仔细复查
  • 编写相应的源程序
  • 回归测试
  • 交付使用

维护软件时,如果没有一个完整的软件配置存在,甚至只有程序代码,那么维护人员只能进行非结构化维护。非结构化维护的起点是评价程序代码,维护步骤如下:

  • 分析用户需求
  • 代码评价
  • 评价反馈
  • 重新编码
  • 复查
  • 交付使用

由于文档资料缺失,而使非结构化维护难于评价软件结构、全程数据结构、系统接口和代码改动的后果。因此,非结构化维护需要付出高昂的代价,是因为这种维护方式没有使用良好定义的方法学来开发软件。相反,结构化维护能够使维护工作井然有序,减少维护成本,提高软件维护的质量。

6.软件维护的副作用表现在哪4个方面?

软件维护的副作用表现在如下的4个方面。

  • 使编码更加混乱,程序结构更加不清晰,可读性更差,而且有连锁反应。
  • 数据结构是系统的骨架,修改数据结构是对系统伤筋动骨的大手术,在数据冗余与数据不 一致方面可能顾此失彼。
  • 需要与用户协商,一旦有疏忽就可能使系统发生意外。
  • 对结构化维护要严防程序与文档的不匹配。

7.请简述面向缺陷的维护。

面向缺陷维护的内容:该软件产品能够正常运行,可以满足用户的功能、性能、接口需求,只是维护前在个别地方存在缺陷,用户不是非常满意。克服缺陷的方法是修改程序,也就是通常说的只修改程序,不修改数据结构。

8.请简述面向功能的维护。

面向功能维护的内容:该软件产品在功能、性能、接口上存在某些不足,不能满足用户的某些需求,因此需要增加某些功能、性能、接口。解决这些不足的方法是,不但要修改设计,而且也要修改程序,也就是通常说的,既要修改数据结构,又要修改编码。

9.怎样理解迭代模型RUP对软件维护的影响?

RUP的功能覆盖整个软件的开发周期,从需求分析开始,直到软件的发布、实施和维护为止,因而它对传统意义下的维护工作产生重大影响。

RUP把软件生命周期定义为4个主要阶段:初始、细化、构造、移交。经过这4个阶段的历 程被称为一个开发周期,自动产生一个周期内的所有文档,从而生成一个软件产品。首次经历这 4个阶段称为该产品的初开发周期。除非该产品的生命终止,否则它将重复初始、细化、构造和 移交这4个阶段,从而演化为下一代产品,这就是对旧有产品的维护,也是新产品的升级换代, 也就是开发周期的演化,也就是RUP对软件维护工作的影响。

10.软件工程中的文档可以分为哪几类?

按照文档产生和使用的范围,软件工程中的文档大致可以分为以下3类。

  • 开发文档:这类文档在软件开发过程中,作为软件开发人员前一阶段工作成果的体现和后 一阶段工作依据的文档。包括:软件需求说明书、数据要求说明书、概要设计说明书、详细设计 说明书、可行性研究报告、项目开发计划。
  • 管理文档:这类文档是在软件开发过程中,由软件开发人员制定的需提交的一些工作计划 或工作报告。管理人员能够通过这些文档了解软件开发项目的安排、进度、资源使用和成果等。 包括项目开发计划、测试计划、测试报告、开发进度月报及项目开发总结。
  • 用户文档:这类文档是软件开发人员为用户准备的有关该软件使用、操作、维护的资料。 它包括用户手册、操作手册、维护修改建议、软件需求说明书、运行模式建议说明书。

11.请简述软件文档的意义。

文档是指某种数据媒体和其中所记录的数据。它具有永久性,并可以由人或机器阅读, 通常仅用于描述人工可读的东西。在软件工程中,文档常常用来表示对活动、需求、过程或结果 进行描述、定义、规定、报告或认证的任何书面或图示的信息。它们描述和规定了软件设计和实 现的细节,说明使用软件的操作命令。文档也是软件产品的一部分,没有文档的软件就不能称其 为软件。软件文档的编制在软件开发工作中占有突出的地位和相当大的工作量。高质量、高效率 地开发、分发、管理和维护文档对于转让、变更、修正、扩充和使用文档,对于充分发挥软件产 品的效益有着重要的意义。

12.请简述软件文档的主要作用。

  • 任务之间联系的凭证
  • 质量保证
  • 培训与参考
  • 软件维护支持
  • 历史档案

15、形式化方法

16 、软件重用

1.请简述软件重用的过程,并说明每个步骤须采用的关键技术。

软件重用是降低软件整体成本、提高软件质量和开发生产率的合理而且有效的途径。可重用的软件成分包括软件的技术表示(如规格说明、体系结构模型、设计和代码)、文档、测试数据, 甚至还包括与过程相关的任务(如审查技术)。

重用过程包括两个并发的子过程:领域工程和软件工程。领域工程的目的是在特定的应用领 域中标识、构造、分类和传播一组软件成分。然后,软件工程在开发新系统的过程中选取适当的 软件成分供重用。

分析和设计可重用构件的技术,使用与良好的软件工程实践中使用的相同的概念和原理。可 重用构件应该在这样一个环境中设计:该环境为每个应用领域建立标准的数据结构、接口协议和 程序体系结构。

2.可重用的软件成分中包括项目计划和成本估算,怎样重用这些成分?这样做能带来什么收益?

软件项目计划的基本结构和许多内容(如SQA计划)都是可以跨项目重用的。这样做减少了用于制定计划的时间,也降低了与建立进度表和进行风险分析等活动相关联的不确定性。

3.请举例说明类构件的3种重用方式。

  • 实例重用。由于类的封装性,使用者无须了解实现细节,就可以使用适当的构造函数,按 照需要创建类的实例。然后向所创建的实例发送适当的消息,启动相应的服务,完成需要完成的 工作。这是最基本的重用方式。此外,还可以用几个简单的对象作为类的成员,创建出一个更复杂的类,这是实例重用的另一种形式。
  • 继承重用。面向对象方法特有的继承性,提供了一种对已有的类构件进行裁剪的机制。当已有的类构件不能通过实例重用完全满足当前系统需求时,继承重用提供了一种安全地修改已有类构件,以便在当前系统中重用的手段。
  • 多态重用。利用多态性不仅可以使对象的对外接口更加一般化(基类与派生类的许多对外 接口是相同的),从而降低消息连接的复杂程度,而且还提供了一种简便可靠的软构件组合机制。 系统运行时,根据接收消息的对象类型,由多态性机制启动正确的方法,去响应一个一般化的消息,从而简化了消息界面和软构件连接过程。

17、补充

1.简述文档在软件工程中的作用

  • 提高软件开发过程的能见度
  • 提高开发效率
  • 作为开发人员阶段工作成果和结束标志
  • 记录开发过程的有关信息便于使用与维护
  • 提供软件运行、维护和培训有关资料
  • 便于用户了解软件功能与性能

2.在结构化设计过程中,层次图和结构图的区别是什么?

通常用层次图作为描绘软件结构的文档。

结构图作为文档并不很合适,因图上包含的信息太多有时反而降低了清晰程度。利用IPO图或数据字典中的信息得到模块调用时传递的信息,从而由层次图导出结构图的过程,却可以作为检查设计正确性和评价模块独立性的好方法。

3.录入统计计算某班学生成绩,画出数据流图(DFD)。(10分)

学生成绩表数据结构如下:

学号|高数|英语|计算机|总分|平均分|不及格门数

需求功能如下:

(1)录入全班学生各课的考分,生成成绩表;

(2)检查各课成绩,修改错误,补充未录入成绩,删除非法成绩;

(3)计算总分,平均分;

(4)统计不及格门数,然后再写入升级、补考、留级;

(5)打印成绩通知单,交家长。

软件工程导论_第1张图片

4.下面是货运收费策略:铁路运费时,若收货地点在本省以内,快件每公斤1.5元,慢件每公斤1元。若收货地点在外省,重量小于或等于20公斤,快件每公斤2元,慢件每公斤1元,若重量大于20公斤,超重部分每公斤0.2元。分别用判定树和判定表进行表示。

软件工程导论_第2张图片

*1* *2* *3* *4* *5*
*省内* *T* *T* *F* *F* *F*
*快件* *T* *F* *T* *F* ****
*重量<=20公斤* **** **** *T* *T* *F*
*每公斤1元* **** *×* **** *×* ****
*每公斤1.5元* *×* **** **** **** ****
*每公斤2元* **** **** *×* **** ****
*超重部分每公斤0.2元* **** **** **** **** *×*

5.耦合性有哪几种类型? 其耦合度的顺序如何

低:非直接耦合® 数据耦合®标记耦合® 控制耦合®外部耦合® 公共耦合®内容耦合 :高 (耦合性低到高 模块独立性强到弱)

耦合定义

  • 耦合(Coupling)是对一个软件结构内不同模块之间互连程度的度量

软件工程导论_第3张图片

耦合强度依赖因素

  • 一模块对另一模块的引用
  • 一模块向另一模块传递的数据量
  • 一模块施加到另一模块的控制的数量
  • 模块间接口的复杂程度

降低耦合度的设计原则

  • 根据问题特点,选择合适的 耦合类型。 尽量使用数据耦合,少用控制耦合和外部耦合,限制公共耦合的范围,完全不用内容耦合
  • 降低模块接口的复杂性。
    减少每个模块的参数个数;尽量使用标准过程调用方式,少用直接引用的方式;传送的信息以标准、直接的方式提供。
  • 把模块的通信信息放在缓冲区中。

内聚定义

  • 内聚(Cohesion)标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展

软件工程导论_第4张图片

6.简述需求分析工作可以分成哪四个方面?软件需求分析的有哪三个基本原则?

  • 需求分析阶段分成四个方面:对问题的识别、分析与综合、制定规格说明和评审。
  • 三个基本原则:必须能够表达和理解问题的数据域和功能域;必须按自顶向下、逐步分解的方式对问题进行分解和不断细化;要给出系统的逻辑视图和物理视图。

7.某“调整工资”处理模块接受一个“职称”的变量,根据职称的不同(助教,讲师,副教授,教授)作不同的处理,其中若是助教还必须输入工龄,只有工龄超过两年才能调整工资。请用等价类划分法设计测试用例。

划分等价类:

输入条件 合理等价类 不合理等价类
职称 ①教授②副教授③讲师 ⑤四种职称之外任意一种
职称兼工龄 ④助教兼工龄大于2年 ⑥助教兼工龄等于两年 ⑦助教兼工龄小于两年

设计测试用例:

输入数据 预期结果 覆盖范围
教授 输入有效,进行调整工资处理
副教授 输入有效,进行调整工资处理
讲师 输入有效,进行调整工资处理
助教 3 输入有效,进行调整工资处理
助教 2 输入有效,不调整工资处理
助教 1 输入有效,不调整工资处理
工程师 输入无效

8.假定某航空公司规定,乘客可以免费托运重量不超过30公斤的行李。当行李重量超过30公斤时,对头等舱的国内乘客超重部分每公斤收费4元,对其它舱的国内乘客超重部分每公斤收费6元,对国外乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。用判定树表示计算行李费的算法。

软件工程导论_第5张图片

9.软件设计过程

软件设计是把许多事物和问题抽象起来,并且抽象它们不同层次和角度,是将需求转变为软件陈述的过程,是迭代的过程。软件设计,要根据需求规格说明 书,对整个设计过程进行计划,然后实施具体的设计过程,即“先整体,再局部”,也是不断迭代和精化的过程。然后需要对生成的设计规格说明书进行评审,启动质量评价的标准,若未通过评审,需重新修改设计,直至评审通过,确定最后定型的过程本身。进入后续阶段,完成软件设计过程。

10.原型化方法主要用于解决什么问题?试说明这种方法的主要优缺点

建立原型的主要原因是为了解决在产品开发的早期阶段需求不确定的问题,用户、经理和其他非技术项目风险承担者发现在确定和开发产品时,原型可以使他们的想象更具体化。

原型在软件开发过程中可以起到以下主要作用:

  • 明确并完善需求 原型作为一种需求工具,它初步实现所理解的系统的一部分。用户对原型的评价可以指出需求中的许多问题,在你开发真正产品之前,可以最低的费用来解决这些问题。
  • 探索设计选择方案 原型作为一种设计工具,用它可以探索不同的用户界面技术,使系统达到最佳的可用性,并且可以评价可能的技术方案。
  • 发展为最终的产品 原型作为一种构造工具,是产品最初子集的完整功能实现,通过一系列小规模的开发循环,你可以完成整个产品的开发。

11.请看下列伪代码程序,要求完成下列问题:

(1)画出代码的流程图

(2)根据该程序流程图画出该程序的流图;

(3)计算该流图的环形复杂度;

START
   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

软件工程导论_第6张图片
软件工程导论_第7张图片

法一:环形复杂度=E-N+2=18-16+2=4

法二:环形复杂度=P+1=3+1=4

12.简述结构化程序设计方法的基本特点

(1)尽可能少用goto语句的程序设计方法;

(2)每个代码块都单入单出;

(3)使用控制结构:顺序、选择和循环;

(4) 自顶向下逐步求精。

13.请比较快速原型模型和螺旋模型的优缺点,并说明各自的适用范围。

模型 优点 缺点 适用范围
快速原型模型 易于获取客户真实需求 可能导致系统设计差、效率低,难于维护 适用于对软件需求缺乏准确认识的情况
螺旋模型 风险驱动,降低风险 风险分析人员需要有经验且经过充分训练 内部开发的大型软件项目

14.衡量模块独立性的两个定性标准是什么?这两个标准的定义分别是什么?在我们的软件设计中,关于模块独立性我们追求的目标是什么?

  • 衡量模块独立性的两个定性标准是内聚和耦合。
  • 耦合是指对一个软件结构内不同模块彼此之间互相依赖(连接)的紧密程度;而内聚则标志一个模块内部各个元素彼此结合的紧密程度。
  • 在我们的软件设计中,关于模块独立性我们追求的目标是紧密内聚松散耦合。

15.面向对象设计中,存在有哪几种耦合和内聚?

  • 弱耦合:交互耦合,继承耦合
  • 强内聚:服务内聚,类内聚,一般-特殊内聚

16.某个程序的伪码如下(前面的标号只用于标明语句顺序,不参与程序运行):

START
IF L1 THEN
S1
DO WHILE L2
S2
IF L3 THEN
S3
ELSE
S4
END IF
END  DO
EISE
S5
END IF
STOP

(1) 试将其转换成PAD图
软件工程导论_第8张图片

(2) 计算程序的环路复杂度

法一:环路复杂度=E-N+2=15-13+2=4

法二:环路复杂度=P+1=3+1=4

17.简述面向对象的4个要点的含义。

面向对象的4个要点是:对象分解、数据专有、继承、封装性。

  • 对象分解:认为客观世界是由各种对象组成的。
  • 数据专有,方法共享:把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。
  • 继承:按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。
  • 封装性:对象彼此之间仅能通过传递消息互相联系。

18.在下面用例图中,有哪些行为者,有哪些用例?
软件工程导论_第9张图片

行为者:Bank network, Manager, Clerk

用例:Authorize purchase, Log onto redister, Sell goods, Restock inventory, Open store

18.已知有一段代码实现了“输出ABC三个数中的最大值”,要求完成下列问题:

(1)画出代码的流程图

(2)根据该程序流程图画出该程序的流图;

(3)计算该流图的环形复杂度;

答:

(1) 流程图

软件工程导论_第10张图片

(2) 流图

软件工程导论_第11张图片

(3) 复杂度计算方法

  • 等于流图中的区域数
  • 或等于(边数-节点数+2)
  • 或等于(判定节点数+1)

因此复杂度为4

19.软件维护的过程

在软件开发完成交付用户使用后,为了保证软件在一个相当长的时期能够正常运行,就需要对软件进行维护。 软件维护的过程:

  • 确认维护要求。
  • 对于改正性维护申请,评价错误的严重性。对于严重的错误,立即安排人员,分析问题原因,进行"救火"性的紧急维护;对于不严重的错误,根据任务情况和轻重缓急进行统一安排。
  • 对于适应性和完善性维护申请,需要确定申请的优先级,然后安排维护工作。并不是所有的完善性维护申请都必须承担,需要考虑商业需要、现有资源、未来发展方向等进行决定。

20.简述软件工程的概念

概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

21.简述典型的软件生命周期的各个阶段

软件生命周期(各阶段)软件生命周期由软件定义、软件开发和运行维护三个时期组成。

  • 软件定义时期:问题定义、可行性研究和需求分析
  • 开发时期:总体设计、详细设计、编码和单元测试、综合测试。
  • 维护时期:主要任务是使软件持久地满足用户的需要。

即每个有8个阶段及基本任务:

  1. 问题定义:回答 要解决的问题是什么?
  2. 可行性研究:该问题有行的通的解决办法吗?若有解决问题的办法,则需要多少费用、资源、时间?
  3. 需求分析:回答“为了解决这个问题,目标系统必须做什么”,确定目标系统的功能
  4. 总体设计:回答 “概括地说,应如何解决这个问题”。把确定的各项功能需求转换成需要的体系结构。设计软件的结构,确定程序由哪些模块组成及模块间的关系,同时设计该项目的应用系统的总体数据结构和数据库结构。
  5. 详细设计:回答 “应怎样具体地实现这个系统”。为每个模块完成的功能进行具体描述,把功能描述转变为精确的、结构化的过程描述
  6. 编码和单元测试:把每个模块的控制结构转换成计算机可接受的程序代码。写出的程序应是结构好,清晰易读,并且与设计一致。
  7. 综合测试:通过各种类型的测试使软件达到预定的要求。
  8. 软件维护:通过各种必要的维护活动使系统持久地满足用户需要。

22.简述传统方法学软件设计的基本原理及内容。

传统方法学也称生命周期方法学或结构化范型。

  • 原理:采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。
  • 内容:把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。

23.以G.J.Myers的观点,简述对软件测试的定义。

G.Myers给出了关于测试的一些规则,这些规则也可以看作是测试的目标或定义。

(1) 测试是为了发现程序中的错误而执行程序的过程;

(2) 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;

(3) 成功的测试是发现了至今为止尚未发现的错误的测试。

从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。

24.简述面向对象方法学的4个要点。

概括地说,面向对象方法学具有下述4个要点:

(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。

(2) 把所有对象都划分成类(class)。

(3) 按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。

(4) 对象彼此间仅能通过发送消息互相联系。

25.列举出5个详细设计阶段的常用工具

程序流程图,盒图,PAD图(问题分析图),判定表,判定树,过程设计语言

26.6种覆盖标准的对比
软件工程导论_第12张图片
27.需求分析的难点

在系统的功能、性能和接口方面,开发者与客户要达成完全一致的需求, 让客户最终签字确认,并保证在项目验收前,需求相对稳定不变。万一需求有一点变化,双方必须履行“需求变更管理程序”,而变更管理程序在签订合同时已经做了规定。要知道,合同是具有法律效力的。

28.需求分析的理论基础

什么是软件需求、软件需求需要量化、需求是一个过程、需求过程中的角色、需求过程是一个迭代的过程、需求来源。

29.在本题中,数据操作主要分为存款和取款。

在取款过程中,核对密码时需要从取款单和存款信息中获取数据,并将取款信息传递给后续。数据流程依次进行计算利息和打印利息清单的相关操作,从而完成取款相关操作。在存款过程中,记录存款信息时需要将存款信息进行储存并将存款利息数据传递给后续流程进行存款单打印,从而完成存款相关操作。

数据流图

软件工程导论_第13张图片

30.在本题中,外部交互方包括学生和教师两类。

对于教师而言,他们可以提交开课计划并在系统批准之后得到开课通知,被批准的开课通知会被系统存储。此外,教师还可以对学生的成绩进行录人和存储。系统会根据存储的学生成绩,将成绩单发送给学生。对于学生而言,他们可以通过查询开课信息从已存储的课程记录中获取开课信息。此外,他们还可以提交选课计划并在系统批准中得到申请结果。被批准的选课计划会被系统存储。该系统顶层的数据流图如图所示。

软件工程导论_第14张图片

31.在复印机接到命令之前,应处于闲置状态;在接到命令之后,复印机处于准备复印的状态。在准备复印状态下,如果发现缺纸,则会发出相应警告,并在装纸之后重新进人闲置状态;否则,复印机会进入复印状态。在复印状态下,如果发生卡纸,则会发出相应警告,并在故障排除后重新进入闲置状态;否则,复印机会正常完成复印命令,并闲置。

复印机的状态转换图如图所示。

软件工程导论_第15张图片

32.在计算两个正整数的最小公倍数时,首先需要确定最小公倍数的查找范围。由数学相关知识可知,最小公倍数的最小可能值为两个正整数中较大者,最大可能值为两个正整数的乘积。因此,在开始查找最小公倍数之前,首先要对这两个正整数进行比较并且计算二者乘积。在确定了查找范围之后,就可以对其中的数字进行逐一的判断,直至找到最小公倍数。

软件工程导论_第16张图片
软件工程导论_第17张图片
软件工程导论_第18张图片
33.在计算两个整数的最大公约数时,可以使用辗转相除的方法。

#include
int cal(int x,int y){
int h=0;int r=0;
if(xy){if(x%y!=0){r=x%y;y=r;}}
return y;}
int main(){
int x=0,y=0;int a=0;
printf("请输入两个整数:\n");
scanf("%d,%d",&x,&y);
a=cal(x,y);
printf("两个数的最大公约数是:%d",a);
return 0;}

34.画出该问题的等价类表,并为每个等价类编号

软件工程导论_第19张图片
根据等价类表,该问题的测试用例设计如图所示。

软件工程导论_第20张图片

35.环境控制器在被定义气候之前,处于空闲状态。在被定义气候之后,开始温度控制:当处于白天模式时,如果温度升高,则进行调温操作;如果日落,则转换为夜间模式。当处于夜间模式时,如果温度降低,则进行调温操作;如果日出,则转换为白天模式。当环境控制器被命令终止气候时,则重新处于空闲状态。环境控制器的动态模型如图所示。

软件工程导论_第21张图片

36.图书馆所藏出版物拥有共同的基类:馆藏出版物类。馆藏出版物类的成员变量包括出版物名称、出版者、获得日期、目录编号、借出状态、借出限制等,并包括借出和收回两项操作。各种类型的出版物类继承于馆藏出版物类,并定义了各自的属性。图书馆馆藏出版物的对象模型如图所示

软件工程导论_第22张图片
37.在本题中,动作对象主要包括病员、医生和护士3类。

病员的病症信号会被局部监视系统采集,并传递到中央监视系统中。中央监视系统会读人病员的相关信息,并在必要的时候进行报警。护士会按照要求对病员的情况进行报告,该报告会与病员日志数据一并传递给医生。中央监视系统会对病员的病症信号进行分析处理,并根据病员日志数据对日志进行更新。医院病房监护系统的功能模型如图所示。
软件工程导论_第23张图片

38.本题中,对象主要包括考生、人事局和招聘单位3种,所以包括3条对象生命线。招聘单位将招聘计划发送给人事局,再由人事局发布给考生。考生通过人事局进行考试报名,报名信息由人事局传递给招聘单位。考生通过人事局进行考试。人事局向考生和招聘单位发布考试成绩。招聘单位将录用信息发给人事局,再由人事局发布给考生。公务员招聘考试管理系统的顺序图如图所示。

软件工程导论_第24张图片

39.在本题中,图书在初始时需要进行分类并更新在库数量。如果图书发生借阅,则执行借阅操作,并对在库图书数量进行更新。在借阅期间,如果图书发生续借操作,则对该图书重新执行借阅操作并更新在库数量。如果借阅的图书被归还,则需要对在库图书数量进行更新。此外,如果在库图书发生破损或者借阅图书发生遗失,则对在库图书的数量进行更新。图书馆系统图书的状态图如图所示。

软件工程导论_第25张图片
软件工程导论_第26张图片

在本题中,执行者应包括管理员和读者两类。其中,管理员包含处理后台信息维护和图书管理两种。读者可以查询书籍从而获得书籍信息。此外,读者还可以通过管理员来进行图书的借、还操作。负责图书管理的管理员可以执行借书和还书的操作,需要用管理员账号进行登录。负责信息维护的管理员可以进行书籍信息维护和读者信息维护,需要用管理员账号进行登录。其中,书籍信息维护主要包括添加书籍、修改书籍和删除书籍;读者信息维护主要包括添加新读者、读者信息修改以及读者注销。

40.模型优缺点以及适用情况

瀑布模型

特点

  1. 阶段具有顺序性和依赖性
    这个特点有两重含义:
    ①必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
    ②前一阶段的输出文档就是后一阶段的输入文档。
  2. 推迟实现的观点
    实践表明,对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。
    瀑布模型在编码前设置系统分析、系统设计,推迟程序物理实现,保证前期工作扎实。
  3. 质量保证观点
    基本目标:优质、高产
    瀑布模型每阶段坚持两个重要做法:
    每阶段都必须完成完整、准确的文档。文档是软件开发时各类人员间通信、运行时期维护的重要依据。
    每阶段结束前对文档进行评审,尽早发现问题并改正。

优点

  • 可强迫开发人员采用规范的方法
  • 严格地规定了每个阶段必须提交的文档
  • 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证
  • 为项目提供了按阶段划分的检查点
  • 当前活动完成后,只需要去关注后续活动、
  • 提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导

缺点

  • 瀑布模型是由文档驱动的:在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的
  • 由于开发模型是线性的,用户只能等到整个过程的末期才能见到开发成果,从而增加了开发的风险
  • 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量
  • 模型缺乏灵活性,无法解决需求不明确问题,用户不经过实践提出完整准确的需求是不切实际的

适用场景

  • 功能和性能明确、完整、无重大变化的软件开发,并且分析设计人员对应用领域很熟悉,项目风险低,用户很少参与开发工作的项目

快速原型模型

基本思想

  • 快速分析,快速实现,及时反馈,反复评价和改进,适应变化,最终实现系统

优点

  • 克服瀑布模型的缺点
  • 及早提供有用产品
  • 及早发现问题,及时改错
  • 降低风险,减少开发时间,提高开发效率
  • 用户参与,增加沟通,减少误解
  • 适应需求的变化
  • 确定需求上优于瀑布模型(通过原型与用户交互)
  • 提供学习手段,通过开发原型和演示原型对开发者和使用者了解系统都有积极作用
  • 有的软件原型可以成为最终产品的一部分。

缺点

  • 缺少有力的工具支持
  • 尚未建立完整的开发标准
  • 对设计人员和开发环境要求高
  • 易变性给测试带来了困难
  • 快速建立的系统结构加连续修改可能导致产品质量低下
  • 原型系统的内部结构可能不好。

适用场景:

(1)对所开发的领域比较熟悉而且有快速的原型开发工具;

(2)项目招投标时,可以以原型模型作为软件的开发模型;

(3)进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是非常适合的。

增量模型

本质

  • 以迭代的方式运用瀑布模型

优点

  • 采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源
  • 如果核心产品很受欢迎,则可增加人力实现下一个增量
  • 可先发布部分功能给客户,对客户起到镇静剂的作用

缺点

  • 并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构
  • 增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性

适用场景

  • 进行已有产品升级或新版本开发,增量模型是非常适合的
  • 对完成期限严格要求的产品,可以使用增量模型
  • 对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的

螺旋模型

基本思想

  • 通过建立原型、划分开发阶段来降低风险,一旦在开发过程中风险过大就停止继续开发,不适合作为合同项目的开发

优点

  • 对于大型系统及软件的开发,具有很好的风险控制,开发者和客户能够较好地对待和理解每一级迭代的风险
  • 设计上的灵活性,可以在项目的各个阶段进行变更
  • 以小的分段来构建大型系统,使成本计算变得简单容易
  • 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性
  • 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互

缺点

  • 需要具有较高的风险评估技术,应用比较复杂
  • 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失
  • 过多的迭代次数会增加开发成本,延迟提交时间。

适用范围

  • 螺旋模型只适合于大规模的软件项目
模型 优点 缺点
瀑布模型 规范,文档驱动 系统可能不满足客户真正的需求
快速原型 克服了瀑布型的缺点 ** **
增量模型 开发早期回报明确,易于维护 要求开放的软件体系结构
螺旋模型 风险驱动,适用于大型项目开发 风险分析人员需要有经验且经过充分训练
模型 优点 缺点 适用于哪类软件开发
瀑布模型 只关注后面,不用管前面,整体比较规范,可强迫开发人员采用规范的方法; 提高开发效率,确保前面的工作是正确的,缩短开发周期,相应地减少时间和金钱的付出; 文档驱动,严格地规定了每个阶段必须提交的文档,要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证 ,有问题可以提早发现。高质量(文档保证)。 从前往后,一步错步步错,最后才可以看到结果,系统可能不满足客户真正的需求,风险大; 模型缺乏灵活性,无法解决需求不明确问题,用户不经过实践提出完整准确的需求是不切实际的 文档也是缺点,工作量大 需求稳定的项目,功能和性能明确、完整、无重大变化的软件开发,并且分析设计人员对应用领域很熟悉,项目风险低,用户很少参与开发工作的项目。 新团队。用最经典的最传统的开发方法来规范开发行为。
快速原型 **克服了瀑布型的缺点 **及早提供有用产品; 及早发现问题,及时改错; 降低风险,减少开发时间,提高开发效率; 用户参与,增加沟通,减少误解; 适应需求的变化. 缺少有力的工具支持; 尚未建立完整的开发标准; 对设计人员和开发环境要求高; 易变性给测试带来了困难. 需求快速变化的; 用户心急的。
增量模型 开发早期回报明确,易于维护 各个阶段交付的是满足客户需求的一个子集的可运行产品,有问题,可及时改正。 因为首先交付具有较高优先权的模块,增量不断被集成进来,使得最重要的功能接受了最多的测试,从而降低风险。 合理的规划开发人员。 要求开放的软件体系结构 难点:每个附加的增量并入现有的软件时,必须不破坏原来已构造好的东西。 管理人员须有足够的技术能力来协调好各增量之间的关系。 开发期间,开发者和用户必须始终在一起,直到系统的安全版本出来。 用户参与度高,团队人少,技术能力不足,需求不稳定的项目。
遇到不能集成的风险,软件必须具备开放式的体系结构
  • 增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性

适用场景

  • 进行已有产品升级或新版本开发,增量模型是非常适合的
  • 对完成期限严格要求的产品,可以使用增量模型
  • 对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的

螺旋模型

基本思想

  • 通过建立原型、划分开发阶段来降低风险,一旦在开发过程中风险过大就停止继续开发,不适合作为合同项目的开发

优点

  • 对于大型系统及软件的开发,具有很好的风险控制,开发者和客户能够较好地对待和理解每一级迭代的风险
  • 设计上的灵活性,可以在项目的各个阶段进行变更
  • 以小的分段来构建大型系统,使成本计算变得简单容易
  • 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性
  • 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互

缺点

  • 需要具有较高的风险评估技术,应用比较复杂
  • 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失
  • 过多的迭代次数会增加开发成本,延迟提交时间。

适用范围

  • 螺旋模型只适合于大规模的软件项目
模型 优点 缺点
瀑布模型 规范,文档驱动 系统可能不满足客户真正的需求
快速原型 克服了瀑布型的缺点 ** **
增量模型 开发早期回报明确,易于维护 要求开放的软件体系结构
螺旋模型 风险驱动,适用于大型项目开发 风险分析人员需要有经验且经过充分训练
模型 优点 缺点 适用于哪类软件开发
瀑布模型 只关注后面,不用管前面,整体比较规范,可强迫开发人员采用规范的方法; 提高开发效率,确保前面的工作是正确的,缩短开发周期,相应地减少时间和金钱的付出; 文档驱动,严格地规定了每个阶段必须提交的文档,要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证 ,有问题可以提早发现。高质量(文档保证)。 从前往后,一步错步步错,最后才可以看到结果,系统可能不满足客户真正的需求,风险大; 模型缺乏灵活性,无法解决需求不明确问题,用户不经过实践提出完整准确的需求是不切实际的 文档也是缺点,工作量大 需求稳定的项目,功能和性能明确、完整、无重大变化的软件开发,并且分析设计人员对应用领域很熟悉,项目风险低,用户很少参与开发工作的项目。 新团队。用最经典的最传统的开发方法来规范开发行为。
快速原型 **克服了瀑布型的缺点 **及早提供有用产品; 及早发现问题,及时改错; 降低风险,减少开发时间,提高开发效率; 用户参与,增加沟通,减少误解; 适应需求的变化. 缺少有力的工具支持; 尚未建立完整的开发标准; 对设计人员和开发环境要求高; 易变性给测试带来了困难. 需求快速变化的; 用户心急的。
增量模型 开发早期回报明确,易于维护 各个阶段交付的是满足客户需求的一个子集的可运行产品,有问题,可及时改正。 因为首先交付具有较高优先权的模块,增量不断被集成进来,使得最重要的功能接受了最多的测试,从而降低风险。 合理的规划开发人员。 要求开放的软件体系结构 难点:每个附加的增量并入现有的软件时,必须不破坏原来已构造好的东西。 管理人员须有足够的技术能力来协调好各增量之间的关系。 开发期间,开发者和用户必须始终在一起,直到系统的安全版本出来。 用户参与度高,团队人少,技术能力不足,需求不稳定的项目。
螺旋模型 风险驱动,对于大型系统及软件的开发,具有很好的风险控制,开发者和客户能够较好地对待和理解每一级迭代的风险;软件质量作为软件开发的一个重要目标。 风险分析人员需要有经验且经过充分训练**(需要具有较高的风险评估技术,应用比较复杂。)** 适用于大型项目开发; 自主研发项目

你可能感兴趣的:(软件工程)