1.MISRA C 2012 标准浅析
2.主流静态代码检测工具(SAST)
3.2023年安全测试权威报告发布,源码上榜安全测试工具对比
4.软件测试入门之二十八:代码覆盖率
5.å¦ä½ä½¿ç¨coverity-scan
6.软件测试工具都有哪些?源码
MISRA C 2012 标准浅析
MISRA(The Motor Industry Software Reliability Association)是汽车工业软件可靠性联会,成立于年英国,源码旨在帮助汽车厂商开发安全可靠的源码软件。其成员包括AB汽车电子、源码罗孚汽车、源码通信达公式源码宾利汽车、源码福特汽车、源码捷豹汽车、源码路虎公司、源码Lotus公司、源码MIRA公司、源码Ricardo公司、源码TRW汽车电子、源码利兹大学和福特VISTEON汽车系统公司。源码
MISRA支持C语言标准的发展历程,MISRA C 目前已经修订多次,最新版本为AMD2,支持C标准。MISRA主要关注功能安全,而CERT C/C++则更多地关注安全威胁。MISRA C :AMD2共有条规则,其中条为规则,条为指令。指令通常无法被SAST工具检测分析。条规则中,条为强制性,条为必要规则,条为建议规则。
MISRA标准中的每一条规则都有详细的描述信息,包括类别、可判断性、支持语言标准、分析范围、规则编号和规则描述等。
标准分类:规则(Rule)和指令(Directive)的区别在于,指令是一种描述性的指导规范,无法提供执行符合性检查所需的完整描述。为了进行检查,需要提供额外的信息,如设计文件或需求说明。指令部分主要分为实现、年会屏幕抽奖源码编译与构建、要求追踪、代码设计四个部分,共条规范。规则则可以对相关要求提供完整的描述,评测人员或静态分析工具可以在不需要额外信息的情况下检查源代码是否符合对应规则。
指令:仅依靠源代码分析,无法对指令进行合规性判定,通常需要开发人员提供更多信息,如设计文档和要求说明。静态代码分析工具可以判断代码符合指令,但对于代码不符合指令的情况,代码分析工具给出的结果可能不一致。
规则:仅依靠源代码分析,就可以对规则进行判断,不需要开发人员提供更多信息,所有的静态代码检测工具都应具有对规则进行合规性判定的能力。
Category类别:Mandatory guidelines强制性的,版增加的,声明符合Misra的C代码应遵守所有强制性准则,不允许偏差。Required guidelines必须的,公司或项目可以选择将任何必须的准则视为强制性准则,不符合需要正式的偏差许可。Advisory guidelines建议的,建议性的,不符合应被记录,但是无需正式的偏差许可。
Decidability可判断性和Undecidable不可判定性:Decidable可判断的,总是能够在任何程序中使用工具确定代码是否合规,否则就是不可判定的。例如,规则.3取决于源指针和目标指针的类型是可判定的,而规则.2取决于移位运算符右侧操作数的值是不可判定的。
Analysis Scope分析范围:Single translation unit rule单一编译单元,通过隔离分析每个编译单元中的源代码,可以可靠地进行验证的代码。System rules系统级,只能通过分析整个系统中的源代码了完全检查验证。
MISRA合规对于企业的价值:MISRA是汽车行业公认的C/C++语言编码规范,符合编码规范是工会网源码ISO :-6软件功能安全开发标准的内在要求之一,开发ASIL功能安全项目必须满足,客户软件过程能力审核要求,在研发生命周期早期发现软件中的缺陷,预防成本投入会大幅度降低投产后的售后维护成本。
对于C、C++语言开发,我们关注里面包括的运行时缺陷,例如缓冲区溢出、整数溢出、数组越界、内存泄露、空指针解引用等缺陷。但是对于出海的企业,例如车企其开发软件遵守MISRA标准是必要的。这些规则虽然大多数不会导致程序崩溃,但是会给这些软件运行带来潜在的出错风险,对于可能造成重大生命财产随时的软件还是应该去遵守的。下面我们列举几个例子、说明代码不安全性主要来源。
开发者编码引入的错误;开发者对C/C++语言的误解;编译器不执行开发人员所期望的操作;编译器包含错误;运行时错误。
目前,业界对于MISRA C :ADM2支持最好的SAST工具是Coverity,支持的规则最多,检测效果最好。其次是北大Cobot,检测效果还可以。
(结束)
主流静态代码检测工具(SAST)
静态代码检测工具,简称SAST,是软件开发过程中不可或缺的分析与检查源代码的工具,旨在发现并解决潜在的缺陷、漏洞和安全风险。
自动化检测是静态代码检测工具的显著特点之一,它可以自动分析和检查源代码,无需人工逐行检查,从而提高了检测效率和准确性。
静态代码检测工具支持多种编程语言,包括但不限于Java、C/C++、Python、JavaScript等,能够满足不同项目的ethdcrminer64+源码需求。
工具能够识别代码中的潜在问题,如内存泄漏、空指针引用、未使用的变量、代码重复等,帮助开发者发现潜在的bug和优化机会。
此外,静态代码检测工具还可以检查代码的风格和规范是否符合规范,如缩进、命名规范、注释规范等,有助于开发团队保持一致的代码风格。
许多静态代码检测工具提供了可定制的配置选项,可以根据项目的特定需求进行调整,灵活地控制检测规则和行为。
部分静态代码检测工具可以与常用的集成开发环境(IDE)集成,提供实时检测和即时反馈,方便开发者在开发过程中及时发现和修复问题。
检测结果报告是静态代码检测工具的另一个重要功能,通常会包括问题的详细描述、位置和建议修复措施,并提供可视化展示,帮助开发者更直观地理解和解决问题。
以下是一些主流的静态代码检测工具:
SonarQube:这是一个开源的静态代码检测平台,支持多种编程语言,如Java、C++、C#、Python等。它能够检测代码中的潜在问题、漏洞、代码重复和代码覆盖率,并提供详细的报告和建议。
FindBugs:这是一个基于静态分析的Java代码缺陷检测工具,能够检测出代码中的潜在问题、错误和不良实践,并给出相应的修复建议。FindBugs的规则库非常丰富,并且支持自定义规则。
WuKong:这是一款国产静态代码检测工具,支持多种语言,辅助辅助平台源码如Java、C++、C#、Python、PHP等。它可以检测编码规则、缺陷及安全漏洞并给出修复建议。WuKong兼容麒麟、龙芯等国产软硬件,拥有自主知识产权,可灵活进行定制。
Coverity:Coverity支持超过种编译器(主要C/C++),可在编译不通过情况下检测,是一款针对C、C++、C#和Java等编程语言的静态代码检测工具,能够检测代码中的潜在问题、漏洞和性能问题,并给出相应的修复建议。Coverity具有高度可定制性和可扩展性。
Fortify:支持规则自定义,包括合规信息的识别。支持Java、C#、C/C++、Python、Ruby等超种语言。它更侧重于安全漏洞检测,支持规则自定义,包括合规信息的识别。Fortify通过基于规则和漏洞模式的检测引擎来分析代码,识别安全漏洞并提供相应的修复建议。
Checkmarx:Checkmarx支持多种语言,如Java、JSP、JavaScript、VBSript、C#等超种语言。它能够查找安全漏洞、质量缺陷、逻辑问题等。CxSAST无需搭建软件项目源代码的构建环境即可对代码进行数据流分析。
年安全测试权威报告发布,上榜安全测试工具对比
深入解读《Gartner 应用安全测试(AST)魔力象限报告》,揭示年度顶级安全测试工具的评估结果与特性。在领导象限中,Synopsys、Veracode、Checkmarx、OpenText、snyk分别代表了Coverity、Veracode、Checkmarx、Fortify和snyk,这五大工具引领着市场潮流。
从市场应用角度来看,Checkmarx和 Fortify在电力、金融行业表现突出,成为Java应用的首选。而Coverity在互联网领域深受青睐。Veracode则专长于军工领域,展现其专业能力。
Coverity以斯坦福大学技术为依托,能快速检测并定位可能导致产品崩溃、安全漏洞的代码缺陷。其扫描结果通过本地CLI传输至平台展示,具有高度灵活性,支持根据不同扫描目标调整参数。对于编译型语言,只需输入编译命令。
Checkmarx作为以色列高科技软件公司,提供强大的源代码缺陷识别和修复能力。支持上传代码,通过CLI启动扫描,平台化处理,规则设置更为细致,可选择高危漏洞或OWASP TOP 漏洞进行扫描。无需额外编译命令,简化了操作流程。
Fortify作为OpenText旗下产品,自年进入中国市场,成为最早布局中国市场的商用静态检查工具。它能帮助开发团队和安全专家分析源代码,检测安全漏洞,优化问题识别与优先级排序,提供解决方案。其低误报率与丰富漏洞检测类型,包括SQL注入、XSS等,为开发者提供了强有力的保障。
Veracode自年创立,致力于提升企业内部应用软件的安全性,尤其擅长二进制分析。自年进入Gartner魔力四象限以来,持续在领导者象限中竞争,与Fortify、Coverity并驾齐驱。
欲深入了解这些工具的详细对比参数,请私信我获取详情。更多内容请访问我的专栏,涵盖性能测试、安全测试、软件测试CNAS认证、功能测试与新兴技术测试。
软件测试入门之二十八:代码覆盖率
代码覆盖率是衡量测试程度的一种指标,用来评估程序源代码的覆盖情况,属于白盒测试的一种手段。它能够发现测试用例无法触及的代码部分,促使测试人员增补测试用例以提高覆盖率,进而量化代码覆盖率。在实际操作中,代码覆盖系统会收集运行程序的信息,并结合源代码信息生成测试套件的代码覆盖率报告。
使用代码覆盖率的主要原因包括但不限于以下几点:提高测试完整性,确保代码的每个部分都能被测试到;发现隐藏的缺陷和潜在的错误,有助于提高软件质量;提供测试进度的可视化反馈,便于了解测试覆盖范围。
代码覆盖方法主要有语句覆盖、判定覆盖、分支覆盖和条件覆盖等。其中,语句覆盖要求测试覆盖源代码中的所有可执行语句;判定覆盖关注每个布尔表达式的正确或错误执行情况;分支覆盖则确保来自每个分支的每个决策条件至少执行一次;条件覆盖专注于检查条件语句中的每个逻辑结果。
以一个示例说明语句覆盖计算过程:在函数“print(int a, int b)”中,若参数为A=3,B=9,则执行的语句覆盖率为%;若参数为A=-3,B=-9,则覆盖率为%。通过不同参数的测试,可以确保所有语句至少被执行一次。
判定覆盖示例在函数“Demo(int a)”中,若参数为A=2,则判定覆盖率%,若参数为A=6,则判定覆盖率仍为%。这说明在不同输入情况下,每个判定结果至少执行了一次。
分支覆盖示例在函数“Demo(int a)”中,考虑参数A>5的情况,分支覆盖确保了每个分支结果至少执行一次,这有助于评估代码段的独立性。
条件覆盖在评估逻辑条件时,关注每个条件的单个结果,相比判定覆盖对控制流有更高敏感性。
代码覆盖率与功能覆盖率紧密相关,前者关注代码层面的覆盖,后者侧重于功能层面的测试,两者相辅相成,共同提高软件测试的全面性和有效性。
重要代码覆盖率工具有:JaCoCo、Cobertura、Coverity、Coveralls等。它们提供自动化测试覆盖率报告,便于分析和优化测试策略。
代码覆盖率的优势包括提高代码质量、加速问题定位、提升测试效率、促进团队协作等。然而,也存在一些缺点,如可能导致过量的测试、覆盖度量的主观性、难以平衡测试效率与覆盖率等。
å¦ä½ä½¿ç¨coverity-scan
ããä¸ãå åæ³æ¼çæ£æ¥æ¹æ³ï¼
ãã1.ccmallocï¼LinuxåSolarisä¸å¯¹CåC++ç¨åºçç®åç使ç¨å åæ³æ¼åmallocè°è¯åºã
ãã2.Dmallocï¼Debug Malloc Library.
ãã3.Electric Fenceï¼Linuxååçä¸ç±Bruce Perensç¼åçmalloc()è°è¯åºã
ãã4.Leakyï¼Linuxä¸æ£æµå åæ³æ¼çç¨åºã
ãã5.LeakTracerï¼LinuxãSolarisåHP-UXä¸è·è¸ªååæC++ç¨åºä¸çå åæ³æ¼ã
ãã6.MEMWATCHï¼ç±Johan Lindhç¼åï¼æ¯ä¸ä¸ªå¼æ¾æºä»£ç Cè¯è¨å åé误æ£æµå·¥å ·ï¼ä¸»è¦æ¯éè¿gccçprecessoræ¥è¿è¡ã
软件测试工具都有哪些?
在软件开发与测试领域,一系列高效的工具支撑着测试流程的高效执行与质量保证。根据不同需求,测试工具主要可以分为以下几类:
一、测试管理工具
在测试管理工具方面,团队可以通过其进行用例的维护、测试计划的建立、用例的执行和生成测试报告等操作。具体工具有:
1、Jira:知名且广泛使用的项目管理工具,支持从需求到测试的全流程管理。
2、TestRail:专为测试团队设计,提供灵活的测试计划、执行和报告功能。
二、接口测试工具
对于接口测试,有如下推荐工具:
1、JMeter:开源,适用于性能测试,内存占用小,免费且易于使用。
2、Postman:谷歌开发的接口测试插件,支持用例管理、变量管理等,适合API测试。
三、性能测试工具
性能测试工具涵盖多种类型,包括:
1、LoadRunner:全面且强大,需深入学习,适合负载和压力测试。
2、JMeter:基于Java的开源性能测试工具,易于上手且功能强大。
四、C/S自动化工具
此类工具如QTP和WinRunner,用于录制和编辑脚本,支持VB语言,适合复杂场景的自动化测试。
五、白盒测试工具
白盒测试工具聚焦于代码层的测试,包括:
1、JTest:Java语言的单元测试框架。
2、JUnit:验证Java代码的高效工具。
六、代码扫描工具
用于静态代码分析,包括:
1、Coverity:源代码静态分析工具。
2、cppcheck:c++静态扫描工具。
七、持续集成工具
用于自动化构建和测试,如Jenkins和Hudson。
八、网络测试工具
网络测试工具包括思博伦、Ixia等,用于性能和压力测试。
九、app自动化工具
app自动化测试框架包括Appium、Instruments、uiautomator、Monkey等。
十、web安全测试工具
针对web安全测试,可选择AppScan、Netsparker、Websecurify等。
以上工具是软件测试流程中不可或缺的部分,帮助团队实现高效的测试执行、性能评估与安全性保障。
2024-12-22 21:01
2024-12-22 20:47
2024-12-22 20:31
2024-12-22 19:33
2024-12-22 19:15
2024-12-22 18:35