# 简答题

# 软件工程与软件过程

# 什么是计算机软件?软件的特点是什么?

软件≠程序

软件 = 程序 + 数据 + 文档

国标中对软件的定义为:与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。

# 计算机软件有哪些特点?

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

习题 P4 三、1.

# 什么是软件工程?简述软件工程的基本原理及软件工程的目标。

# 什么是软件工程?

软件工程就是用科学的知识和技术原理来定义,开发,维护软件的一门学科。

查到的答案的基本原则和基本原理在说一个东西

软件工程的基本原则

软件工程的目标

# 简述软件工程的基本原则。

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

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

习题 P6 8.

# 简述软件工程的目标。

在给定成本、进程的前提下、开发具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性、可互操作性并满足用户需要的软件产品。

习题 P6 7. 降低成本、及时交付高质量的软件产品(高质量、高效率、高效益)。

# 简述软件生命周期各阶段的基本任务。

  1. 问题定义:搞清楚要解决的问题是什么。
  2. 可行性研究:用最小的代价在尽可能短的时间内确定问题是否能够解决,确定问题是否值得去解。从经济、技术、社会(如法律)等方面分析可行性。
  3. 需求分析:确定系统必须完成哪些工作。
  4. 概要设计:从总体上解决问题,确定可实现的方案,设计程序的体系结构。
  5. 详细设计:把解法具体化,详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。
  6. 编码和单元测试:把详细设计的结果翻译成用选定的语言书写的程序,并对每个模块进行单元测试。
  7. 综合测试:通过各种类型的测试及相应的调试,使软件达到预定的要求。
  8. 软件维护:通过各种必要的维护活动使系统持久地满足用户的需要。

# 简述消除软件危机的途径?

为了消除软件危机:

  • 首先应该对计算机软件有一个正确的认识。软件是程序、数据及相关文档的完整集合。
  • 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
  • 应该推广和使用在实践中总结出来的开发软件成功的技术和方法。
  • 应该开发和使用更好的软件工具。

书 P11 2.1

# 软件测试的目的和原则是什么?

# 软件测试的目的是什么?

测试的目的如下:

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

习题 P62 三、7.

# 简述软件测试的原则。

软件测试的原则如下:

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

习题 P62 三、4.

# 软件测试的一般过程及各步骤目的是什么?

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

我猜主要想考的还是下面这个。

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

习题 P64 11.

# 说明软件测试和调试的目的有何区别?

测试的目的是判断和发现软件是否有错误。
调试的目的是定位软件错误并纠正错误。

它们的出发点不一样。
前者是挑错,是一种挑剔过程,属于质量保证活动。
后者是排错,是一种排除过程,是编码活动的一部分。

# 软件危机产生的原因是什么?

产生软件危机的原因如下:

  • 软件的规模越来越大,结构越来越复杂。
  • 软件开发管理困难而复杂。
  • 软件开发费用不断增加。
  • 软件开发技术落后。
  • 软件开发方式落后。
  • 软件开发工具落后,生产率提高缓慢。

习题 P206 3.

# 什么是软件过程模型?都有哪些典型的软件过程模型?

软件过程是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。
软件过程模型是对软件开发实际过程的抽象和简化,是描述软件开发过程中各种活动如何执行的模型,因此又称为软件开发模型。

主要的软件过程模型有:瀑布模型、增量模型、螺旋模型、喷泉模型和基于知识的模型等。

  1. 瀑布模型是经典的软件开发模型,将软件开发活动中的各项活动规定为依线性顺序连接的若干阶段,它简单易用,在消除非结构化软件、降低软件的复杂性、促进软件开发工程化方面起了很大的作用。但在软件开发实践中也逐渐暴露出它的缺点。它将一个充满回溯的软件开发过程硬性分割为几个阶段,无法解决软件需求不明确或者变动的问题。
  2. 增量模型是一种非整体开发的模型。根据增量的方式和形式的不同,分为基于瀑布模型的渐增模型和基于原型的快速原型模型。该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。
  3. 螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:制定计划、风险分析、实施工程、客户评估。
  4. 喷泉模型用于采用对象技术的软件开发项目。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。软件开发过程有4个阶段,即分析、系统设计、软件设计和实现。各阶段相互重叠,以分析为基础,资源消耗成塔形,从高层返回低层无资源消耗。强调增量开发,是对象驱动的过程,反映了对象的开发和重用过程。
  5. 基于知识的模型也称为智能模型。通过领域的专家系统,可使需求说明更加完整、准确和无二义性。通过软件工程知识和特定应用领域的知识和规则的应用来提供开发的帮助。

