控制流分析
控制流分析()簡稱CFA,是一種確認程式控制流程的靜態代碼分析技術。控制流程會以控制流圖來表示。對於函數程式語言及物件導向程式設計,CFA都是指計算控制流程的演算法。 控制流分析一詞最早是由Neil D. Jones及Olin Shivers開始使用。 對於像是Scheme之類有高階函數的程式語言,不一定可以從程式中直接看出函數呼叫的目標,例如以下的程式片段 (lambda (f) (f x)) 根據上述程式無法確認程序f是指什麼,此情…
共 8 篇文章
控制流分析()簡稱CFA,是一種確認程式控制流程的靜態代碼分析技術。控制流程會以控制流圖來表示。對於函數程式語言及物件導向程式設計,CFA都是指計算控制流程的演算法。 控制流分析一詞最早是由Neil D. Jones及Olin Shivers開始使用。 對於像是Scheme之類有高階函數的程式語言,不一定可以從程式中直接看出函數呼叫的目標,例如以下的程式片段 (lambda (f) (f x)) 根據上述程式無法確認程序f是指什麼,此情…
增量计算(),又称增量计算法,是一种软件特性。当部分数据变化时,增量计算试图仅重新计算那些依赖于变化的数据的输出,以节省计算时间。 相比于简单地重新计算完整的输出内容,增量计算能够显著地节省计算时间。 比如,电子表格的重计算功能可能会采用增量计算的方式,只有当单元格含有的公式直接或间接依赖于发生变化的其他单元格时,该单元格才会被更新。 当一个工具能够自动地为各种不同的代码实现增量计算时,该工具可被视为一种用于优化的程序分析工具。 静态实…
在編譯器及程序設計語言理論中,一個指令的-{定義可達性}-(Reaching Definition,中國大陸譯作-{zh-hans:到达定值;zh-hant:到達定值}-)指的是一個賦值指令x = ...的效果是否可能影響到其他指令... = x。舉例來說: d1 : y := 3 d2 : x := y 在d2中,d1為定義可達性。 而在下列的範例中: d1 : y := 3 d2 : y := 4 d3 : x := y d1 在 …
符号执行()是一种计算机科学领域的程序分析技术,通过采用抽象的符号代替精确值作为程序输入变量,得出每个路径抽象的输出结果。这一技术在硬件、底层程序测试中有一定的应用,能够有效的发现程序中的漏洞。 这一思想最初由IBM托马斯·J·华森研究中心的詹姆斯·C.金(James C. King) 于1976年6月在论文Symbolic Execution and Program Testing中提出,文中“解析程序的路径后,用符号模拟通过路径并获…
軟體度量()是一個對於軟體性質及其規格的量測。軟體度量的目的是獲得客觀、可以複製及量化的量測結果,依軟體度量性質及特性的不同,可以分別應用在軟體開發的時程及預算規劃、成本估算、品質保證測試、軟體偵錯、軟體性能最佳化或專案人員配置的最佳化等領域。 舉例 源代碼行數簡稱SLOC,是最簡單的一種軟體度量,以下以包括注釋的實體源代碼行數(LOC)為準,說明軟體度量的特性及一些限制。 以下的C程式碼只有一行,其LOC為1: for (i = 0;…
靜態程序分析()是指在不執行程序的條件下,進行程序分析的方法。和要在程序執行時才能進行的是不同的。大部份的靜態程序分析的對象是針對特定版本的源代码,也有些靜態程序分析的對象是目标代码。靜態程序分析一詞多半是指配合靜態程序分析工具進行的分析,人工進行的分析一般稱為程式理解或代码审查。 靜態程序分析的複雜程度依所使用的工具而異,簡單的只考慮個別语句及声明的行為,複雜的可以分析程序的完整源代码。不同靜態程序分析技术对分析得到的資訊的用途也有所…
在计算机科学中,程序分析是指自动分析一个程序的正确性、健壮性、安全性和活跃性等特征的过程。 程序分析主要研究两大领域:和程序的正确性。前者研究如何提升程序性能并且降低程序的资源占用,后者研究如何确保程序完成预期的任务或不會發生某些異常(如空指针异常)。 程序分析可以在不执行程序的情况下进行(静态程序分析),也可在执行时进行(),或结合二者。 静态程序分析 對於程序正确性任務,静态分析可以在程序的开发阶段就发现漏洞。这些漏洞通常比测试阶段…
别名(Aliasing)是指内存中的一个数据位置可以通过程序中的多个名稱来访问。通过某一個名稱修改数据,其他别名关联的值也會改变,這是程式設計師可能不會預期到的。别名的存在使得程式的理解、分析及优化程序变得困难。别名分析可以分析处理程序中有關别名的信息。 例子 缓冲区溢出 大部份C語言的實現都不會有陣列索引的边界检查。因此,可以利用此一漏洞,寫入在陣列範圍外的資料(缓冲区溢出),根據C語言的標準,這是未定义行为,但在大部份沒有陣列索引边…