Введение

ESC/Java (и позднее ESC/Java2), "Extended Static Checker for Java" – это инструмент программирования, предназначенный для обнаружения типичных ошибок времени выполнения в программах на Java на этапе компиляции. Базовый подход, используемый в ESC/Java, называется расширенной статической проверкой, которая объединяет ряд методов для статической проверки корректности различных ограничений программы. Например, проверка того, что целочисленная переменная больше нуля или находится в пределах границ массива. Эта техника была впервые реализована в ESC/Java (и его предшественнике, ESC/Modula 3) и может рассматриваться как расширенная форма проверки типов. Расширенная статическая проверка обычно предполагает использование автоматического решателя теорем, и в ESC/Java использовался решатель теорем Simplify. ESC/Java не является ни корректным, ни полным. Это было сделано намеренно, чтобы уменьшить количество ошибок и/или предупреждений, выдаваемых программисту, и сделать инструмент более практичным. Однако это означает, что, во-первых, существуют программы, которые ESC/Java ошибочно считает некорректными (так называемые ложные срабатывания), а во-вторых, существуют некорректные программы, которые он считает корректными (так называемые ложные пропуски). Примеры последней категории включают ошибки, возникающие в результате модульной арифметики и/или многопоточности. ESC/Java был первоначально разработан в Исследовательском центре Compaq Systems Research Center (SRC). SRC начал проект в 1997 году после завершения работы над их оригинальным расширенным статическим контроллером ESC/Modula 3 в 1996 году. В 2002 году SRC опубликовал исходный код ESC/Java и связанных инструментов. Современные версии ESC/Java основаны на Языке моделирования Java (JML). Пользователи могут контролировать объем и виды проверки, добавляя в свои программы аннотации в виде специально отформатированных комментариев или прагм. Группа безопасности систем Университета Неймегена выпустила альфа-версии ESC/Java2, расширенной версии ESC/Java, которая обрабатывает язык спецификаций JML, вплоть до 2004 года. С 2004 по 2009 год разработкой ESC/Java2 занималась исследовательская группа KindSoftware в Университетском колледже Дублина, которая в 2009 году переехала в IT-университет Копенгагена, а в 2012 году – в Технический университет Дании. За годы существования ESC/Java2 приобрел множество новых функций, включая возможность работы с несколькими решателями теорем и интеграцию с Eclipse. OpenJML, преемник ESC/Java2, доступен для Java 1.8. Исходный код доступен по адресу https://github. com/OpenJML