代码覆盖率度量规范书_第1页
代码覆盖率度量规范书_第2页
代码覆盖率度量规范书_第3页
代码覆盖率度量规范书_第4页
代码覆盖率度量规范书_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

代码覆盖率度量规范书一、代码覆盖率的定义与核心价值代码覆盖率是软件测试领域中用于衡量测试用例对代码执行程度的关键指标,它通过统计代码中被测试用例执行到的语句、分支、函数等元素的比例,来评估测试工作的完整性和有效性。在现代软件开发流程中,代码覆盖率已经从一个辅助性的测试指标,逐渐演变为保障软件质量、降低维护成本、提升开发效率的核心手段。从质量保障角度来看,代码覆盖率能够直观地反映出测试工作的盲区。在实际开发过程中,开发人员往往会将主要精力集中在核心功能的测试上,而容易忽略一些边缘场景、异常分支和错误处理代码。通过代码覆盖率工具的统计,可以清晰地看到哪些代码块从未被测试用例执行过,从而有针对性地补充测试用例,确保软件的每一个功能模块都能得到充分验证。例如,在一个电商系统的订单支付模块中,开发人员可能会重点测试正常支付流程,但对于支付失败、超时、重复支付等异常场景的测试可能不够充分。通过代码覆盖率分析,就可以发现这些未被覆盖的异常处理代码,及时补充相应的测试用例,避免在实际使用过程中出现严重的功能故障。从成本控制角度来看,代码覆盖率能够帮助开发团队在早期发现潜在的代码缺陷,降低后期修复成本。研究表明,软件缺陷发现的时间越晚,修复成本就越高。在编码阶段通过代码覆盖率分析发现的缺陷,修复成本可能只有在上线后发现的几十分之一。此外,高代码覆盖率还可以减少因代码变更而引入新缺陷的风险。当开发人员对代码进行修改时,如果有足够的测试用例覆盖被修改的代码区域,就可以快速验证修改是否引入了新的问题,从而提高代码变更的安全性和可靠性。从团队协作角度来看,代码覆盖率可以作为开发团队和测试团队之间沟通的桥梁。开发人员可以通过代码覆盖率了解测试工作的进展和重点,测试人员也可以根据代码覆盖率的结果向开发人员提出针对性的测试需求。同时,代码覆盖率还可以作为团队绩效考核的一个参考指标,激励开发人员和测试人员共同提高软件质量。二、代码覆盖率的主要度量维度(一)语句覆盖率(StatementCoverage)语句覆盖率是最基础、最常用的代码覆盖率度量维度,它衡量的是测试用例执行到的代码语句占总代码语句的比例。语句覆盖率的计算方式相对简单,只需要统计被执行的语句数量和总语句数量,然后用被执行的语句数量除以总语句数量即可得到语句覆盖率的百分比。语句覆盖率的优点是计算简单、直观易懂,能够快速反映出测试用例对代码的基本覆盖情况。例如,在一个包含100条代码语句的函数中,如果测试用例执行了80条语句,那么语句覆盖率就是80%。通过语句覆盖率,开发人员可以快速了解测试用例是否覆盖了函数的主要逻辑。然而,语句覆盖率也存在一定的局限性。它只能反映出代码语句是否被执行,而无法反映出代码的逻辑分支是否被完全覆盖。例如,在一个包含if-else分支的代码块中,即使测试用例执行了if分支和else分支的所有语句,但如果没有覆盖到分支的判断条件,那么语句覆盖率可能是100%,但实际上代码的逻辑并没有得到充分测试。因此,语句覆盖率通常需要与其他覆盖率维度结合使用,才能更全面地评估测试工作的有效性。(二)分支覆盖率(BranchCoverage)分支覆盖率也称为判定覆盖率,它衡量的是测试用例执行到的代码分支占总代码分支的比例。在代码中,每一个if-else、switch-case等条件判断语句都会产生两个或多个分支,分支覆盖率就是统计这些分支中被执行到的分支数量占总分支数量的比例。分支覆盖率相比语句覆盖率更能反映出代码的逻辑覆盖情况。例如,在一个包含if-else分支的代码块中,语句覆盖率可能已经达到100%,但如果测试用例只执行了if分支,而没有执行else分支,那么分支覆盖率只有50%。通过分支覆盖率分析,就可以发现这种逻辑上的测试盲区,及时补充相应的测试用例,确保代码的每一个分支都能得到充分验证。分支覆盖率的计算方式也相对简单,只需要统计被执行的分支数量和总分支数量,然后用被执行的分支数量除以总分支数量即可得到分支覆盖率的百分比。在实际应用中,分支覆盖率通常被作为衡量测试工作有效性的重要指标之一,很多软件项目都会要求分支覆盖率达到一定的标准,例如80%以上。(三)条件覆盖率(ConditionCoverage)条件覆盖率衡量的是测试用例执行到的代码条件判断中的条件表达式的真假情况的比例。在一个条件判断语句中,可能包含多个条件表达式,条件覆盖率就是统计这些条件表达式中被取到真和假的情况的数量占总条件表达式数量的比例。条件覆盖率相比分支覆盖率更细致,它能够反映出条件判断语句中每一个条件表达式的执行情况。例如,在一个包含两个条件表达式的if语句中,if(a>0&&b<0),分支覆盖率只需要覆盖if分支和else分支即可达到100%,但条件覆盖率需要覆盖a>0为真、a>0为假、b<0为真、b<0为假四种情况,才能达到100%的条件覆盖率。条件覆盖率的计算方式相对复杂一些,需要对每一个条件表达式的真假情况进行统计。在实际应用中,条件覆盖率通常用于对一些关键的条件判断语句进行深入分析,确保每一个条件表达式都能得到充分的测试。然而,条件覆盖率也存在一定的局限性,它只能反映出条件表达式的真假情况,而无法反映出条件表达式之间的组合逻辑。例如,在一个包含多个条件表达式的if语句中,即使每一个条件表达式的真假情况都被覆盖到了,但如果没有覆盖到这些条件表达式的所有组合情况,那么代码的逻辑仍然可能存在漏洞。(四)路径覆盖率(PathCoverage)路径覆盖率是最全面、最严格的代码覆盖率度量维度,它衡量的是测试用例执行到的代码路径占总代码路径的比例。代码路径是指从代码的入口到出口的一条执行路径,每一个不同的条件判断组合都会产生不同的代码路径。路径覆盖率能够反映出代码的所有可能执行路径的覆盖情况,确保代码的每一种逻辑组合都能得到充分测试。例如,在一个包含两个if-else分支的代码块中,总共有4种可能的代码路径,路径覆盖率就是统计测试用例执行到的路径数量占总路径数量的比例。如果测试用例执行了所有4种路径,那么路径覆盖率就是100%。然而,路径覆盖率的计算成本非常高,尤其是在复杂的代码模块中,代码路径的数量可能会呈指数级增长。例如,在一个包含10个if-else分支的代码块中,总共有2^10=1024种可能的代码路径。要达到100%的路径覆盖率,需要编写大量的测试用例,这在实际项目中往往是不现实的。因此,路径覆盖率通常只用于对一些关键的核心模块进行分析,或者在对代码进行安全性、可靠性要求极高的场景中使用。(五)函数覆盖率(FunctionCoverage)函数覆盖率衡量的是测试用例执行到的函数占总函数的比例。它统计的是被测试用例调用的函数数量占项目中总函数数量的比例。函数覆盖率能够反映出测试用例对项目中各个函数的覆盖情况,帮助开发人员了解哪些函数还没有被测试用例调用过。函数覆盖率的计算方式相对简单,只需要统计被调用的函数数量和总函数数量,然后用被调用的函数数量除以总函数数量即可得到函数覆盖率的百分比。例如,在一个包含100个函数的项目中,如果测试用例调用了80个函数,那么函数覆盖率就是80%。函数覆盖率通常用于对项目的整体测试情况进行宏观评估,了解测试用例是否覆盖了项目的主要功能模块。然而,函数覆盖率也存在一定的局限性,它只能反映出函数是否被调用,而无法反映出函数内部的代码执行情况。即使一个函数被测试用例调用了,但如果函数内部的某些代码分支没有被执行到,那么函数覆盖率仍然是100%,但实际上函数的逻辑并没有得到充分测试。因此,函数覆盖率通常需要与其他覆盖率维度结合使用,才能更全面地评估测试工作的有效性。三、代码覆盖率度量的流程与方法(一)确定度量目标与范围在进行代码覆盖率度量之前,首先需要明确度量的目标和范围。度量目标应该与项目的质量目标和测试策略相一致,例如,是为了评估测试工作的完整性,还是为了发现代码中的潜在缺陷,或者是为了监控代码变更对测试覆盖率的影响。度量范围则需要根据项目的实际情况进行确定,包括需要覆盖的代码模块、功能模块、代码版本等。一般来说,度量范围可以分为整个项目、单个模块、单个功能或者单个代码文件等。在确定度量范围时,需要考虑到项目的规模、复杂度、时间和资源等因素,确保度量工作具有可操作性和实际意义。例如,在一个大型的电商系统项目中,度量范围可以先从核心功能模块开始,如订单管理、支付管理、商品管理等,然后逐步扩展到其他辅助功能模块。在每个功能模块中,又可以进一步细化到具体的代码文件和函数,确保度量工作能够深入到代码的每一个细节。(二)选择合适的代码覆盖率工具选择合适的代码覆盖率工具是确保度量工作准确性和效率的关键。目前,市场上有很多成熟的代码覆盖率工具,不同的工具适用于不同的编程语言、开发环境和测试场景。对于Java语言,常用的代码覆盖率工具包括JaCoCo、Cobertura等。JaCoCo是一个开源的代码覆盖率工具,它支持多种测试框架和构建工具,能够提供全面的代码覆盖率分析报告,包括语句覆盖率、分支覆盖率、条件覆盖率等多种维度。Cobertura也是一个开源的代码覆盖率工具,它使用简单,能够快速生成代码覆盖率报告,但在功能上相对JaCoCo来说可能稍逊一筹。对于Python语言,常用的代码覆盖率工具包括Coverage.py、pytest-cov等。Coverage.py是一个非常流行的代码覆盖率工具,它能够与Python的unittest、pytest等测试框架无缝集成,提供详细的代码覆盖率统计信息。pytest-cov则是pytest测试框架的一个插件,它能够在运行pytest测试用例的同时,自动生成代码覆盖率报告。对于C++语言,常用的代码覆盖率工具包括Gcov、LCOV等。Gcov是GCC编译器自带的一个代码覆盖率工具,它能够生成原始的代码覆盖率数据,然后通过LCOV工具将这些数据转换为可视化的HTML报告。在选择代码覆盖率工具时,需要考虑以下几个因素:编程语言支持:确保工具支持项目所使用的编程语言。集成能力:工具是否能够与项目所使用的开发环境、测试框架和构建工具无缝集成。功能丰富性:工具是否能够提供全面的代码覆盖率分析报告,包括多种度量维度和详细的统计信息。易用性:工具的使用是否简单方便,是否能够快速生成准确的代码覆盖率报告。性能:工具在运行过程中是否会对测试用例的执行效率产生较大影响。(三)集成代码覆盖率工具到开发流程选择好代码覆盖率工具后,需要将其集成到项目的开发流程中,确保代码覆盖率分析能够与日常的开发和测试工作无缝衔接。在集成过程中,首先需要配置代码覆盖率工具的参数,包括需要覆盖的代码范围、输出报告的格式和路径等。然后,将代码覆盖率工具与项目的构建工具(如Maven、Gradle、Make等)集成,确保在构建项目的同时能够自动生成代码覆盖率数据。例如,在使用Maven构建Java项目时,可以通过在pom.xml文件中添加JaCoCo插件的配置,实现在运行测试用例的同时自动生成代码覆盖率数据。此外,还需要将代码覆盖率工具与项目的持续集成(CI)系统集成,确保每次代码提交都能自动触发代码覆盖率分析,并生成相应的报告。例如,在使用Jenkins作为CI系统时,可以通过安装JaCoCo插件,配置代码覆盖率分析任务,实现每次代码提交后自动运行测试用例并生成代码覆盖率报告。(四)编写测试用例并执行在完成代码覆盖率工具的集成后,就可以开始编写测试用例并执行测试了。测试用例的编写应该根据项目的需求规格说明书和代码的逻辑结构进行,确保测试用例能够覆盖代码的主要功能模块和逻辑分支。在编写测试用例时,需要注意以下几个原则:全面性:测试用例应该覆盖代码的所有功能模块和逻辑分支,包括正常场景和异常场景。独立性:每个测试用例应该独立执行,不依赖于其他测试用例的执行结果。可重复性:测试用例应该能够重复执行,每次执行的结果应该一致。可维护性:测试用例的编写应该具有良好的可读性和可维护性,便于后续的修改和扩展。在执行测试用例时,代码覆盖率工具会自动统计测试用例对代码的覆盖情况,并生成相应的覆盖率数据。这些数据可以以原始数据文件的形式保存,也可以直接生成可视化的报告。(五)分析代码覆盖率报告测试用例执行完成后,需要对代码覆盖率工具生成的报告进行深入分析。代码覆盖率报告通常会包含多种度量维度的统计信息,如语句覆盖率、分支覆盖率、条件覆盖率等,以及未被覆盖的代码语句、分支、函数等详细信息。在分析代码覆盖率报告时,需要重点关注以下几个方面:覆盖率指标:查看各种覆盖率指标是否达到了项目的预期目标。如果覆盖率指标较低,需要分析原因,是测试用例编写不充分,还是代码本身存在问题。未被覆盖的代码区域:仔细查看未被覆盖的代码语句、分支、函数等,分析这些代码区域的功能和重要性。对于一些关键的核心代码区域,如果未被测试用例覆盖,需要及时补充相应的测试用例。代码变更影响:如果是在代码变更后进行的代码覆盖率分析,需要查看被变更的代码区域的覆盖率情况,确保代码变更没有引入新的测试盲区。趋势分析:将本次代码覆盖率报告与历史报告进行对比,分析覆盖率指标的变化趋势。如果覆盖率指标呈下降趋势,需要及时找出原因并采取相应的措施。(六)优化测试用例与代码根据代码覆盖率报告的分析结果,需要对测试用例和代码进行优化。对于未被覆盖的代码区域,需要补充相应的测试用例,确保这些代码区域能够得到充分测试。对于一些冗余的、无用的代码,可以考虑进行删除或重构,提高代码的质量和可维护性。在优化测试用例时,需要注意以下几个方面:针对性:补充的测试用例应该针对未被覆盖的代码区域,确保能够覆盖到相应的逻辑分支和语句。有效性:测试用例应该能够有效地发现代码中的潜在缺陷,而不仅仅是为了提高覆盖率指标。简洁性:测试用例的编写应该简洁明了,避免编写过于复杂或冗余的测试用例。在优化代码时,需要注意以下几个方面:可读性:代码的编写应该具有良好的可读性,便于开发人员理解和维护。可维护性:代码的结构应该清晰,模块化程度高,便于后续的修改和扩展。性能:代码的执行效率应该高,避免出现性能瓶颈。四、代码覆盖率度量的最佳实践与注意事项(一)设定合理的覆盖率目标在项目中设定合理的代码覆盖率目标是非常重要的。覆盖率目标过高可能会导致测试工作的成本大幅增加,而覆盖率目标过低则无法有效保障软件质量。因此,需要根据项目的实际情况,综合考虑项目的规模、复杂度、质量要求、时间和资源等因素,设定一个合理的覆盖率目标。一般来说,对于一些核心的功能模块和关键的代码区域,可以设定较高的覆盖率目标,例如语句覆盖率达到90%以上,分支覆盖率达到80%以上。对于一些辅助功能模块和非关键的代码区域,可以适当降低覆盖率目标,例如语句覆盖率达到70%以上,分支覆盖率达到60%以上。此外,覆盖率目标还应该根据项目的发展阶段进行动态调整。在项目的初期阶段,由于代码还在不断迭代和完善,覆盖率目标可以适当低一些,重点关注核心功能模块的覆盖情况。随着项目的推进,代码逐渐稳定,可以逐步提高覆盖率目标,确保软件的每一个功能模块都能得到充分测试。(二)避免过度追求覆盖率虽然代码覆盖率是衡量测试工作有效性的重要指标,但过度追求覆盖率可能会导致一些负面影响。例如,开发人员可能会为了提高覆盖率指标,编写一些没有实际意义的测试用例,这些测试用例虽然能够提高覆盖率,但并不能有效地发现代码中的潜在缺陷。此外,过度追求覆盖率还可能会导致测试工作的重心偏离,忽略了对软件功能的实际验证。因此,在代码覆盖率度量过程中,需要保持理性和客观,避免过度追求覆盖率指标。应该将代码覆盖率作为一个辅助性的工具,结合其他测试方法和手段,共同保障软件质量。例如,可以结合人工评审、性能测试、安全测试等多种测试方法,对软件进行全面的验证。(三)关注覆盖率的质量而非数量在分析代码覆盖率报告时,不仅要关注覆盖率的数量指标,还要关注覆盖率的质量。也就是说,不仅要确保测试用例覆盖了足够多的代码区域,还要确保这些测试用例能够有效地发现代码中的潜在缺陷。例如,在一个包含if-else分支的代码块中,即使测试用例覆盖了if分支和else分支,达到了100%的分支覆盖率,但如果测试用例没有覆盖到分支的边界条件和异常情况,那么这些测试用例的质量仍然不高。因此,在编写测试用例时,需要注重测试用例的设计质量,确保测试用例能够覆盖到代码的各种边界条件、异常情况和复杂逻辑。(四)结合静态代码分析工具代码覆盖率度量主要关注的是测试用例对代码的执行情况,而静态代码分析工具则可以在不执行代码的情况下,对代码的语法、结构、复杂度等进行分析,发现代码中的潜在缺陷和质量问题。将代码覆盖率度量与静态代码分析工具结合使用,可以更全面地评估软件质量。静态代码分析工具可以帮助开发人员在编码阶段发现一些常见的代码缺陷,例如未初始化的变量、空指针引用、数组越界等。这些缺陷如果在编码阶段没有被发现,可能会在测试阶段甚至上线后引发严重的功能故障。通过静态代码分析工具,可以提前发现这些缺陷,及时进行修复,提高代码的质量和可靠性。例如,在使用SonarQube静态代码分析工具时,它可以对代码的复杂度、重复度、规范度等进行评估,并提供详细的代码质量报告。开发人员可以根据这些报告,对代码进行优化和重构,提高代码的可维护性和可读性。(五)定期进行覆盖率度量与分析代码覆盖率度量不是一次性的工作,而是一个持续的过程。在项目的整个生命周期中,需要定期进行代码覆盖率度量与分析,及时发现测试工作中的盲区和代码中的潜在缺陷。一般来说,可以在每次代码提交、每次版本发布或者每个迭代周期结束后,进行一次代码覆盖率度量与分析。通过定期的度量与分析,可以跟踪代码覆盖率的变化趋势,及时发现覆盖率指标下降的原因,并采取相应的措施进行改进。此外,定期的代码覆盖率度量与分析还可以帮助开发团队了解测试工作的进展和效果,评估测试策略的有效性。如果发现测试策略存在问题,可以及时进行调整和优化,确保测试工作能够达到预期的目标。(六)加强团队培训与沟通代码覆盖率度量工作的顺利开展,离不开开发团队和测试团队的密切配合和协作。因此,需要加强团队成员的培训与沟通,提高团队成员对代码覆盖率的认识和理解。在培训方面,可以组织相关的技术讲座和培训课程,向团队成员介绍代码覆盖率的概念、度量方法、工具使用等知识。同时,可以通过实际案例分析,让团队成员了解代码覆盖率在项目中的应用价值和实际效果。在沟通方面,需要建立良好的团队沟通机制,确保开发人员和测试人员之间能够及时交流测试工作的进展和问题。开发人员可以向测试人员提供代码的逻辑结构和功能说明,帮助测试人员更好地编写测试用例。测试人员也可以向开发人员反馈代码覆盖率的分析结果,提出针对性的测试需求和改进建议。五、代码覆盖率度量的常见问题与解决方案(一)覆盖率数据不准确在实际应用中,可能会出现代码覆盖率数据不准确的情况。例如,代码覆盖率工具统计的覆盖率指标与实际情况不符,或者未被覆盖的代码区域实际上已经被测试用例执行过。造成覆盖率数据不准确的原因可能有以下几个方面:工具配置错误:代码覆盖率工具的参数配置不正确,例如需要覆盖的代码范围设置错误,或者输出报告的格式设置错误。代码混淆或加密:如果代码经过了混淆或加密处理,代码覆盖率工具可能无法正确识别代码的结构和语句,导致覆盖率数据不准确。动态生成代码:如果代码中包含动态生成的代码,例如通过反射、动态代理等方式生成的代码,代码覆盖率工具可能无法统计这些代码的覆盖情况。测试用例执行异常:测试用例在执行过程中出现异常,导致部分代码没有被正常执行,但代码覆盖率工具仍然统计为已覆盖。针对覆盖率数据不准确的问题,可以采取以下解决方案:检查工具配置:仔细检查代码覆盖率工具的参数配置,确保需要覆盖的代码范围、输出报告的格式等设置正确。处理代码混淆或加密:如果代码经过了混淆或加密处理,可以在测试环境中使用未混淆或未加密的代码进行测试,或者使用支持混淆代码的代码覆盖率工具。手动统计动态生成代码的覆盖情况:对于动态生成的代码,可以通过手动编写测试用例或者使用专门的工具来统计其覆盖情况。检查测试用例执行结果:仔细检查测试用例的执行结果,确保测试用例能够正常执行,没有出现异常情况。如果测试用例执行异常,需要及时修复测试用例,重新执行测试。(二)覆盖率提升困难在一些复杂的项目中,可能会出现覆盖率提升困难的情况。即使开发人员编写了大量的测试用例,代码覆盖率指标仍然无法达到预期目标。造成覆盖率提升困难的原因可能有以下几个方面:代码复杂度高:代码的逻辑结构过于复杂,包含大量的分支、循环和嵌套,导致测试用例的编写难度较大,难以覆盖所有的代码路径。依赖外部资源:代码依赖于外部资源,例如数据库、网络服务、文件系统等,这些外部资源的状态和行为可能会影响测试用例的执行结果,导致部分代码无法被正常覆盖。时间和资源限制:项目的时间和资源有限,开发人员无法投入足够的精力来编写大量的测试用例。测试用例设计不合理:测试用例的设计不合理,没有覆盖到代码的所有边界条件和异常情况,导致部分代码无法被测试用例执行到。针对覆盖率提升困难的问题,可以采取以下解决方案:重构代码:对复杂度较高的代码进行重构,简化代码的逻辑结构,减少分支、循环和嵌套的数量,提高代码的可测试性。使用测试替身:对于依赖外部资源的代码,可以使用测试替身(如Mock对象、Stub对象等)来模拟外部资源的行为,确保测试用例能够独立执行,覆盖到所有的代码区域。合理分配时间和资源:根据项目的优先级和重要性,合理分配时间和资源,优先保障核心功能模块的测试工作。优化测试用例设计:重新审视测试用例的设计,确保测试用例能够覆盖到代码的所有边界条件、异常情况和复杂逻辑。可以采用等价类划分、边界值分析、错误推测等测试用例设计方法,提高测试用例的有效性。(三)覆盖率与软件质量不成正比在一些项目中,可能会出现代码覆盖率很高,但软件质量仍然不高的情况。也就是说,虽然测试用例覆盖了大部分代码区域,但软件仍然存在很多缺陷和问题。造成覆盖率与软件质量不成正比的原因可能有以下几个方面:测试用例质量低:测试用例虽然覆盖了很多代码区域,但这些测试用例的质量不高,无法有效地发现代码中的潜在缺陷。例如,测试用例只覆盖了正常场景,而没有覆盖到异常场景和边界条件。代码本身存在设计缺陷:代码的设计存在问题,例如架构不合理、模块之间的耦合度过高、代码重复度高等,这些问题无法通过提高代码覆盖率来解决。缺乏其他测试手段:仅仅依靠代码覆盖率度量来保障软件质量是不够的,还需要结合其他测试手段,如人工评审、性能测试、安全测试等,对软件进行全面的验证。需求变更频繁:项目的需求变更频繁,导致代码不断迭代和修改,即使测试用例覆盖了当前的代码版本,但在需求变更后,代码可能会引入新的缺陷和问题。针对覆盖率与软件质量不成正比的问题,可以采取以下解决方案:提高测试用例质量:加强测试用例的设计和评审,确保测试用例能够覆盖到代码的所有边界条件、异常情况和复杂逻辑,提高测试用例的有效性。优化代码设计:对代码的设计进行优化,采用合理的架构设计模式,降低模块之间的耦合度,提高代码的可维护性和可扩展性。结合

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论