# 简述瀑布模型的优缺点。

瀑布模型有许多优点:

  • 可强迫开发人员采用规范的方法(如结构化技术);
  • 严格地规定了各个阶段必须提交的文档;
  • 要求每个阶段交出的所有产品都必须经过质量保证小组的验证。

“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。

  • 在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的。
  • 要求用户不经过实践就提出完整准确的需求,在许多情况下都是不切实际的。
  • 瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。

习题 P7 2.2

# 有哪些主要的软件开发方法?

主要的软件开发方法有:

  • 基于数据的数据流开发方法
  • 基于对象的面向对象的方法
  • 基于需求动态定义的原型化方法
  • 基于瀑布模型的结构化方法

# 根据瀑布模型为下列任务排序:验收测试、项目计划、单元测试、需求复审、成本估计、总体设计、设计复审、市场调研、详细设计、系统测试、实现、编制需求规格说明书。

  1. 市场调研
  2. 项目计划、成本估计、编制需求规格说明书(同时进行)
  3. 需求复审
  4. 总体设计
  5. 详细设计
  6. 设计复审
  7. 实现
  8. 单元测试
  9. 系统测试
  10. 验收测试

# 为什么说喷泉模型较好地体现了面向对象软件开发过程无缝和迭代的特性?

由于在整个开发过程中都使用统一的软件概念“对象”,所有其他概念(例如功能、关系、事件等)都是围绕对象组成的,目的是保证分析工作中得到的信息不会丢失或改变,因此,对生命周期各个阶段的区分自然也就不重要了,不明显了。分析阶段的得到的对象模型也适用于设计阶段和实现阶段。

由于各阶段都使用统一的概念和表示符号,因此,整个开发过程都是吻合一致的,或者说是“无缝”连接的,这自然也就很容易实现各个开发步骤的多次反复迭代,达到认识的逐步深化。所以说喷泉模型较好的体现了面向对象软件开发过程无缝和迭代的特性。

# 传统方法学

# 在软件开发的早期阶段为什么要进行可行性研宄?应该从哪些方面研宄目标系统的可行性?

为什么要进行可行性研究?

开发一个软件时,需要判断原定的系统模型和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度,如果做不到这些,那么花费在这些工程上的任何时间、人力、软硬件资源和经费,都是无谓的浪费。 可行性研究的实质是要进行一次大大压缩简化了的系统分析和设计过程,就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。 可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决,以避免盲目投资带来的巨大浪费。


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

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

习题 P30 三、13.

# 为什么要进行需求分析?通常对软件系统有哪些需求?

为了开发真正满足用户需求的软件产品,需求分析是软件开发工作获得成功的前提条件,不能满足用户需求的程序只会令用户失望,给开发者带来烦恼。

功能需求、性能需求、可靠性和可用性需求、出错处理、借口需求、约束、逆向需求、将来可能提出的要求。

# 简述软件设计的“信息隐藏原则”。

信息隐藏原理之处,应该这样设计和确定模块。使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。

书 P71 4.2.4

# 简述软件设计的“强内聚原则”。

内聚标志一个模块内各个元素彼此结合的紧密程度。 它是信息隐藏和局部化概念的自然扩展。 理想内聚的模块只做一件事情,设计时应该为求做到高内聚。

书 P73 4.3.2

# 简述耦合和内聚的概念并说明为何要建立弱耦合高内聚的软件系统。

耦合是对一个软件结构内不同模块之间互连程度的度量。 内聚标志一个模块内各个元素彼此结合的紧密程度。

在软件设计时应该追求松散耦合、力求做到高内聚。 模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。 内聚和耦合密切相关,模块内的高内聚往往意味着模块间的松耦合。 弱耦合高内聚可以获得较高的模块独立性。

