目录
软件工程基础篇
1、软件是什么?
软件是指能够实现预定功能和性能的可执行的计算机程序,使程序正常运行所需要的数据,描述软件开发及其管理、程序的操作和使用的有关文档的完整集合。
软件是计算机程序及其有关的数据和文档的完整集合。
2、什么是软件危机?
软件危机是指在计算机软件开发和维护过程中碰到问题的集合。
3、软件由什么构成?
软件=程序+设计
4、什么是快速原型模型?
快速原型模型(Rapid Prototype Model)是一种开发策略,它强调在开发过程的早期阶段快速构建一个可运行的软件原型。这种模型的主要目标是帮助开发人员和用户更好地理解需求,并在项目早期阶段就达成共识。
- 快速原型模型需要迅速建造一个可以运行的软件原型,以便理解和澄清问题,使开发人员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。
- 快速原型模型是一种强调在软件开发早期阶段通过构建和展示原型来验证和满足用户需求的开发策略。它通过迭代的方式逐步构建和完善软件产品,以降低项目风险并提高开发效率。
5、软件开发生存周期?
软件产品从问题定义开始,经过开发,使用和维护,直到最后被淘汰的整个过程就是软件生存周期,也叫软件生命周期。
6、高内聚低耦合用来衡量什么?
- 高内聚:指的是一个模块内部各个元素之间结合的紧密程度高,模块内的功能联系紧密。也就是说,一个模块应当只负责一项任务,即遵循“单一责任原则”。
- 低耦合:指的是软件结构中各模块之间相互连接的程度低,模块之间的接口简单,模块之间的独立性高。
7、软件概要设计和详细设计是什么?
- 概要设计的任务是确定设计方案和进行软件结构设计,与此同时要进行数据库设计和制订测试计划;
- 详细设计的任务是进行软件过程设计、系统接口设计和数据设计。
8、测试用例是什么?
测试用例(Test Case) 是为某个特定目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实某个需求的实现。测试用例是执行测试的重要依据,它包含了测试的输入数据、执行条件以及预期输出等关键元素。
9、什么是预防性维护?
为了进一步提高软件的可维护性和可靠性,为改进软件性能创造条件,需要对软件进行的其他维护称为预防性维护(PreventiveMaintenance)。
10、UML是什么?
UML是一种描述、构造、可视化和文档化的软件建模语言。
软件工程中级篇
1、瀑布模型,软件定义周期顺序?
瀑布模型把软件生存周期划分为计划时期、开发时期和运行时期。
2、详细设计用到的工具?
图形工具:程序流程图(程序框图)、PAD图、N-S图(盒图)、HIPO图(层次图与输入/处理/输出图);
表格工具:判定表、判定树;
语言工具:过程设计语言(PDL);
3、软件工程方法学的三要素?
方法、工具、过程
4、软件的特点?
抽象性:
-
- 软件是逻辑实体,而非物理实体,具有抽象性。它不像物理产品那样可以被触摸或看见,而是通过代码、数据和算法等逻辑元素来定义和实现其功能。
- 非制造性:
-
- 软件并非通过物理制造过程产生,而是通过编程和开发过程创建出来的。它不存在明显的制作过程,因此可以进行大量的复制,而不需要额外的物理制造成本。
- 无磨损和老化:
-
- 软件没有物理磨损和老化的问题。只要运行环境得到维护,软件就可以持续运行,不会因为使用时间的增长而降低性能或失效。
- 对计算机系统的依赖性:
-
- 软件的开发、运行和维护都依赖于特定的计算机系统环境,包括硬件、操作系统和其他相关软件。为了确保软件的正常运行,需要确保这些环境得到适当的配置和支持。
- 复杂性高、成本高:
-
- 软件开发涉及多个复杂的过程,包括需求分析、设计、编码、测试和维护等。这些过程需要投入大量的人力、物力和时间,因此软件开发通常具有较高的成本。
- 安全性和隐私保护:
-
- 好的软件应该具有良好的安全措施和隐私保护机制,以确保用户的信息和资产安全。这包括数据加密、访问控制、安全审计等安全措施。
- 易用性和界面友好:
-
- 好的软件应该界面美观、操作简单,用户可以快速上手,提高用户体验和满意度。此外,软件还应该提供清晰的帮助文档和用户支持服务,以帮助用户更好地使用软件。
- 可扩展性和兼容性:
-
- 好的软件应该具有良好的扩展性和兼容性,能够适应新的技术环境和业务需求,以保证软件的持续发展。这包括支持新的操作系统、硬件设备和业务应用等。
- 稳定性和可靠性:
-
- 软件应该稳定、可靠,不容易出现崩溃和错误,能够确保数据的安全和完整性。为了保证软件的稳定性和可靠性,需要进行充分的测试和验证,并在发现问题时及时修复。
5、软件开方的模型名词?
6、软工技术研究包括?
软件开发方法:
-
- 研究如何开发高质量、高效率的软件系统的方法和过程。
- 包括敏捷开发、瀑布模型、迭代开发等各种开发方法。
- 软件需求工程:
-
- 研究如何识别、分析和管理软件系统的需求。
- 包括需求获取、需求分析、需求验证等工作。
- 软件设计与架构:
-
- 研究如何对软件系统进行设计和架构,以满足系统的功能、性能、可维护性等要求。
- 包括面向对象设计、设计模式、系统架构等。
- 软件测试与验证:
-
- 研究如何进行软件系统的测试和验证工作,以确保软件的质量和可靠性。
- 包括单元测试、集成测试、系统测试、验收测试等,以及测试策略、测试工具和方法等。
- 软件质量保证:
-
- 研究如何进行软件质量保证,包括对软件过程的管理、度量和改进,以及软件质量评估与认证等工作。
- 强调软件过程的规范化和标准化,以提高软件质量。
- 软件项目管理:
-
- 研究如何对软件项目进行管理,包括项目计划、资源分配、进度控制、风险管理等。
- 强调项目管理的科学性和有效性,以确保项目的成功实施。
- 软件工具与环境:
-
- 研究如何设计和开发软件工程的支持工具和环境,以提供更高效、更可靠的软件开发和管理过程。
- 包括集成开发环境(IDE)、版本控制系统、自动化测试工具等。
- 软件工程教育与培训:
-
- 研究如何进行软件工程的教育和培训,以提高软件开发人员的专业能力。
- 包括课程设置、教学方法、实践项目等。
7、软件生命周期每个阶段做什么?
8、软件可移植性是什么?
软件移植性是指软件不加改动地从一种运行环境转移到另一种环境下运行的能力,即程序在不同计算机环境下能够有效地运行程度,可移植性好的软件容易维护。
9、可行性分析主要是干吗的?
10、结构化软件设计的风格?
自顶向下设计:
-
- 结构化设计从高层次开始,首先定义软件系统的总体结构和主要模块,然后逐步细化每个模块的功能和接口。
- 这种设计方法有助于确保系统的整体性和一致性,同时避免在早期阶段陷入过多的细节。
- 逐步求精:
-
- 在设计过程中,随着对系统理解的深入,设计细节被逐步明确和细化。
- 从概要设计到详细设计,每个阶段都基于前一阶段的结果进行扩展和深化。
- 模块化:
-
- 结构化设计将软件系统划分为若干个相对独立且具有单一功能的模块。
- 每个模块都负责实现特定的功能,并通过接口与其他模块进行交互。
- 模块化有助于降低系统的复杂性,提高代码的可读性和可维护性。
- 数据流驱动:
-
- 结构化设计基于数据流图(DFD)进行数据流的分析和设计。
- 通过分析数据流图中的信息流动和处理过程,可以确定软件系统的结构和模块之间的调用关系。
- 强调清晰的控制结构:
-
- 结构化设计强调使用清晰的控制结构来组织代码,如顺序、选择和循环结构。
- 避免使用复杂的控制结构,如GOTO语句,以减少程序中的错误和混乱。
- 重视文档和标准化:
-
- 结构化设计强调编写详细的文档,包括数据流图、结构图、模块说明等。
- 文档的编写有助于团队成员之间的沟通和协作,同时也有助于后续的代码维护和扩展。
- 标准化则包括使用统一的命名规范、编程风格等,以提高代码的可读性和可维护性。
- 强调数据抽象和封装:
-
- 结构化设计鼓励将数据和相关操作封装在一起,形成抽象数据类型(ADT)。
- 这样做可以隐藏数据的实现细节,只暴露必要的接口给外部使用,从而提高代码的安全性和可维护性。
11、结构通道来标识程序?
结构通道在软件设计中并不是用于直接标识程序的,而是用于控制和管理数据的输入/输出操作。在软件设计中,程序的标识通常通过其他方式来实现。
在计算机系统结构中,通道的主要功能包括:
- 接收CPU发来的I/O指令,并根据指令要求选择指定的外设与通道相连接。
- 执行通道程序(从主存中逐条取出通道指令,对通道指令进行译码,并根据需要向被选中的设备控制器发出各种操作命令)。
- 给出外设中要进行读/写操作的数据所在的地址。
- 给出主存缓冲区的首地址(该缓冲区存放从外设输入的数据或者将要输出到外设中去的数据)。
- 控制外设与主存缓冲区之间的数据传送的长度(对传送的数据个数进行计数,并判断数据传送是否结束)。
- 指定传送工作结束时要进行的操作(例如,将外设的中断请求及通道的中断请求送往CPU等)。
- 检查外设的工作状态是否正常,并将该状态信息送往主存指定单元保存。
12、白盒测试方法、概念,判定条件,基础路径。
白盒测试概念:
白盒测试,又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。这里的“白盒”指的是测试者能够清楚了解被测软件的内部结构、逻辑和运作方式,即测试是在对程序内部逻辑结构全面了解的基础上进行的。
白盒测试方法
白盒测试的方法主要包括以下几种:
- 代码检查法:直接阅读代码,检查代码的逻辑、语法和错误。
- 静态结构分析法:不执行程序,通过分析代码的结构、数据流和控制流来检查程序。
- 静态质量度量法:通过度量代码的质量属性(如复杂性、可维护性等)来评估代码的质量。
- 逻辑覆盖法:包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和修改条件判断覆盖等,用于确保测试覆盖了程序的所有逻辑路径。
- 基本路径测试法:通过分析程序的控制流图,找出基本路径并设计测试用例。
- 域测试:针对程序中特定数据域的测试。
- 符号测试:使用符号执行技术来检查程序的路径和状态。
- 路径覆盖:确保测试覆盖了程序的所有可能路径。
- 程序变异:通过修改程序以产生新的变异体,并测试这些变异体来发现错误。
判定条件
在白盒测试中,判定条件是指程序中需要进行真假判断的条件。测试者需要确保每个判定条件的每个分支都被测试到,即实现判定覆盖。此外,测试者还需要检查每个判定中的条件是否取到了各种可能的值,即实现条件覆盖。
基础路径
基础路径(或基本路径)是白盒测试中的一个重要概念,它指的是程序中从入口到出口的一条独立路径。测试者通过分析程序的控制流图(CFG),找出所有的基础路径,并基于这些路径设计测试用例。这样可以确保测试覆盖了程序的所有可能执行路径。
13、黑盒测试和白盒测试的区别。
测试方式不同:
-
- 黑盒测试:这是一种功能测试,通过测试来检测每个功能是否都能正常使用。在测试中,将程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。
- 白盒测试:又称为结构测试、透明盒测试或基于代码的测试。它通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
- 测试目的不同:
-
- 黑盒测试:主要目的是发现软件设计的需求或者是软件设计规格说明书中的错误缺陷。它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。
- 白盒测试:主要目的是通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
- 测试原则不同:
-
- 黑盒测试:以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。它着重测试软件的功能需求,是在程序接口上进行的测试。
- 白盒测试:测试原则包括确保一个模块中的所有独立路径至少被测试一次,所有逻辑值均需测试true和false两种情况,以及检查程序的内部数据结构,保证其结构的有效性等。
- 测试关注点:
-
- 黑盒测试:主要关注于软件的外部特性和功能,不考虑内部逻辑结构。
- 白盒测试:主要关注于软件的内部逻辑结构、代码路径和条件等。
- 测试阶段:
-
- 黑盒测试:在各个测试阶段都有应用,尤其在系统测试和确认测试中,其作用是其他测试方法无法取代的。
- 白盒测试:更多地应用于单元测试、集成测试和系统测试的早期阶段,帮助开发者发现和修复代码中的错误。
- 测试方法:
-
- 黑盒测试:包括等价类划分法、边界值分析法、因果图法、错误推测法等。
- 白盒测试:包括代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法(如语句覆盖、判定覆盖、条件覆盖等)、基本路径测试法等。
14、UML的9种用例图。
用例图、类图和包、对象图、状态图、顺序图、活动图、协作图、构件图、部署图。
15、增量模型怎么做?
增量模型也称渐增模型,先选择一个或几个关键功能,建立一个不完全的系统。
增量模型是对瀑布模型的改进,它使开发过程具有一定的灵活性和修改性。
16、需求分析是什么?
需求分析是研究用户要求,以得到目标系统的需求定义的过程。
17、软件工程和软件工程学的区别?
软件工程是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、发布和维护的工程或进行研究的学科。
软件工程是指导计算机软件开发和维护的工程学科,它采用工程的概念、原理、技术和方法来开发与维护软件。
软件工程学的主要内容是软件开发技术和软件工程管理。
18、封装是什么?
封装就是把对象的属性和方法结合成一个独立的单位,尽可能隐蔽对象的内部细节。
19、白盒黑盒是什么?
黑盒法(Black-boxTesting)又称功能测试,其测试用例完全是根据程序的功能说明来设计的。在应用这种测试法时,测试者完全不考虑程序的内部结构和内部特性,而是把软件看成是一个黑盒,测试时仅关心如何寻找出可能使程序不按要求运行的情况,因而测试是在程序接口进行的。
黑盒法是最基本的测试法,主要测试软件能否满足功能要求,检查输入能否被正确地接收,软件能否正确地输出结果。
白盒法(White-boxTesting)又称结构测试,其测试用例是根据程序内部的逻辑结构和执行路径来设计的。用白盒法测试时,从检查程序的逻辑着手。
20、面向对象的方法概念?
面向对象方法是在汲取结构化思想和优点的基础上发展起来的,是对结构化方法的进一步发展和扩充。
21、设计模型的原则?
简洁性:
-
- 简洁性要求模型设计避免不必要的复杂性,只包含关键要素和关系。
- 通过简化,可以更容易地理解、实现和维护模型。
- 准确性:
-
- 模型必须准确地反映现实世界的特定方面或系统的行为。
- 准确性是模型设计的基础,确保模型能够用于预测、分析和决策。
- 一致性:
-
- 模型内部各元素之间必须保持一致性和逻辑性。
- 一致性有助于确保模型在不同情境下的稳定性和可靠性。
- 可维护性:
-
- 设计模型时应考虑未来修改和扩展的可能性。
- 通过模块化设计、清晰的文档和可访问的源代码,可以提高模型的可维护性。
- 可复用性:
-
- 模型设计应具有通用性和可复用性,以便在不同项目或系统中重用。
- 这可以减少重复劳动,提高开发效率。
- 可扩展性:
-
- 模型应能够随着业务或系统需求的变化而扩展。
- 通过设计灵活的架构和接口,可以方便地添加新功能或修改现有功能。
- 实用性:
-
- 模型设计应满足实际业务需求,解决具体问题。
- 实用性是模型设计的最终目标,确保模型能够为用户带来实际价值。
- 健壮性:
-
- 模型应能够处理异常情况、错误输入和边界条件。
- 健壮性有助于确保模型在复杂和不确定的环境中的稳定性和可靠性。
- 透明性:
-
- 模型的设计和实现应该清晰透明,易于理解和验证。
- 透明性有助于建立用户对模型的信任,并促进模型在不同利益相关者之间的共享和协作。
- 模块化:
-
- 将模型拆分为独立且相互协作的模块可以提高模型的可维护性和可扩展性。
- 每个模块应具有明确的功能和接口,以便与其他模块进行交互。
- 可测试性:
-
- 设计模型时应考虑如何测试和验证模型的正确性和性能。
- 通过编写测试用例、模拟数据和自动化测试工具,可以确保模型的质量和可靠性。
- 灵活性:
-
- 模型设计应具有一定的灵活性,以适应未来可能的变化和需求。
- 避免过度定制或硬编码特定实现,以便在需要时轻松修改或扩展模型。
- 可解释性:
-
- 模型设计应易于解释和理解,以便与业务用户、利益相关者和其他相关人员沟通。
- 通过使用直观的图示、清晰的文档和易于理解的术语,可以提高模型的可解释性。
22、软件开发模型各自的特点?
具体可以分为:瀑布模型、快速原型模型、增量模型、喷泉模型、螺旋模型和统一过程。
瀑布模型:
-
- 特点:线性顺序连接的若干阶段,包括需求分析、设计、编码、测试、维护等。
- 优点:阶段划分清晰,易于管理和控制,每个阶段都有明确的成果产物。
- 缺点:一旦需求发生变更,可能导致项目推倒重来,风险较高。
- 适用场景:需求明确、二次开发或数据处理类型的项目。
- 快速原型模型:
-
- 特点:快速构建软件原型,通过原型与用户沟通,明确和修正需求。
- 优点:开发初期就能展示给用户,减少需求不明确带来的风险。
- 缺点:如果原型质量不高,可能误导用户,且后期可能需要重构。
- 适用场景:需求不明确或需要快速验证想法的项目。
- 增量模型:
-
- 特点:将软件划分为多个增量,逐步开发并交付给用户。
- 优点:早期就能交付部分功能,降低风险,便于用户反馈。
- 缺点:需要确保每个增量之间的接口稳定,且可能增加维护成本。
- 适用场景:功能需求复杂、需要分期交付的项目。
- 螺旋模型:
-
- 特点:引入了风险分析,通过多次迭代来降低风险。
- 优点:注重风险管理和用户需求变更,适合大型复杂项目。
- 缺点:需要具有相当丰富的风险评估经验和专门知识,迭代次数多可能增加成本。
- 适用场景:风险较大或需求变更频繁的项目。
- V模型:
-
- 特点:强调测试贯穿项目始终,与开发阶段相对应。
- 优点:确保每个开发阶段都有对应的测试阶段,提高软件质量。
- 缺点:可能导致测试工作滞后于开发工作,增加项目风险。
- 适用场景:对软件质量有较高要求的项目。
- 喷泉模型:
-
- 特点:典型的面向对象模型,迭代、无间隙。
- 优点:适应面向对象的分析与设计,支持迭代开发。
- 缺点:对开发人员的面向对象技术要求较高。
- 适用场景:面向对象的软件项目。
- 快速应用开发(RAD)模型:
-
- 特点:基于构件的开发方法,强调极短的开发周期。
- 优点:开发速度快,适用于需求明确、技术风险较低的项目。
- 缺点:对模块化要求高,不适合技术风险高的项目。
- 适用场景:管理信息系统等模块化要求高的项目。
- 敏捷开发模型:
-
- 特点:以人为核心,迭代、循序渐进的开发方式。
- 优点:快速响应需求变更,提高开发效率。
- 缺点:对团队沟通和协作要求较高。
- 适用场景:需求变化快、技术风险适中的项目。
软件工程高级篇
23、软件生命周期?
软件生命周期是从设计软件产品开始到产品不能使用为止的时间周期。
24、软件维护类型和概念?
25、UML的9种图?
用例图、类图和包、对象图、状态图、顺序图、活动图、协作图、构件图、部署图。
26、过程设计判定(判定表和判定树)
27、模型封装对谁隐藏?
模型封装(Model Encapsulation)或通常所说的封装(Encapsulation)是面向对象编程(OOP)的四大基本特性之一。封装的主要目的是隐藏对象的属性和实现细节,仅对外公开必要的接口(如方法)与外部进行交互。
数据隐藏
:封装隐藏了对象的内部状态(即属性或数据成员)和具体实现细节,使得这些内部细节对类的使用者(即客户端代码)是不可见的。客户端代码只能通过类提供的方法来访问和操作对象的状态。
- 接口明确
:封装使得类的接口更加明确。类的使用者只需要关心类提供了哪些方法(即公共接口),而不需要关心这些方法是如何实现的,或者类的内部状态是如何管理的。
- 信息保护
:封装有助于保护对象的数据不被随意访问和修改,从而提高了程序的安全性和稳定性。通过封装,我们可以控制对数据的访问权限,例如只允许读取不允许修改,或者只允许在特定条件下进行修改。
- 代码重用和模块化
:封装使得代码更加模块化和可重用。每个类都是一个独立的模块,具有明确的职责和接口。通过封装,我们可以将相关的属性和方法组合在一起,形成一个高内聚、低耦合的类,从而提高代码的可维护性和可扩展性。
- 降低复杂性
:封装有助于降低系统的复杂性。通过将复杂的内部实现细节隐藏起来,我们可以将系统分解为更小的、更易于理解和管理的部分。这样,开发人员可以更加专注于每个部分的实现细节,而不需要担心与其他部分的交互问题。
28、结构化分析方法怎么分析?
结构化分析方法(Structured Analysis Method)是一种系统性的软件开发方法,它强调开发方法的结构合理性以及所开发软件的结构合理性。
29、软件重用是什么?
软件重用(Reuse)是指在软件开发、维护过程中不作修改或稍加修改就可以重复使用相同或相似的软件元素的过程。这些软件元素包括应用领域知识、开发经验、设计经验、体系结构、需求分析文档、设计文档、程序代码和测试用例等。对于新的软件开发项目而言,它们是构成整个软件系统的部件,或者在软件开发过程中可发挥某种作用。通常把这些软件元素称为软件构件。
30、概要设计和详细设计各任务。
概要设计和详细设计两个阶段,概要设计的任务是确定设计方案和进行软件结构设计,与此同时要进行数据库设计和制定测试计划。详细设计的任务是进行软件过程设计,系统接口设计和数据设计。
31、白盒和黑盒测试的优缺点。
白盒测试的优点:
- 高代码覆盖率:由于白盒测试关注代码的内部逻辑和结构,因此能够实现较高的代码覆盖率,有助于发现隐藏在代码深处的错误。
- 揭示隐藏问题:通过检查代码的执行路径和条件,白盒测试能够揭示一些黑盒测试难以发现的问题,如逻辑错误、死代码等。
- 提高代码质量:通过不断发现和修复问题,白盒测试有助于提高代码的质量,使代码更加健壮和可维护。
- 可定制性强:白盒测试可以根据测试需求定制测试用例,以满足特定的测试目标。
白盒测试的缺点:
- 测试成本高:白盒测试需要对代码有深入的了解,因此测试人员需要具备较高的编程和调试能力,这增加了测试的成本。
- 测试效率低:由于需要关注代码的内部逻辑和结构,白盒测试往往需要编写大量的测试用例,导致测试效率较低。
- 难以保证所有路径都被测试:在复杂的程序中,可能存在大量的执行路径和条件组合,白盒测试很难保证所有路径都被测试到。
- 可能忽略用户需求:白盒测试过于关注代码的实现细节,有时可能忽略用户的需求和期望。
黑盒测试的优点:
- 测试成本低:黑盒测试不需要关注代码的内部逻辑和结构,因此测试人员不需要具备编程和调试能力,降低了测试的成本。
- 测试效率高:黑盒测试主要关注软件的功能和性能,因此可以快速地编写和执行测试用例,提高测试效率。
- 更符合用户需求:黑盒测试主要基于用户需求和期望来设计测试用例,因此更能够反映软件的实际使用情况。
- 适用于多种场景:黑盒测试可以应用于各种场景,包括功能测试、性能测试、安全测试等。
黑盒测试的缺点:
- 代码覆盖率低:由于黑盒测试主要关注软件的功能和性能,因此很难实现较高的代码覆盖率,可能遗漏一些隐藏在代码深处的错误。
- 难以发现隐藏问题:黑盒测试主要基于输入和输出来判断软件的行为,因此很难发现一些隐藏在代码内部的问题,如逻辑错误、死代码等。
- 测试用例设计复杂:为了满足不同的测试目标和场景,黑盒测试需要设计复杂多样的测试用例,增加了测试的难度。
- 可重复性差:黑盒测试的测试结果受到测试环境和测试数据的影响较大,因此可重复性较差。
32、怎样提高软件的可维护性?
1、明确软件的质量目标;
2、利用先进的软件技术和工具;
3、选择便于维护的程序设计语言;
4、采取有效的质量保证措施;
5、完善程序的文档
看完了还不快动动你的小手一键三连!!!!