Создана программа, способная исправить ошибки в другой программе, не имея доступа к ее исходному коду

Программный код


Ошибки в программном коде - это бич любого человека, занимающегося разработкой программного обеспечения. Устранение ошибок - это достаточно тривиальная работа, заключающаяся в большинстве случаев в правке нескольких строчек исходного кода программы, однако, процесс локализации места возникновения ошибки является очень трудоемким занятием, отнимающим много времени особенно при работе над большими проектами. Однако, поиском типовых ошибок теперь не обязательно заниматься человеку, с этим делом вполне может справиться программа, разработанная исследователями Массачусетского технологического института, более того, эта программа может самостоятельно устранить большинство ошибок, заимствуя участки кода из других исполняемых модулей, даже написанных на других языках программирования. Такой подход не требует доступа к исходному коду исправляемой программы, в будущем он позволит сэкономить тысячи часов рабочего времени программистов и позволит получать стабильно работающие программы.

В настоящее время разработанная программа, имеющая название CodePhage, способна устранять ошибки, связанные с некорректными преобразованиями типов переменных, отсутствием проверок значений переменных и некоторых других типов наиболее распространенных ошибок. "Наша программа реализует функцию динамического обратного инжиниринга участков кода" - рассказывает Стелайос Сидироглоу-Дускос (Stelios Sidiroglou-Douskos), один из исследователей, - "При обнаружении ошибки программа осуществляет так называемый процесс "горизонтальной пересадки кода", который весьма подобен аналогичной операции, используемой в генетике. При этом программа не нуждается в доступе к исходному коду и может черпать участки требующегося ей уже кода из огромной "библиотеки" исполняемых файлов и модулей, доступных на просторах Интернета".

Представьте себе, что вы написали программу, в которую пользователь вводит два числа, а программа рассчитывает третье число, деля первое введенное пользователем значение на второе. И, как это бывает очень часто, перед выполнением деления вы забыли проверить, что второе введенное число не равно нолю.

Система CodePhage начинает анализ программы, содержащей ошибку, и сразу определяет два "входа" данных. Анализ этих входов показывает, что первый из них не является критичным, введенное число может принимать любое значение и это никогда не приведет к возникновению ошибки. Следующий этап анализа выявляет опасный вход и система проводит более тщательный анализ обработки данных этого входа. Обнаружив то, что к операции деления в качестве делителя может быть "допущен" ноль, система регистрирует ошибку и производит поиск в обширной базе исполняемых модулей наиболее подходящей функции деления, позволяющей выполнить эту операцию безопасным способом.

"Мы имеем в наличии "тонны" исполняемых модулей и исходного кода, хранящихся в общедоступных хранилищах. В этих миллионах проектов всегда можно найти подходящее решение для устранения ошибки того или иного типа, точнее, решение для наиболее правильного выполнения тех или иных действий" - рассказывает Сидироглоу-Дускос, - "И это не зависит от языка программирования, на котором была написана программа с ошибкой и программа-донор кода, ведь большинство языков программирования используют практически одинаковые конструкции, в которые превращаются строчки их исходного кода".

"Нашей долгосрочной перспективой является создание такой среды программирования, в которой программисту никогда не придется писать часть кода, если точно такую же уже до него написал кто-то другой" - рассказывает Мартин Ринард (Martin Rinard), профессор из Массачусетского технологического института, - "Будущая система сможет самостоятельно определять решаемую программистом задачу и подбирать наиболее подходящие участки уже написанного исходного кода, который будет наиболее оптимальным и свободным от ошибок".

Используя подобную технологию, разработчики программ при их написании могут преднамеренно опускать проверки значений данных и совершать "программистские ляпы" других типов. Затем код полученной программы пропускается через систему типа CodePhage, которая наполнит код всеми необходимыми проверками и устранит другие виды ошибок. В результате применения такого подхода будет сэкономлено достаточно большое количество человеко-часов работы высококвалифицированных специалистов, а уровень стабильности работы программ будет поднят практически до максимально достижимого.

