1.代码测试工具Fortify介绍及实操演示(下)
2.全面梳理:准确率,精确率,召回率,查准率,查全率,假阳性,真阳性,PRC,ROC,AUC,F1
3.iphone4如何升级越狱苹果4越狱教程
4.arm-linux-gcc å arm-elf-gcc çåºå«
代码测试工具Fortify介绍及实操演示(下)
Fortify是一款在代码审计中广泛应用的静态代码分析工具,尤其在金融等行业中受到青睐。它是软件开发组织及专业评测机构构建软件测试体系时的常用安全测试工具。在前面的文章中,我们已经介绍了Fortify的最新功能和通过“Audit Workbench”模式测试Java语言源代码的方法。接下来,源码安装mysql详情本文将继续介绍通过“Scan Wizard”模式和命令行进行测试的操作流程。
通过“Scan Wizard”进行测试
“Scan Wizard”支持多种语言或框架的源代码测试,包括Java、Python、C/C++、.Net、Go、PHP、Flex、Action Script、HTML、XML、JavaScript、TypeScript、Kotlin、SQL、防英雄联盟源码ABAP、ColdFusion。
(1)打开Scan Wizard
(2)选择Python文件所在目录
(3)确认测试工具自动识别内容
(4)选择库文件
(5)生成脚本文件
(6)完成脚本文件生成
(7)执行生成的脚本文件
通过命令行进行测试
命令行方式支持各语言源代码的测试。
一、Linux项目测试
以Linux下C/C++程序代码测试为例:
1. 代码编译
在代码测试执行前,首先需要进行C/C++程序代码的编译,如下面的示例:
gcc -I. -o hello.o -c helloworld.c
通过gcc编译器将代码进行编译。
2. 代码测试
在代码编译后,使用sourceanalyzer命令进行代码文件测试。
sourceanalyzer -b gcc -I. -o hello.o -c helloworld.c
3. 代码扫描结果文件生成
在代码测试后,使用sourceanalyzer命令进行代码文件扫描及结果文件生成。
sourceanalyzer -b -scan -f hello.fpr
其中,本命令中的与第2步命令中的相同。成功生成结果文件后,可以基于该结果文件生成测试报告。
4. 代码扫描结果文件生成
二、iOS项目测试
1. iOS项目测试条件
(1) iOS项目需要使用non-fragile Objective-C runtime模式(ABI version 2或3)
(2) 使用Apple “xcode-select command-line tool”设置Xcode path,同时供Fortify使用。
(3) 确保项目相关依赖库文件已经包含在项目中。
(4) 针对Swift代码,确保所有第三方模块都已经被包含,合伙公司软件源码包括Cocoapods。
(5) 如果项目中包含二进制的属性列表文件,需要将它们转化为XML格式,通过Xcode的putil命令进行转换。
(6) 针对Objective-C项目,需要保证头文件能够被获取。
(7) 针对WatchKit应用,需要同时转化iPhone应用和WatchKit扩展目标。
2. iOS代码测试执行
sourceanalyzer -b xcodebuild []
测试报告生成
通过“Scan Wizard”生成测试报告
通过“Scan Wizard”方式进行测试执行,会生成.fpr测试结果文件,然后通过命令行方式基于测试结果文件生成测试报告文件。
通过命令行生成测试报告
通过“Scan Wizard”方式或命令行方式生成测试结果文件后,可以基于“ReportGenerator”命令生成测试报告。
下面示例中,基于.fpr结果文件生成PDF格式的测试报告。
ReportGenerator -format pdf -f.pdf -source .fpr
.pdf为命名的PDF格式测试报告名称,.fpr为测试结果文件名称。
以上就是我们为大家介绍的Fortify不同模式下的使用操作流程,欢迎大家交流讨论。如需其他软件测试体系建设相关的内容可私信我交流。
(谢绝转载,地铁5站源码更多内容可查看我的专栏)
相关链接:
@道普云 持续输出软件测试技术、软件测试团队建设、软件测评实验室认可等内容。不断更新中,欢迎交流探讨。
我的专栏:
性能测试 工具、方法、流程、诊断、调优......
安全测试 app安全测试、web安全测试、渗透测试、代码测试
软件测试CNAS认证 标准解读、政策分析、体系建设、测试方法、测试工具
功能测试 功能自动化测试、自动化测试工具、测试用例、缺陷管理
新兴技术测试 人工智能系统测试、大数据系统测试、游戏红包版源码自动化测试...
全面梳理:准确率,精确率,召回率,查准率,查全率,假阳性,真阳性,PRC,ROC,AUC,F1
二分类问题的结果有四种:
逻辑在于,你的预测是positive-1和negative-0,true和false描述你本次预测的对错
true positive-TP:预测为1,预测正确即实际1
false positive-FP:预测为1,预测错误即实际0
true negative-TN:预测为0,预测正确即实际0
false negative-FN:预测为0,预测错误即实际1
混淆矩阵
直观呈现以上四种情况的样本数
准确率accuracy
正确分类的样本/总样本:(TP+TN)/(ALL)
在不平衡分类问题中难以准确度量:比如%的正样本只需全部预测为正即可获得%准确率
精确率查准率precision
TP/(TP+FP):在你预测为1的样本中实际为1的概率
查准率在检索系统中:检出的相关文献与检出的全部文献的百分比,衡量检索的信噪比
召回率查全率recall
TP/(TP+FN):在实际为1的样本中你预测为1的概率
查全率在检索系统中:检出的相关文献与全部相关文献的百分比,衡量检索的覆盖率
实际的二分类中,positive-1标签可以代表健康也可以代表生病,但一般作为positive-1的指标指的是你更关注的样本表现,比如“是垃圾邮件”“是阳性肿瘤”“将要发生地震”。
因此在肿瘤判断和地震预测等场景:
要求模型有更高的召回率recall,是个地震你就都得给我揪出来不能放过
在垃圾邮件判断等场景:
要求模型有更高的精确率precision,你给我放进回收站里的可都得确定是垃圾,千万不能有正常邮件啊
ROC
常被用来评价一个二值分类器的优劣
ROC曲线的横坐标为false positive rate(FPR):FP/(FP+TN)
假阳性率,即实际无病,但根据筛检被判为有病的百分比。
在实际为0的样本中你预测为1的概率
纵坐标为true positive rate(TPR):TP/(TP+FN)
真阳性率,即实际有病,但根据筛检被判为有病的百分比。
在实际为1的样本中你预测为1的概率,此处即召回率查全率recall
接下来我们考虑ROC曲线图中的四个点和一条线。
第一个点,(0,1),即FPR=0,TPR=1,这意味着无病的没有被误判,有病的都全部检测到,这是一个完美的分类器,它将所有的样本都正确分类。
第二个点,(1,0),即FPR=1,TPR=0,类似地分析可以发现这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。
第三个点,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,没病的没有被误判但有病的全都没被检测到,即全部选0
类似的,第四个点(1,1),分类器实际上预测所有的样本都为1。
经过以上的分析可得到:ROC曲线越接近左上角,该分类器的性能越好。
ROC是如何画出来的
分类器有概率输出,%常被作为阈值点,但基于不同的场景,可以通过控制概率输出的阈值来改变预测的标签,这样不同的阈值会得到不同的FPR和TPR。
从0%-%之间选取任意细度的阈值分别获得FPR和TPR,对应在图中,得到的ROC曲线,阈值的细度控制了曲线的阶梯程度或平滑程度。
一个没有过拟合的二分类器的ROC应该是梯度均匀的,如图紫线
ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。而Precision-Recall曲线会变化剧烈,故ROC经常被使用。
AUC
AUC(Area Under Curve)被定义为ROC曲线下的面积,完全随机的二分类器的AUC为0.5,虽然在不同的阈值下有不同的FPR和TPR,但相对面积更大,更靠近左上角的曲线代表着一个更加稳健的二分类器。
同时针对每一个分类器的ROC曲线,又能找到一个最佳的概率切分点使得自己关注的指标达到最佳水平。
AUC的排序本质
大部分分类器的输出是概率输出,如果要计算准确率,需要先把概率转化成类别,就需要手动设置一个阈值,而这个超参数的确定会对优化指标的计算产生过于敏感的影响
AUC从Mann–Whitney U statistic的角度来解释:随机从标签为1和标签为0的样本集中分别随机选择两个样本,同时分类器会输出两样本为1的概率,那么我们认为分类器对“标签1样本的预测概率>对标签0样本的预测概率 ”的概率等价于AUC。
因而AUC反应的是分类器对样本的排序能力,这样也可以理解AUC对不平衡样本不敏感的原因了。
作为优化目标的各类指标
最常用的分类器优化及评价指标是AUC和logloss,最主要的原因是:不同于accuracy,precision等,这两个指标不需要将概率输出转化为类别,而是可以直接使用概率进行计算。
顺便贴上logloss的公式
F1
F1兼顾了分类模型的准确率和召回率,可以看作是模型准确率和召回率的调和平均数,最大值是1,最小值是0。
额外补充AUC为优化目标的模型融合手段rank_avg:
在拍拍贷风控比赛中,印象中一个前排队伍基于AUC的排序本质,使用rank_avg融合了最后的几个基础模型。
rank_avg这种融合方法适合排序评估指标,比如auc之类的
其中weight_i为该模型权重,权重为1表示平均融合
rank_i表示样本的升序排名 ,也就是越靠前的样本融合后也越靠前
能较快的利用排名融合多个模型之间的差异,而不用去加权样本的概率值融合
贴一段源码:
M为正类样本的数目,N为负类样本的数目,rank为分类器给出的排名。
可以发现整个计算过程中连直接的概率输出值都不需要,仅关心相对排名,所以只要保证submit的那一组输出的rank是有意义的即可,并不一定需要必须输出概率。
iphone4如何升级越狱苹果4越狱教程
iphone4如何升级越狱,苹果4越狱教程很多人还不知道,现在让我们一起来看看吧!1、iphone4越狱后如何安装软件?很多买了iphone4的朋友会越狱,但是越狱后会有一个问题:越狱后如何给iphone4安装软件?
2、iphone4越狱后如何安装软件:
3、一、iphone4越狱后安装软件,首先要安装AppSync补丁:
4、安装补丁的方法非常简单。打开Cydia,点击下方的管理,然后点击右上角的编辑,再点击左侧的添加。这时会出现如下界面。输入monly used with uClinux. uC-libc and
uClibc. They are quite different despite their similar names. Here is a
quick overview of how they are different.
ããuC-libc is the original library for uClinux. It was based on sources
from the Linux- C library which was part of the ELKs project with m
support added by Jeff Dionne and Kenneth Albanowski. It is a fairly complete
libc implementation, however, some of the API's are a little non-standard
and quite a few common libc routines are not present. Currently it has
stable support for m, ColdFire and ARM (Non-MMU) architectures. It was
primary design goal is to be small and light weight. It does try to conform
to any standards, although its API tries to be compatible with most libcs,
it is not always exactly the same.
ããThe uClinux distribution provides an environment that can compile using
either uC-libc or uClibc depending on your needs. For m and Coldfire
platforms it is generally better to chose uC-libc as it supports shared
libraries and is the most commonly used libc for these CPUs. uClibc also
works quite well with almost all platforms supported by the distribution.
Which libc you choose to use will be decided by your requirements
uClinuxæ两个ç»å¸¸ä½¿ç¨çlibcåºï¼uC-libcåuClibcãè½ç¶ä¸¤è ååå¾ç¸ä¼¼ï¼å ¶å®æå·®
å«ï¼ä¸é¢å°±ç®åçä»ç»ä¸ä¸äºè çä¸åä¹å¤ãuC -libcæ¯ææ©ä¸ºuClinuxå¼åçåºï¼æ¯
Jeff DionneåKenneth Albanowski为å¨EKLs项ç®ä¸æ¯æmå¨Linux- Cåºæºç
ä¸ç§»æ¤çãuC-libcæ¯ä¸ä¸ªå®å ¨çlibcå®ç°ï¼ä½å ¶ä¸æä¸äºapiæ¯éæ åçï¼æäºlibcç
æ åä¹æ²¡æå®ç°ãuC-libc稳å®å°æ¯æ mï¼ColdFireå没æMMUçARMãå ¶ä¸»è¦è®¾è®¡
ç®æ æ¯âå°âã"è½»"ï¼å¹¶å°½éä¸æ åä¸è´ï¼è½ç¶å®çAPIåå¾å¤libcå ¼å®¹ï¼ä½æ¯ä¼¼ä¹å¹¶
ä¸åå®ææçé£æ ·åæææ åä¸è´ã
uClibcå°±æ¯ä¸ºäºè§£å³è¿ä¸ªé®é¢ä»uC-libcä¸åå±åºæ¥çãå®çææAPIé½æ¯æ åç(æ£ç¡®
çè¿åç±»åï¼åæ°çç)ï¼å®å¼¥è¡¥äºuC-libcä¸æ²¡æå®ç°çlibcæ åï¼ç°å¨å·²ç»è¢«ç§»æ¤å°
å¤ç§æ¶æä¸ãä¸è¬æ¥è®²ï¼å®å°½éå ¼å®¹glibc以便使åºç¨ç¨åºç¨uClibcæ¹ååç容æã
uClibcè½å¤å¨æ åç VM linuxåuClinuxä¸é¢ä½¿ç¨ã为äºåºç¨ç¨åºçç®æ´ï¼å®çè³å¯ä»¥
å¨è®¸å¤æ¯æMMUçå¹³å°ä¸è¢«ç¼è¯æå ±äº«åºãErik Andersonå¨uClibcèååäºå¾å¤çå·¥
ä½ãuClibcæ¯æ许å¤ç³»åçå¤çå¨ï¼mï¼Coldfireï¼ARMï¼MIPSï¼vï¼ xï¼
iï¼Sparcï¼SuperHï¼Alphaï¼PowerPCåHitachi 8ãä¸æå¢å çå¹³å°æ¯ææ¾ç¤ºuClibc
è½å¤å¾å®¹æçéåºæ°çæ¶æãuClinuxåè¡çæä¾äºç¯å¢è½å¤è®©ä½ éæ©ä½¿ç¨uC-libcææ¯
uClibcç¼è¯ã对äºmåColdfireå¹³å°æ¥è¯´ï¼éæ©uC-libcè¿æ¯ç¨å¾®å¥½ä¸ç¹ï¼å 为å®
æ¯æå ±äº«åºï¼èå ±äº«åºæ¯è¿äºcpuç»å¸¸ä½¿ç¨ç libc.uClibcä¹å ä¹åææçå¹³å°é½è½å¾
好çå·¥ä½ãéæ©åªç§libcåå³äºä½ çéæ±ã
newlib æ¯ä¸ä¸ªç¨äºåµå ¥å¼ç³»ç»çå¼æ¾æºä»£ç çCè¯è¨ç¨åºåºï¼ç±libcålibm两个åºç»
æï¼ç¹ç¹æ¯è½»é级ï¼é度快ï¼å¯ç§»æ¤å°å¾å¤CPUç»æä¸ãnewlibå®ç°äºè®¸å¤å¤æçå
è½ï¼å æ¬å符串æ¯æï¼æµ®ç¹è¿ç®ï¼å ååé (å¦malloc)åI/Oæµå½æ°(printfï¼fprinf()
çç)ãå ¶ä¸libcæä¾äºc è¯è¨åºçå®ç°ï¼èlibmæä¾äºæµ®ç¹è¿ç®æ¯æã
å¨ä¸ºARM交åç¼è¯gccç¼è¯å¨æ¶ï¼å¯¹gccæå®ä¸åçé ç½®é项æ¶ï¼ä½¿ç¨çCè¯è¨åºå°±ä¸åï¼
gccç¼è¯å¨é»è®¤ä½¿ç¨Glibcï¼ä¹å¯ä»¥ä½¿ç¨ uClibc/uC-libc(åºæ¬å ¼å®¹Glibc API)ï¼å½ä½¿ç¨
--with-newlibæ¶ï¼gccç¼è¯å¨ä¸ä½¿ç¨Glibcãå½æ²¡æ交åç¼è¯Glibcæ¶ï¼å¯ä»¥ä½¿ç¨
--with-newlibç¦æ¢è¿æ¥Glibcèç¼è¯bootstrap gccç¼è¯å¨ãä»gccæºç®å½ä¸ç
config/armä¸çt-linuxåt-arm-elfä¸å¯ä»¥çåºï¼ä¸åç--targetä¹å½±ågccè¿æ¥Cè¯è¨
åºï¼t-linux(--target=arm-linux)é»è®¤ä½¿ç¨Glibcï¼-arm-elf(--target=arm-elf)使ç¨
- Dinhibit_libcç¦æ¢è¿æ¥Glibcï¼è¿æ¶æ们就å¯ä»¥ä½¿ç¨newlibçå ¶ä»Cè¯è¨åºç¼è¯GCCå·¥
å ·é¾ã
è½ç¶GCCå·¥å ·é¾é ç½®äºä¸åççCè¯è¨åºï¼ä½ç±äºè¿äºCè¯è¨åºé½å¯ä»¥ç¨æ¥æ¯æGCCï¼å®ä»¬
å¯¹æ ¸å¿æ°æ®çå¤çä¸ä¸åå¨è¾å¤§åºå ¥ãå èarm-linux-* å arm-elf-*åºå«ä¸»è¦è¡¨ç°å¨
Cè¯è¨åºçå®ç°ä¸ï¼ä¾å¦ä¸åç³»ç»è°ç¨ï¼ä¸åçå½æ°éå®ç°ï¼ä¸åçABI\å¯å¨ä»£ç 以å
ä¸åç³»ç»ç¹æ§çå¾®å°çå·®å«ã
arm-linux-*å arm-elf-*ç使ç¨æ²¡æä¸ä¸ªç»å¯¹çæ åï¼æé¤ä¸ååºå®ç°çå·®å¼ï¼gccå¯
以ç¼è¯ä»»ä½ç³»ç»ãarm-linux-*å arm-elf-*é½å¯ä»¥ç¨æ¥ç¼è¯è£¸æºç¨åºåæä½ç³»ç»ï¼åª
æ¯å¨éµå¾ªä¸é¢çæè¿°æ¶ç³»ç»ç¨åºæ¾å¾æ´å åè°ï¼
arm-linux-*é对è¿è¡linuxçARMæºå¨ï¼å ¶ä¾èµäºæå®çCè¯è¨åºGlibcï¼å 为åæ ·ä½¿ç¨
Glibcçlinuxè使å¾arm-linux-*å¨è¿è¡linuxçARMæºå¨ä¸ç¼è¯æ¾å¾æ´å åè°ã
arm-elf-*åæ¯ä¸ä¸ªç¬ç«çç¼è¯ä½ç³»ï¼ä¸ä¾èµäºæå®çCè¯è¨åºGlibcï¼å¯ä»¥ä½¿ç¨newlib
çå ¶ä»Cè¯è¨åºï¼ä¸è¦æ±æä½ç³»ç»æ¯æï¼å½å ¶ä½¿ç¨ä¸ºåµå ¥å¼ç³»ç»è设计çä¸äºè½»å·§çCè¯
è¨åºæ¶ç¼è¯è£¸æºç¨åº(没ælinuxç大åæä½ç³»ç»çç¨åº)ï¼å¦çæ§ç¨åºï¼bootloaderç
è½ä½¿å¾ç³»ç»ç¨åºæ´å å°å·§å¿«æ·ã
Linaro prebuilt toolchain does support both hard and soft floating
point. You can get it from /linaro-toolchain-binaries/+milestone/. try: ./arm-linux-gnueabihf-gcc -print-multi-lib
The default configure is --with-arch=armv7-a --with-tune=cortex-a9
--with-fpu=vfpv3-d --with-float=hard --with-mode=thumb
To use soft floating, you need options: -marm -march=armv4t -mfloat-abi=soft.
In your case, please try to change -march=armv5 to "-march=armv4t"
If you want to change to configure to cortex-a8 and armv5. You need
* Change cortex-a9 to cortex-a8 in
samples/linaro-arm-linux-gnueabihf/crosstool.config
* Change armv4t to armv5 in
contrib/linaro/patches/gcc/linaro-4.7-./multilib.patch,
Then follow the instructions to rebuild the toolchain
(contrib/linaro/doc/README.txt)
BTW: crosstool-ng-linaro does not support multilib for eglibc. It uses
the prebuilt sysroot from Ubuntu Precise. If it does not work for you,
please use the latest crosstool-ng from http://crosstool-ng.org/.