习题 P35 4.3

# 什么是结构化程序设计?简述结构化程序设计的基本要点。

结构化设计又称面向数据流的设计,它是以需求分析阶段产生的数据流图为基础,按一定的步骤映射成软件结构。

  1. 采用自顶向下,逐步求精的程序设计方法。
  2. 使用三种基本控制结构构造程序,分别是顺序,选择和循环。
  3. 采用主程序员组的组织形式。
  4. 采用单入口单出口的模块形式。

# 需求分析有哪些特点?

需求分析的特点及难点,主要体现在以下几个方面。

  • 确定问题难
  • 需求时常变化
  • 交流难以达到共识
  • 获取的需求难以达到完备与一致
  • 需求难以进行深入的分析与完善

需求分析 | 百度百科 (opens new window)

# 系统流程图与数据流程图有什么区别?

程序流程图:程序逻辑描述程序中控制流的情况,即程序中处理的执行顺序和执行序列所依赖的条件,途中的有向线段表示的是控制流从一个处理走到下一个处理。

数据流程图:反应数据走向,它不考虑时序关系,主要用于业务分析,用作详细设计。途中的有向线段表示了数据流。

# 软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护性?

软件的可理解性、可测试性、可修改性、可移植性和可重用性是决定软件可维护下的基本因素。

软件生命周期每个阶段的工作都和软件可维护性有密切关系。 良好的设计,完整准确易读易理解的文档资料,以及一系列严格的复审和测试,使得一旦发现错误时比较容易诊断和纠正,当用户有新要求或外部环境变化时软件能较容易地适应,并且能够减少维护引入的错误。 因此,在软件生命周期的每个阶段都必须充分考虑维护问题,并且为软件维护预做准备。

# 什么是软件可靠性?什么是软件的可用性?两者的主要区别是什么?

软件按照设计的要求,在规定时间和条件下达到不出故障,持续运行的要求的质量特性称为可靠性。 可靠性是指在规定的一段时间内和规定的条件下,软件维持在其性能水平的能力。

可用性是在某个考察时间,系统能够正常运行的概率或时间占有率期望值。

它是衡量设备在投入使用后实际使用的效能,是设备或系统的可靠性、可维护性和维护支持性的综合特性。

# 面向对象方法学

# 简述三种面向对象模型的主要功能。

  • 对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。对象模型为建立动态模型和功能模型,提供了实质性的框架。
  • 动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。它关心的是系统的控制及操作的执行顺序,它从对象的事件和状态的角度出发,表现了对象的交互行为。“什么时候做”
  • 功能模型表示变化的“功能”性质,它指明了系统应该“做什么”。因此,功能模型更直接地反映了用户对目标系统的需求。

习题 P73 P75 P76

# 简述建立对象模型的过程。

建立对象模型的步骤如下:

  1. 确定类:标出来自问题域的相关对象类。
  2. 准备数据字典:为所有建模实体准备一个数据字典,准确描述各对象类的精确含义,描述当前问题中的类的范围,包括对类的成员、用法方面的假设或限制;
  3. 确定关联:确定二个或多个类之间的相互依赖;
  4. 确定属性:只考虑与具体应用直接相关的属性。
  5. 使用继承来细化类:使用继承来共享公共结构,以此来重新组织类。

# 简述对象之间的关系。

类的外部关系有关联、继承、依赖 3 种关系。

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

习题 P88 三、2.

# 简述面向对象的启发规则。

面向对象启发规则如下:

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

习题 P102 三、3.

# 为什么面向对象的方法能够有效地解决软件需求中存在的问题?

需求过程中存在两大难题,一是需求的确定是困难的,二是需求是不断变动的。 尤其是对于一些大型软件系统,开发周期长,系统规模大,复杂性高。

面向对象的方法中,由于对象所具有的封装性和信息隐蔽,使得对象的内部实现与外界隔离,具有较强的独立性。 而且面向对象的方法是以对象为中心构造软件系统,而不是基于对系统功能进行分解来构造系统,当系统功能需求改变时不会引起系统结构的变化,使软件系统具有良好的稳定性和可适应性。 软件生存期各阶段所使用的方法、技术具有高度的连续性,对软件开发过程所有阶段进行综合考虑,能有效地降低软件开发的复杂度,提高软件质量,也便于需求的确定。