Первый вариант программы CodePhage был протестирован на коде семи общедоступных программ. Практически во всех случаях программе CodePhage потребовалось около 10 минут времени на "ремонт" другой программы, но в будущем исследователи постараются сократить это время до минимально возможного.




Ключевые слова:
Программа, Исходный, Исполняемый, Код, Ошибка, Анализ, Поиск, Функция, Библиотека, Проверка, Данные

Первоисточник

Другие новости по теме:
  • Исследователи успешно атаковали компьютер при помощи вируса, закодированног ...
  • Искусственный интеллект научился писать программы, "воруя" участки кода д ...
  • Shuffler - программа, позволяющая предотвратить кибернападение на другие пр ...
  • Ученые начали работу над созданием программы, стандартизирующей и облегчающ ...
  • Sketch - новый язык программирования, способный самостоятельно оптимизирова ...

  • Isnext отзывы. Интернет-магазин автотоваров.


    2 июля 2015 10:58
    #1 Написал: DSL115

    Публикаций: 0
    Комментариев: 73
    Было бы интересно, если CodePhage предложили бы протестировать саму себя...
        
    2 июля 2015 12:48
    #2 Написал: Rsa

    Публикаций: 0
    Комментариев: 497
    Ну, в целом идея вполне жизнеспособная, однако обольщаться не стоит - слишком невелико разнообразие типов ошибок, которые могут быть обнаружены таким способом. В большинстве случаев, эта программа просто не сможет понять что это ошибка - если вместо плюса поставили минус, или вместо а+b написали a+c, или вызвали не ту функцию, или скобку закрыли не в том месте, или, или, или... Все эти операции с точки зрения любой внешней проверки будут совершенно корректными, но их результат будет неправильным. Без сравнения тех.задания с полученным кодом это не выявить, а этого-то программа сделать и не сможет.
        
    2 июля 2015 15:05
    #3 Написал: zlat

    Публикаций: 0
    Комментариев: 481
    Судя по тексту, ошибки она, похоже не исправляет. Как бы его правильно назвать... э-э-э... Русификатор возникающих сообщений об ошибках?
        
    3 июля 2015 09:48
    #4 Написал: FomaNeverujuwij

    Публикаций: 0
    Комментариев: 3785
    Цитата: Rsa
    невелико разнообразие типов ошибок

    Невелико, согласен. Но исправление и того количества типичных ошибок, о которых написано - уже само по себе неплохо. Единственное что смущает - это то, что ошибки правятся прямо в выполняемом коде. А это значит, что исходники остаются нетронутыми, и следующие версии программ надо будет пропукать через эту "правилку" снова и снова.


    --------------------
        
    6 июля 2015 00:36
    #5 Написал: gendalf

    Публикаций: 0
    Комментариев: 615
    такие проги давно существуют, баги никуда не делись, а кривой код она не исправит, ибо синтаксически верен.
        
    6 июля 2015 06:11
    #6 Написал: zlat

    Публикаций: 0
    Комментариев: 481
    FomaNeverujuwij, ошибки она не исправляет. Возьмем ту же ситуацию с делением на 0. В большинстве случаев это означает ошибку в исходных данных, и в данном случае надо контролировать заведение данных, и выдавать сообщение при вводе(чтобы вводили корректные данные) если в результате обработки будет возникать деление на 0. А не выводить сообщение уже при попытке деления. К тому же еще неизвестно что после вывода такой ошибки в дальнейшем программа будет делать(скорее всего эта программа-исправлятор просто запустит исполнение следующего за делением кода, что в корне неправильно, и данные так "наисправляются", что в результирующих данных получится полная лажа).
    Возможна другая ситуация. Возьмем, к примеру вариант, когда программа выводит процент оплаты, а платить человеку нечего(Если ситуация не обрабатывается, получим деление на 0). В этом случае уже ошибка обработки данных, и логично было бы выводить ' '(пустое значение или пробел) вместо %-ов, и выводить при этом всякий раз сообщение об ошибке деления на 0 является абсолютно неправильным.
        

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.