Статический анализ программного кода: методы и уровни
Static program analysis
Статический анализ программ: исследование кода без запуска. Автоматизированные инструменты, повышение качества ПО, оценка и понимание программного обеспечения.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Анализ компьютерных программ без их выполнения
Analysis of computer programs without executing them
В информатике статический анализ программ (также известный как статический анализ или статическое моделирование) — это анализ компьютерных программ, выполняемый без их запуска, в отличие от динамического анализа программ, который выполняется во время работы программ в интегрированной среде. Этот термин обычно применяется к анализу, выполняемому автоматизированным инструментом, в то время как анализ, проводимый человеком, обычно называют "изучением программы", пониманием программы или ревью кода. В последнем случае также используются инспекция программного обеспечения и прохождение кода. В большинстве случаев анализ выполняется на некоторой версии исходного кода программы, а в других случаях — на некоторой форме её объектного кода.
In computer science, static program analysis (also known as static analysis or static simulation) is the analysis of computer programs performed without executing them, in contrast with dynamic program analysis, which is performed on programs during their execution in the integrated environment. The term is usually applied to analysis performed by an automated tool, with human analysis typically being called "program understanding", program comprehension, or code review. In the last of these, software inspection and software walkthroughs are also used. In most cases the analysis is performed on some version of a program's source code, and, in other cases, on some form of its object code.
Типы инструментов
OMG (Object Management Group) опубликовала исследование, касающееся типов анализа программного обеспечения, необходимых для измерения и оценки его качества. В этом документе под названием "Как создавать отказоустойчивые, безопасные, эффективные и легко изменяемые ИТ-системы в соответствии с рекомендациями CISQ" описываются три уровня анализа программного обеспечения. Анализ на уровне модуля, который выполняется внутри конкретной программы или подпрограммы, без учета контекста этой программы. Анализ технологического уровня, учитывающий взаимодействие между модулями программ для получения более целостного и семантического представления о программе в целом, с целью выявления проблем и избежания ложных срабатываний. Анализ на уровне системы, учитывающий взаимодействие между модулями программ, но не ограничивающийся конкретной технологией или языком программирования. Можно выделить и дополнительный уровень анализа программного обеспечения – анализ на уровне миссии/бизнеса, который учитывает термины, правила и процессы, относящиеся к бизнес-целям или задачам миссии, реализованные в программной системе для обеспечения ее функционирования в рамках деятельности предприятия или программы/миссии. Эти элементы реализуются без привязки к конкретной технологии или языку программирования и во многих случаях распределены между несколькими языками, однако они статически извлекаются и анализируются для понимания системы и обеспечения ее надежности.
The OMG (Object Management Group) published a study regarding the types of software analysis required for software quality measurement and assessment. This document on "How to Deliver Resilient, Secure, Efficient, and Easily Changed IT Systems in Line with CISQ Recommendations" describes three levels of software analysis. Unit Level Analysis that takes place within a specific program or subroutine, without connecting to the context of that program. Technology Level Analysis that takes into account interactions between unit programs to get a more holistic and semantic view of the overall program in order to find issues and avoid obvious false positives. System Level Analysis that takes into account the interactions between unit programs, but without being limited to one specific technology or programming language. A further level of software analysis can be defined. Mission/Business Level Analysis that takes into account the business/mission layer terms, rules and processes that are implemented within the software system for its operation as part of enterprise or program/mission layer activities. These elements are implemented without being limited to one specific technology or programming language and in many cases are distributed across multiple languages, but are statically extracted and analyzed for system understanding for mission assurance.
Статический анализ на основе данных
Статический анализ, основанный на данных, использует большие объемы кода для выведения правил кодирования. Например, можно использовать все Java-пакеты с открытым исходным кодом на GitHub для изучения эффективной стратегии анализа. Для выведения правил могут применяться методы машинного обучения. Также возможно обучение на большом количестве прошлых исправлений и предупреждений.
Data driven static analysis uses large amounts of code to infer coding rules. For instance, one can use all Java open source packages on GitHub to learn a good analysis strategy. The rule inference can use machine learning techniques. It is also possible to learn from a large amount of past fixes and warnings.