# 什么是抽象类?在建模时有时使用抽象类有什么好处?

抽象类的定义:

抽象类是指没有实例的类,定义了一些抽象的操作,即不提供实现方法的操作,只提供操作的特征,并标注。

使用抽象类的好处:

在建模时使用抽象类使系统结构更加地清晰,增加了系统的可读性和可理解性。

# 论述面向对象方法学的优点。

面向对象的软件工程方法的优点如下:

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

习题 P78 三、5.

# 为什么说面向对象方法学比传统方法学在可重用性方面要好?

传统的软件重用技术是利用标准函数库来构造新的软件系统,但是标准函数少必要的“柔性”,不能适应不同应用场合的不同需求,并不是理想的可重用的软件成分。

在面向对象方法所使用的对象中,数据和操作正是作为平等伙伴出现的,因此,对象具有很强的自合性。此外,对象所固有的封装性和信息隐藏机理,使得对象内部实现与外界隔离,具有较强的独立性。由此可见,对象是比较理想的模块和可重用的软件成分。

# 为什么说面向对象方法学比传统方法学在稳定性方面要好?

传统的软件开发以算法为核心,开发过程基于功能分析和功能分解。 用传统方法所建立起来的软件系统的结构紧密依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。 事实上,用户需求变化大部分是针对功能的,因此这样的软件系统是不稳定的。

面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。 它的基本做法是用对象模拟问题领域中的实体,以对象间的联系刻画实体间的联系。 当对系统的功能需求变化时并不会引起软件结构的整体变化,仅仅只需要作一些局部性的修改。 总之,由于现实世界中的实体是相对稳定的,因此,对象为中心构造的软件系统也是比较稳定的。

# 软件项目管理

# 为什么软件需要维护?简述软件维护的过程。

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

软件维护就是要针对用户使用软件产品过程提出的问题而对软件产品进行相应的修改或演化,从而修正错误,改善性能或其它特征,以及使软件适应变化的环境。

软件维护是软件生命周期的最后一个阶段。 在产品交付并且投入使用之后,为了解决在使用过程中不断发现的各种问题,保证系统正常运行,同时使系统功能随着用户需求的更新而不断升级,软件维护的工作是非常必要的。

习题 P148 三、1.

软件维护的过程:提出维护要求,分析维护要求,提出维护方案,审批维护方案,确定维护计划,修改软件设计,修改程序,测试程序,复查验收。

# 简述软件开发中文档的重要性。

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

习题 P148 11.

# 简述软件文档的主要作用。

软件文档的作用主要体现在以下几个方面:

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

习题 P149 三、12.

# 你认为一个好的软件开发人员应具备哪些基本素质?

  • 牢固掌握计算机软件的基本知识和技能
  • 善于分析和综合问题,具有严密的逻辑思维能力
  • 工作踏实细致,遵循标准和规范,具有严格的科学作风
  • 工作有耐心、有毅力、有责任心
  • 善于听取别人的意见,善于与周围人员团结协作,建立良好的人际关系
  • 具有良好的书面和口头表达能力

# 软件开发环境应具有高度的通用性,在此,通用性包括哪些方面?

软件开发环境应具有高度的通用性是指:

  • 能适应最常用的几种语言。
  • 能适应和支持不同的开发方法。
  • 能适应不同的计算机硬件及其系统软件,对这些方面应具有最小的依赖性(尤其是对硬件)。
  • 能适应开发不同类型的软件。
  • 能适应并考虑到不同用户的需要(如程序员、系统分析员、项目经理、质量保证人员、初学者与熟练人员)。

# 影响软件代码效率的因素有哪些?

  • 算法对效率的影响
    关于算法的转换指导原则,在一定程度上减小了算法对效率的影响。从这一点能够看出算法直接影响到的是程序,进而影响到了整个代码的效率问题。故而在转换时需要注意之外,在程序设计和实现时同样需要考虑效率的问题。
  • 存储效率
    处理器的分页调度和分段调度的特点决定了文件的存储效率,同样对于代码也存在这个问题。一般来说使用能保持功能域的结构化控制结构是提高效率的好办法。提高效率的办法通常也是提高存储效率的方法。
  • 输入输出效率
    输入和输出的效率决定的是人与计算机之间通信的效率,程序设计中输入和输出的简单清晰,是提高输入输出效率的关键。

