Preview

Труды Института системного программирования РАН

Расширенный поиск

Подход к обнаружению ошибок несоответствия типов в коде на динамических языках программирования

Аннотация

Статья посвящена обнаружению дефектов в коде, написанном на динамических языках программирования. Производится обзор статических анализаторов программ на языках Python, Ruby и JavaScript. Показывается, что большинство существующих средств не в состоянии обнаруживать целый класс дефектов: ошибки несоответствия типов. Даётся определение таких ошибок, приводятся данные о том, что они весьма распространены, а также критичны по мнению разработчиков программ. Предлагается подход к выводу типов для динамических языков, а также к реализации обнаружителей дефектов на его основе. Вводится понятие трассы дефекта, описывается построение такой трассы.

Об авторе

И. Е. Бронштейн
ИСП РАН
Россия


Список литературы

1. L. D. Paulson. Developers shift to dynamic programming languages. IEEE Computer, vol. 40, issue 2, February 2007, pp. 12–15.

2. Бронштейн И. Е. Вывод типовдля языка Python. ТрудыИнститута системного программирования РАН, том 24, 2013, стр. 161–190.

3. TIOBE Programming Community Index for August 2013: http://tinyurl.com/tiobe-201308

4. Савицкий В. О., Сидоров Д. В. Инкрементальный анализ исходного кода на языках C/C++. ТрудыИнститута системногопрограммирования РАН, том 22, 2012, стр. 119—129.

5. Аветисян Арутюн, БелеванцевАндрей, Бородин Алексей, Несов Владимир. Использование статического анализа для поиска уязвимостей и критических ошибок в исходном коде программ. Труды Институтасистемного программирования РАН, том 21, 2011, стр. 23–38.

6. Pyflakes: https://launchpad.net/pyflakes

7. Pylint - code analysis for Python: http://www.pylint.org

8. reek: https://github.com/troessner/reek

9. ruby-lint: http://code.yorickpeterse.com/ruby-lint/latest

10. JSLint: http://www.jslint.com

11. JSHint, a JavaScript Code Quality Tool: http://www.jshint.com

12. PEP 8 – Style Guide for Python Code: http://www.python.org/dev/peps/pep-0008

13. R. Chillarege, I. Bhandari, J. Chaar, M. Halliday, D. Moebus, B. Ray, M. Y. Wong. Orthogonal Defect Classification — A Concept of In-Process Measurements (1992).

14. W. Humprey. A discipline for software engineering (1997). 82

15. M. Reingart. Rad2py: Plataforma de Trabajo para el Desarrollo Rápido de Aplicaciones bajo un Proceso de Software Personal, pp. 152–153: http://code.google.com/p/rad2py/wiki/DefectTypeStandard

16. Bugs : Exaile: https://bugs.launchpad.net/exaile

17. Bugs : calibre: https://bugs.launchpad.net/calibre

18. sqlalchemy: http://www.sqlalchemy.org/trac

19. Bugs : Bazaar: https://bugs.launchpad.net/bzr

20. Twisted: http://twistedmatrix.com/trac

21. The Trac Project: http://trac.edgewall.org

22. Django: https://code.djangoproject.com

23. DRuby - Home: http://www.cs.umd.edu/projects/PL/druby

24. Type Analysis for JavaScript: http://www.brics.dk/TAJS

25. Michael Furr, Jong-hoon (David) An, Jeffrey S. Foster, Michael Hicks. Static type inference for Ruby. SAC ’09 Proceedings of the 2009 ACM symposium on Applied Computing, pp. 1859–1866.

26. jruby-parser: https://github.com/jruby/jruby-parser

27. esprima: https://github.com/ariya/esprima

28. tirpan: https://github.com/bronikkk/tirpan

29. Gramps Bug Report 005023: http://www.gramps-project.org/bugs/view.php?id=5023


Рецензия

Для цитирования:


Бронштейн И.Е. Подход к обнаружению ошибок несоответствия типов в коде на динамических языках программирования. Труды Института системного программирования РАН. 2013;25:67-84.

For citation:


Bronshteyn I.E. Approach to detecting types inconsistency errors in a program code in dynamic languages. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2013;25:67-84. (In Russ.)



Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


ISSN 2079-8156 (Print)
ISSN 2220-6426 (Online)