Как компьютеры учатся делать человеческое программное обеспечение более эффективным

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

Генетическое улучшение включает в себя написание автоматизированного «программиста», который манипулирует исходным кодом программного обеспечения путем проб и ошибок, чтобы заставить его работать более эффективно. Это может включать перестановку строк кода, удаление строк и вставку новых — очень похоже на человека-программиста. Каждая манипуляция затем проверяется на соответствие некоторому критерию качества, чтобы определить, является ли новая версия кода улучшением по сравнению со старой версией. Речь идет о том, чтобы взять большие программные системы и слегка изменить их для достижения лучших результатов.

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

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

Мы видели несколько примеров генетического улучшения, которые начали признавать в последние годы, хотя на данный момент все еще в университетах. Хороший ранний вариант датируется 2009 годом , когда такой автоматизированный «программист», созданный Университетом Нью-Мексико и Университетом Вирджинии, исправил 55 из 105 ошибок в различных видах программного обеспечения, от медиаплеера до игры в тетрис. За это он получил 5000 долларов (3173 фунта стерлингов) и премию Gold Humie Award, которая присуждается за достижения, полученные с помощью генетических и эволюционных вычислений.

В прошлом году UCL в Лондоне руководил двумя исследовательскими проектами, которые продемонстрировали потенциал области (полное раскрытие: в обоих участвовал соавтор Уильям Лэнгдон). Первый включал в себя программу генетического улучшения, которая могла взять большую сложную часть программного обеспечения с более чем 50 000 строк кода и ускорить его работу в 70 раз.

Второй осуществил первую автоматизированную оптовую трансплантацию одной части программного обеспечения в более крупную, взяв лингвистический переводчик Babel и вставив его в систему обмена мгновенными сообщениями Pidgin .

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

Как мы упоминали в начале, ученые-компьютерщики имеют богатую традицию заимствования идей у ​​природы. Например, природа вдохновила генетические алгоритмы, которые перебирают миллионы возможных ответов на реальную проблему со многими переменными, чтобы найти лучший из них. Примеры включают в себя все, что угодно, от разработки оптовой дорожной распределительной сети до тонкой настройки конструкции двигателя.

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

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

Это делает генетическое улучшение особенно интересным отклонением от этой дисциплины. Вместо того, чтобы пытаться переписать всю программу с нуля, она преуспевает, внося небольшое количество крошечных изменений. Он даже не должен ограничиваться генетическим улучшением как таковым. Пример Babel/Pidgin показал, что он может распространяться на трансплантацию части программного обеспечения в программу подобно тому, как хирурги пересаживают органы тела от доноров к реципиентам. Это напоминание о том, что общая цель — автоматизированная разработка программного обеспечения. Чему бы природа ни научила нас, когда дело доходит до разработки этой увлекательной новой области, мы должны хвататься за нее обеими руками.