# 软件重用的效益是什么?

  • 软件重用可以显著地改善软件的质量和可靠性。
  • 软件重用可以极大地提高软件开发的效率。
  • 节省软件开发的成本,避免不必要的重复劳动和人力、财力的浪费。

# 什么是α测试和β测试?

# α (Alpha) 测试:

α 测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试,且开发者负责记录发现的错误和遇到的问题。 即α测试是在受控的环境中进行的。

# β (Beta) 测试:

β 测试由软件的最终用户们在一个或多个客户场所进行。 开发者通常不在 β 测试的现场,即 β 测试是软件在开发者不能控制的环境中的“真实”应用。

主要的实现步骤是:

  1. 用户记录在 β 测试过程中遇到的问题,并且定期把这些问题报告给开发者。
  2. 开发者在接收到在 β 测试期间报告的问题之后,对软件产品进行必要的修改。
  3. 开发者向全体客户发布最终的软件产品。

# 为什么要进行软件项目管理?

软件项目管理是对软件项目开发全过程的管理,是对整个软件生存期的所有活动进行管理。

任何工程的成败,都与管理的好坏密切相关,软件项目也不例外。

尤其是软件产品的特殊性,软件项目的管理对于保证软件产品的质量具有极为重要的作用,是软件项目开发成功的关键。

# 什么是软件配置管理?主要任务是什么?

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

习题 P143 5.

软件配置管理的主要任务:

  1. 制定项目的配置计划;
  2. 对配置项进行标识;
  3. 对配置项进行版本控制;
  4. 对配置项进行变更控制;
  5. 定期进行配置审计;
  6. 向相关人员报告配置的状态。

软件配置管理 | 百度百科 (opens new window)

# 动态测试的四个阶段分别是什么?请简述各阶段的主要工作?

动态测试的四个阶段分别是单元测试、集成测试、系统测试、确认测试。

动态测试各阶段的主要工作:

  1. 单元测试 把每个模块作为一个单独的实体来测试,检验其正确性。目的是保证每个模块作为一个单元能正确运行。模块测试所发现的是编码和详细设计的错误。
  2. 集成测试 把经过单元测试的模块放在一起形成一个子系统来测试。模块相互间的协调和通信是这个测试过程中的主要问题,即集成测试着重测试模块的接口。
  3. 系统测试 把经过测试的子系统装配成一个完整的系统来测试。系统测试发现的是软件设计中和需求说明中的错误。
  4. 确认测试 把软件系统作为单一的实体进行测试,它是在用户积极参与下进行的,而且主要使用实际数据进行测试。确认测试的目的是验证系统确实能够满足用户的需要,确认测试发现的是系统需求说明书中的错误。

# 简述软件维护工作过程。为什么说软件维护过程是一个简化的软件开发过程?

首先要建立维护机构,对每一个维护申请提出报告,并对其进行论证。 然后为每一项维护申请规定维护的内容和标准的处理步骤。 此外,还必须建立维护活动的登记制度,以及规定维护评审和评价的标准。


软件维护的工作程序与软件开发的工作程序相仿。

其工作程序是:

  • 维护的需求分析
  • 维护的设计
  • 修改程序代码
  • 维护后的测试
  • 维护后的试运行
  • 维护后的正式运行
  • 维护过程的评审和审计

习题 P148 三、4.

# 什么是单元测试和集成测试?他们各有什么特点?

单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

集成测试也叫组装测试、联合测试、子系统测试或部件测试。集成测试是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统。

特点:

  1. 单元测试大量使用白盒测试技术,检查模块控制结构中的特定路径,以确保做到完全覆盖并发现最大数量的错误。
  2. 集成测试是测试和组装软件的系统化技术,是把模块按照设计要求组装起来的同时进行测试,要目标是发现与接口有关的问题。