<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.3 20210610//EN" "JATS-journalpublishing1-3.dtd">
<article article-type="research-article" dtd-version="1.3" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="ru"><front><journal-meta><journal-id journal-id-type="publisher-id">mais</journal-id><journal-title-group><journal-title xml:lang="ru">Моделирование и анализ информационных систем</journal-title><trans-title-group xml:lang="en"><trans-title>Modeling and Analysis of Information Systems</trans-title></trans-title-group></journal-title-group><issn pub-type="ppub">1818-1015</issn><issn pub-type="epub">2313-5417</issn><publisher><publisher-name>Yaroslavl State University</publisher-name></publisher></journal-meta><article-meta><article-id custom-type="elpub" pub-id-type="custom">mais-1099</article-id><article-categories><subj-group subj-group-type="heading"><subject>Research Article</subject></subj-group><subj-group subj-group-type="section-heading" xml:lang="ru"><subject>Оригинальные статьи</subject></subj-group><subj-group subj-group-type="section-heading" xml:lang="en"><subject>Articles</subject></subj-group></article-categories><title-group><article-title>Использование зависимостей для повышения точности статического анализа программ</article-title><trans-title-group xml:lang="en"><trans-title>The Use of Dependencies for Improving the Precision
of Program Static Analysis</trans-title></trans-title-group></title-group><contrib-group><contrib contrib-type="author" corresp="yes"><name-alternatives><name name-style="eastern" xml:lang="ru"><surname>Глухих</surname><given-names>Михаил Игоревич</given-names></name><name name-style="western" xml:lang="en"><surname>Glukhikh</surname><given-names>M. I.</given-names></name></name-alternatives><email xlink:type="simple">glukhikh@kspt.ftk.spbstu.ru</email><xref ref-type="aff" rid="aff-1"/></contrib><contrib contrib-type="author" corresp="yes"><name-alternatives><name name-style="eastern" xml:lang="ru"><surname>Ицыксон</surname><given-names>Владимир Михайлович</given-names></name><name name-style="western" xml:lang="en"><surname>Itsykson</surname><given-names>V. M.</given-names></name></name-alternatives><email xlink:type="simple">vlad@ftk.spbstu.ru</email><xref ref-type="aff" rid="aff-1"/></contrib><contrib contrib-type="author" corresp="yes"><name-alternatives><name name-style="eastern" xml:lang="ru"><surname>Цесько</surname><given-names>Вадим Александрович</given-names></name><name name-style="western" xml:lang="en"><surname>Tsesko</surname><given-names>V. A.</given-names></name></name-alternatives><email xlink:type="simple">tsesko@kspt.ftk.spbstu.ru</email><xref ref-type="aff" rid="aff-1"/></contrib></contrib-group><aff xml:lang="ru" id="aff-1"><institution>Санкт-Петербургский государственный политехнический университет</institution><country>Russian Federation</country></aff><pub-date pub-type="collection"><year>2011</year></pub-date><pub-date pub-type="epub"><day>20</day><month>12</month><year>2011</year></pub-date><volume>18</volume><issue>4</issue><fpage>68</fpage><lpage>79</lpage><permissions><copyright-statement>Copyright &amp;#x00A9; Глухих М.И., Ицыксон В.М., Цесько В.А., 2011</copyright-statement><copyright-year>2011</copyright-year><copyright-holder xml:lang="ru">Глухих М.И., Ицыксон В.М., Цесько В.А.</copyright-holder><copyright-holder xml:lang="en">Glukhikh M.I., Itsykson V.M., Tsesko V.A.</copyright-holder><license xml:lang="ru" license-type="creative-commons-attribution" xlink:href="https://creativecommons.org/licenses/by/4.0/" xlink:type="simple"><license-p>Данная работа распространяется под лицензией Creative Commons Attribution 4.0.</license-p></license><license xml:lang="en" license-type="creative-commons-attribution" xlink:href="https://creativecommons.org/licenses/by/4.0/" xlink:type="simple"><license-p>This work is licensed under a Creative Commons Attribution 4.0 License.</license-p></license></permissions><self-uri xlink:href="https://www.mais-journal.ru/jour/article/view/1099">https://www.mais-journal.ru/jour/article/view/1099</self-uri><abstract><p>Статья посвящена разработке методов анализа зависимостей с целью повышения точности статического анализа. Рассмотрены причины, ведущие к снижению точности абстрактной интерпретации при обнаружении дефектов в программном коде. На различных примерах показана необходимость выявления и интерпретации зависимостей между программными объектами в ходе анализа. Приведена классификация зависимостей по различным признакам. Показана необходимость совокупного рассмотрения хранимых значений и зависимостей. Описан порядок выявления зависимостей при интерпретации присваиваний. Предложен метод интерпретации зависимостей на основе логического вывода, базирующегося на известных правилах логики и арифметики. Некоторые из разработанных методов реализованы в средстве обнаружения дефектов Digitek Aegis, показано значительное увеличение точности анализа.</p></abstract><trans-abstract xml:lang="en"><p>The development of dependency analysis methods in order to improve static code analysis precision is considered in this paper. Reasons for precision loss is abstract interpretation methods when detecting defects in program source code are explained. The need for program object dependency extraction and interpretation is justified by numerous real-world examples. A dependency classification is presented. The necessity for aggregate analysis of values and dependencies is considered. The dependency extraction from assignment statements is described. The dependency interpretation based on logic inference using logic and arithmetic rules is proposed. The methods proposed are implemented in defect detection tool Digitek Aegis and significant increase of precision is shown.</p></trans-abstract><kwd-group xml:lang="ru"><kwd>статический анализ</kwd><kwd>абстрактная интерпретация</kwd><kwd>анализ зависимостей</kwd><kwd>обнаружение программных дефектов</kwd></kwd-group><kwd-group xml:lang="en"><kwd>static analysis</kwd><kwd>abstract interpretation</kwd><kwd>dependency analysis</kwd><kwd>program defect detection</kwd></kwd-group></article-meta></front><back><ref-list><title>References</title><ref id="cit1"><label>1</label><citation-alternatives><mixed-citation xml:lang="ru">Zhivich M., Cunningham R. The Real Cost of Software Errors. IEEE Security &amp; Privacy // IEEE Computer Society. 2009. Vol. 7, № 2.</mixed-citation><mixed-citation xml:lang="en">Zhivich M., Cunningham R. The Real Cost of Software Errors. IEEE Security &amp; Privacy // IEEE Computer Society. 2009. Vol. 7, № 2.</mixed-citation></citation-alternatives></ref><ref id="cit2"><label>2</label><citation-alternatives><mixed-citation xml:lang="ru">Nielson F., Nielson N., Hankin C. Principles of Program Analysis. Corr. 2nd printing. Springer, 2005. XXI. 452 p.</mixed-citation><mixed-citation xml:lang="en">Nielson F., Nielson N., Hankin C. Principles of Program Analysis. Corr. 2nd printing. Springer, 2005. XXI. 452 p.</mixed-citation></citation-alternatives></ref><ref id="cit3"><label>3</label><citation-alternatives><mixed-citation xml:lang="ru">Cousot P. Abstract Interpretation. ACM Computing Surveys (CSUR) // ACM, New York, 1996. Vol. 28, Issue 2. P. 324-328.</mixed-citation><mixed-citation xml:lang="en">Cousot P. Abstract Interpretation. ACM Computing Surveys (CSUR) // ACM, New York, 1996. Vol. 28, Issue 2. P. 324-328.</mixed-citation></citation-alternatives></ref><ref id="cit4"><label>4</label><citation-alternatives><mixed-citation xml:lang="ru">Jones N., Nielson F. Abstract Interpretation: A Semantic-based Tool for Program Analysis. Handbook of logic in computer science (vol. 4): semantic modeling. Oxford: Oxford University Press, 1995. P. 527-636.</mixed-citation><mixed-citation xml:lang="en">Jones N., Nielson F. Abstract Interpretation: A Semantic-based Tool for Program Analysis. Handbook of logic in computer science (vol. 4): semantic modeling. Oxford: Oxford University Press, 1995. P. 527-636.</mixed-citation></citation-alternatives></ref><ref id="cit5"><label>5</label><citation-alternatives><mixed-citation xml:lang="ru">Несов В. С., Маликов О. Р. Использование информации о линейных зависимостях для обнаружения уязвимостей в исходном коде программ // Труды ИСП РАН. 2006. №9. С. 51-57.</mixed-citation><mixed-citation xml:lang="en">Несов В. С., Маликов О. Р. Использование информации о линейных зависимостях для обнаружения уязвимостей в исходном коде программ // Труды ИСП РАН. 2006. №9. С. 51-57.</mixed-citation></citation-alternatives></ref><ref id="cit6"><label>6</label><citation-alternatives><mixed-citation xml:lang="ru">Cousot P., Halbwachs N. Automatic discovery of linear restraints among variables of a program // Proceedings of the 5th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL '78). ACM, New York, 1978. P. 8496.</mixed-citation><mixed-citation xml:lang="en">Cousot P., Halbwachs N. Automatic discovery of linear restraints among variables of a program // Proceedings of the 5th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL '78). ACM, New York, 1978. P. 8496.</mixed-citation></citation-alternatives></ref><ref id="cit7"><label>7</label><citation-alternatives><mixed-citation xml:lang="ru">Code Analysis for C/C++ Overview, Microsoft Corporation. &lt;http://msdn.microsoft.com/en-us/library/d3bbz7tz.aspx&gt;</mixed-citation><mixed-citation xml:lang="en">Code Analysis for C/C++ Overview, Microsoft Corporation. &lt;http://msdn.microsoft.com/en-us/library/d3bbz7tz.aspx&gt;</mixed-citation></citation-alternatives></ref><ref id="cit8"><label>8</label><citation-alternatives><mixed-citation xml:lang="ru">Frama-C Software Analyzers. &lt;http://frama-c.com&gt;</mixed-citation><mixed-citation xml:lang="en">Frama-C Software Analyzers. &lt;http://frama-c.com&gt;</mixed-citation></citation-alternatives></ref><ref id="cit9"><label>9</label><citation-alternatives><mixed-citation xml:lang="ru">Splint home page. &lt;http://www.splint.org&gt;</mixed-citation><mixed-citation xml:lang="en">Splint home page. &lt;http://www.splint.org&gt;</mixed-citation></citation-alternatives></ref><ref id="cit10"><label>10</label><citation-alternatives><mixed-citation xml:lang="ru">Fortify Software. &lt;http://www.fortify.com&gt;</mixed-citation><mixed-citation xml:lang="en">Fortify Software. &lt;http://www.fortify.com&gt;</mixed-citation></citation-alternatives></ref><ref id="cit11"><label>11</label><citation-alternatives><mixed-citation xml:lang="ru">Ицыксон В.М., Моисеев М. Ю., Цесько В. А., Карпенко А. В. Исследование систем автоматизации обнаружения дефектов в исходном коде программного обеспечения // Научно-технические ведомости СПбГПУ. Информатика. Телекоммуникации. Управление. 2008. №5(65). C. 119-127.</mixed-citation><mixed-citation xml:lang="en">Ицыксон В.М., Моисеев М. Ю., Цесько В. А., Карпенко А. В. Исследование систем автоматизации обнаружения дефектов в исходном коде программного обеспечения // Научно-технические ведомости СПбГПУ. Информатика. Телекоммуникации. Управление. 2008. №5(65). C. 119-127.</mixed-citation></citation-alternatives></ref><ref id="cit12"><label>12</label><citation-alternatives><mixed-citation xml:lang="ru">Schwartzbach M. Lecture Notes on Static Analysis. Aarhus, 2000. 58 p.</mixed-citation><mixed-citation xml:lang="en">Schwartzbach M. Lecture Notes on Static Analysis. Aarhus, 2000. 58 p.</mixed-citation></citation-alternatives></ref><ref id="cit13"><label>13</label><citation-alternatives><mixed-citation xml:lang="ru">Aegis - a defect detection system. &lt;http://www.digiteklabs.ru/aegis&gt;</mixed-citation><mixed-citation xml:lang="en">Aegis - a defect detection system. &lt;http://www.digiteklabs.ru/aegis&gt;</mixed-citation></citation-alternatives></ref><ref id="cit14"><label>14</label><citation-alternatives><mixed-citation xml:lang="ru">Ицыксон В. М., Моисеев М. Ю., Цесько В. А., Захаров А. В., Ахин М.Х. Алгоритм интервального анализа для обнаружения дефектов в исходном коде программ // Информационные и управляющие системы. 2009. №2 (39). C. 3441.</mixed-citation><mixed-citation xml:lang="en">Ицыксон В. М., Моисеев М. Ю., Цесько В. А., Захаров А. В., Ахин М.Х. Алгоритм интервального анализа для обнаружения дефектов в исходном коде программ // Информационные и управляющие системы. 2009. №2 (39). C. 3441.</mixed-citation></citation-alternatives></ref><ref id="cit15"><label>15</label><citation-alternatives><mixed-citation xml:lang="ru">Ицыксон В. М., Моисеев М. Ю., Ахин М.Х., Захаров А. В., Цесько В. А. Алгоритмы анализа указателей для обнаружения дефектов в исходном коде // Системное программирование. 2009. C. 5-30.</mixed-citation><mixed-citation xml:lang="en">Ицыксон В. М., Моисеев М. Ю., Ахин М.Х., Захаров А. В., Цесько В. А. Алгоритмы анализа указателей для обнаружения дефектов в исходном коде // Системное программирование. 2009. C. 5-30.</mixed-citation></citation-alternatives></ref><ref id="cit16"><label>16</label><citation-alternatives><mixed-citation xml:lang="ru">Bush W., Pincus J., Sielaff D. A static analyzer for finding dynamic programming errors // Software: Practice and Experience. Vol. 30, iss. 7 (June 2000). John Wiley &amp; Sons, Inc. NY, USA. P. 775-802.</mixed-citation><mixed-citation xml:lang="en">Bush W., Pincus J., Sielaff D. A static analyzer for finding dynamic programming errors // Software: Practice and Experience. Vol. 30, iss. 7 (June 2000). John Wiley &amp; Sons, Inc. NY, USA. P. 775-802.</mixed-citation></citation-alternatives></ref><ref id="cit17"><label>17</label><citation-alternatives><mixed-citation xml:lang="ru">Wang A., Fei H., Gu M., Song X. Verifying Java Programs By Theorem Prover HOL // Proceedings of the 30th Annual International Computer Software and Applications Conference. Vol. 01. IEEE Computer Society Washington DC, USA 2006. P. 139-142.</mixed-citation><mixed-citation xml:lang="en">Wang A., Fei H., Gu M., Song X. Verifying Java Programs By Theorem Prover HOL // Proceedings of the 30th Annual International Computer Software and Applications Conference. Vol. 01. IEEE Computer Society Washington DC, USA 2006. P. 139-142.</mixed-citation></citation-alternatives></ref><ref id="cit18"><label>18</label><citation-alternatives><mixed-citation xml:lang="ru">HOL 4 Kananaskis 6. &lt;http://hol.sourceforge.net&gt;</mixed-citation><mixed-citation xml:lang="en">HOL 4 Kananaskis 6. &lt;http://hol.sourceforge.net&gt;</mixed-citation></citation-alternatives></ref><ref id="cit19"><label>19</label><citation-alternatives><mixed-citation xml:lang="ru">WHY - a software verification platform. &lt;http://why.lri.fr&gt;</mixed-citation><mixed-citation xml:lang="en">WHY - a software verification platform. &lt;http://why.lri.fr&gt;</mixed-citation></citation-alternatives></ref><ref id="cit20"><label>20</label><citation-alternatives><mixed-citation xml:lang="ru">Steensgaard B. Points-to analysis in almost linear time // Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, USA, 1996. P. 32-41.</mixed-citation><mixed-citation xml:lang="en">Steensgaard B. Points-to analysis in almost linear time // Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, USA, 1996. P. 32-41.</mixed-citation></citation-alternatives></ref><ref id="cit21"><label>21</label><citation-alternatives><mixed-citation xml:lang="ru">Avots D., Dalton M., Livshits V., Lam M. Improving software security with a C pointer analysis // Proceedings of the 27th international conference on Software engineering. New York, USA, 2005. P. 332-341.</mixed-citation><mixed-citation xml:lang="en">Avots D., Dalton M., Livshits V., Lam M. Improving software security with a C pointer analysis // Proceedings of the 27th international conference on Software engineering. New York, USA, 2005. P. 332-341.</mixed-citation></citation-alternatives></ref><ref id="cit22"><label>22</label><citation-alternatives><mixed-citation xml:lang="ru">VCC. &lt;http://vcc.codeplex.com&gt;</mixed-citation><mixed-citation xml:lang="en">VCC. &lt;http://vcc.codeplex.com&gt;</mixed-citation></citation-alternatives></ref><ref id="cit23"><label>23</label><citation-alternatives><mixed-citation xml:lang="ru">Z3. &lt;http://research.microsoft.com/en-us/um/redmond/projects/z3&gt;</mixed-citation><mixed-citation xml:lang="en">Z3. &lt;http://research.microsoft.com/en-us/um/redmond/projects/z3&gt;</mixed-citation></citation-alternatives></ref><ref id="cit24"><label>24</label><citation-alternatives><mixed-citation xml:lang="ru">SMT-LIB. &lt;http://www.smtlib.org&gt;</mixed-citation><mixed-citation xml:lang="en">SMT-LIB. &lt;http://www.smtlib.org&gt;</mixed-citation></citation-alternatives></ref></ref-list><fn-group><fn fn-type="conflict"><p>The authors declare that there are no conflicts of interest present.</p></fn></fn-group></back></article>
