Главная » Статьи » Техника » Технологии

ТРИЗ в программировании

Опыт применения методов ТРИЗ для повышение эффективности разработки ПО. Игорь Одинцов (Intel), Михаил Рубин (Алгоритм)

В статье обосновывается возможность применения методов ТРИЗ для повышения эффективности разработки ПО. Такая возможность появилась благодаря выполненной адаптации классического ТРИЗ для предметной области программирования. Предлагается краткое введение в основные методы и принципы ТРИЗ с учетом програмистской терминологии.
Примеры применения методов ТРИЗ для разработки ПО даются на основе системы с открытым программным кодом Grid Programming Environment. Иллюстрируются законы развития технических систем, противоречия, и т.д.

1. Мотивация применения ТРИЗ в области разработки программного обеспечения

Симптомы кризиса программирования (отставание от графика, превышение сметы, ...) хорошо знакомы всем разработчикам крупных проектов. Программное обеспечение обладает такими свойствами как сложность, изменяемость, абстрактность, нематериальность. Разработка качественных программных продуктов сдерживается качеством работы программистов и команд программистов, участвующих в создании этих продуктов. Одним из инструментов совершенствования создания и развития программных продуктов на всех этапах жизненного цикла могут быть методы, развитые в теории решения изобретательских задач (ТРИЗ).
В работе [1] приведены примеры того, что многие законы развития технических систем справедливы для систем передачи и обработки информации (в основном на примере телекоммуникационных технических средств). Программные продукты также являются техническими системами передачи и обработки информации, и в работе [2], адресованной профессионалам ТРИЗ, нами был апробирован подход применения законов развития технических систем для программных продуктов, а также примеры возникающих противоречий требований при их разработке. Данная работа является расширенной и переработанной специально для программистской аудитории версией упомянутой пионерской работы.
В качестве основной работы, описывающей состояние дел в программировании, технологиях и методологиях, языках и системах, нами была взята книга [3]. Кратко разработку ПО можно рассматривать как процессы преобразования неформальных моделей предметной области постановки задачи в формальные модели, пригодные для обработки формальным вычислителем. Совокупность процессов, работающих с моделями, и дающих, в итоге, программный продукт, обычно называют технологическим подходом.
Напомним, что при построении моделей используется абстрагирование – принцип игнорирования второстепенных аспектов предмета с целью выделения главных. В программировании абстракции рассматриваются одновременно как по отношению к решаемой задаче, так и по отношению к физической машине (вычислителю). Основными абстракциями в программировании являются абстракции архитектуры, модульности, управления и данных.

2. Краткое введение в ТРИЗ для программистов

2.1. Классический ТРИЗ

В среде ТРИЗ принято опираться на следующие основные утверждения:
1. Методы ТРИЗ основаны на объективных законах развития систем;
2. Эти законы выявляются на основе изучения объективной информации из различных фондов интеллектуальной деятельности человечества;
3. ТРИЗ является прикладной наукой, направленной на разработку инструментальных методов, позволяющих эффективно решать изобретательские задачи в различных сферах деятельности человека.
Напомним кратко основные инструменты классической ТРИЗ:
1. Собственно, законы развития технических систем (ЗРТС);
2. Алгоритм решения изобретательских задач (АРИЗ) – программа для решения изобретательских задач путем выявления и разрешения противоречий;
3. Вепольный анализ, основанный на анализе минимальной модели технической, состоящей из двух веществ и поля их взаимодействия;
4. Стандарты на решение изобретательских задач;
5. Развитие творческого воображения.
Инструменты ТРИЗ могут быть применимы к разрабатываемому (или сопровождаемому) программному продукту на каждом из уровней моделей.

2.2. Адаптация ТРИЗ для разработчиков ПО

Для применения ТРИЗ в области создания программных продуктов потребовалась адаптация основных составляющих ТРИЗ, которая проводилась в двух направлениях:
- выделение общесистемной составляющей в различных инструментах ТРИЗ или их обобщение до общесистемного уровня;
- поиск и формулировка особенностей использования этих инструментов для решения задач в области создания программных продуктов.

Главной особенностью области программирования является то, что в ней приходится иметь дело с нематериальными объектами. Адаптация потребовалась для многих ключевых понятий ТРИЗ: противоречия, оперативная зона конфликта, идеальность, веполь и др. Были введены общесистемные понятия, которые в ТРИЗ используются еще достаточно редко, например, филогенез и онтогенез, многоаспектность систем и т.д. Возникла необходимость и в адаптации ключевых инструментов ТРИЗ: АРИЗ, веполи, стандарты, приемы преодоления противоречий и др. Например, минимальная модель системы, с которой имеют дело программисты, состоит не из веществ, а из абстрактных элементов. В связи с этим корректнее минимальную систему в программировании было бы называть элеполь (два элемента, связанные тем или иным полем взаимодействия). Примерами закрытых элеполей (основанных на элементах со связями, направленными вовнутрь этой системы) могут быть компьютеры, объединенные в сеть или арифметический оператор над двумя и более переменными. Примером открытых элеполей (основанных на полях, направленных во вне системы) может быть дешифратор данных, преобразующий один поток информации в другой.
С описанием основных изменений, которые были внесены в инструменты ТРИЗ для их использования для нематериальных систем, можно познакомиться в работах [5,6].
Для адаптации ТРИЗ к области проектирования программных продуктов была собрана база данных примеров и задач из области программирования и составления алгоритмов. Для этого использовался личный опыт авторов настоящей работы, других авторов, а также анализ патентов на создание алгоритмов.

2.3. Опыт проведения семинара по ТРИЗ для программистов

На первом этапе применения методов ТРИЗ в разработке программных продуктов основное внимание было уделено двум областям: постановке задачи проектирования, а также на создание и развитие архитектуры программ. Разработанные подходы были опробованы на семинаре по ТРИЗ, проведенном ЦИТК "Алгоритм" в ЗАО "Интел" в Санкт-Петербурге для программистов и менеджеров этой компании.
Для подготовки и проведения семинара было отобрано около сотни примеров и задач из области программирования, иллюстрирующие различные инструменты ТРИЗ. Для решения задач, связанных с проектированием программных продуктов слушатели успешно использовали таблицу применения приемов преодоления технических противоречий Г.С. Альтшуллера, адаптированный АРИЗ [6], адаптированную систему стандартов [5]. Ознакомление с этими инструментами вначале проводилось на классических учебных примерах. По мере их освоения, в качестве примеров использовались задачи из области программирования.
В рамках семинара были даны также основы курса РТВ, функционального анализа и другие материалы. Слушатели семинара активно пополняли картотеку примеров из программирования, иллюстрирующие различные механизмы ТРИЗ. При опросе около 70% слушателей отметили, что инструментарий ТРИЗ можно применять в программировании и 30% посчитали, что эти инструменты можно применять частично.

3. Примеры применения ТРИЗ в разработке и сопровождении программных продуктов

3.1. Примеры применения законов развития технических систем

Для иллюстрации применения методов и инструментов ТРИЗ будем использовать опыт разработки архитектуры распределенных систем (грид) в ЗАО "Интел" в Санкт-Петербурге. История проекта GridProgrammingEnvironment (GPE) берет свое начало в 2004 году. В основу клиентской части были положены наработки, сделанные в рамках европейского проекта Unicore. В то же время серверная часть, реализующая принципы грид второго поколения, была разработана заново. Высокий уровень переносимости стал возможен благодаря выделению нескольких уровней программных интерфейсов. Проект GPE с самого начала своего развития является проектом с открытым программным кодом .
В 2007 году разработчики проекта пришли к выводу, что классическая клиент-серверная архитектура стала тормозом развития проекта. Методом проб и ошибок было выясненено, что наилучшим направлением развития архитектуры может стать ее преобразование в архитектуру клауд-компьютинга, но это потребует фактически разработку системы с нуля. В результате консультаций со специалистами ЦИТК "Алгоритм" выяснилось, что понимание и применение закона перехода в надсистему (моно-би-поли) могло бы привести изначально к разработке существенно более гибкой и адаптивной архитектуры. Таким образом, знание ЗРТС могло бы существенно сэкономить финансовые вложения в проект.

3.2. Примеры применения таблицы противоречий

Анализ применимости инструментов ТРИЗ в программировании показал возможность успешно использовать таблицу применения приемов разрешения технических противоречий Г.С. Альтшуллера [7]. Были опробованы десятки задач из области программирования, например, для задач, возникающих при развитии GPE.
Одно из противоречий было сформулировано так: ЕСЛИ изолировать контекст выполнения приложений, ТО можно существенно повысить безопасность корпоративных сред, НО при этом возникнут потери в производительности. По таблице применения типовых приемов разрешения противоречий требований была определена пара: изменение (30, Вредные факторы, действующие на объект) – ухудшение (39, Производительность). Из набора приемов (22, 13, 24) мы выбрали 24 (Принцип посредника), согласно которому следует «на время присоединить к объекту другой (легкоудаляемый) объект». В нашем случае таким легкоудаляемым объектом стал комплекс аппаратных средств поддержки виртуализации, что решило проблему.
Естественно, адаптация таблицы противоречий требует и уточнения формулировок принципов так, чтобы они легко воспринимались программистами. Уже упомянутый «принцип посредника» программистам проще воспринимать как «принцип виртуализации», «принцип дробления» как «принцип повышения модульности», принцип «вынесения» как принцип «выделения функциональности». Обратим внимание на то, что многие принципы оказались близки давно известным в программировании шаблонам (паттернам) проектирования. Мы высказываем гипотезу о частичном отображении друг на друга шаблонов программирования и приемов разрешения технических противоречий.
Еще один пример возьмем из тестирования инструмента разработки сервисов. Для тестирования веб-интерфейса инструмента используется технология, которая позволяет считывать html-код отображаемой страницы. Анализируя содержимое страницы, тест определяет, правильную ли информацию отображает инструмент. Противоречение заключается в том, что ЕСЛИ тест знает структуру страницы, ТО можно выполнить проверку, НО при этом тест становится зависимым от веб-интерфейса, который постоянно меняется. По таблице применения типовых приемов разрешения противоречий требований была определена пара: изменение (35, Адаптация, универсальность) – ухудшение (30, Вредные факторы, действующие на объект). Из набора приемов (35, 11, 32, 31) мы выбрали 11 (принцип заранее подложенной подушки), который был реализован как использование идентификационных полей для различных элементов страницы заранее, что также решило проблему.
Обратим внимание на то, что такие программные инструменты как оптимизаторы и средства рефакторинга, могут быть рассмотрены как анализирующие технические противоречия на уровне программного кода (или его модельного представления, например с определением шаблонов программирования), и применяющие приемы разрешения таких противоречий. Детальные исследования в этой области еще только предстоят.

3.3. Моделирование на языке вепольных структур

Еще раз отметим, что стандартные изобретательские решения на уровне разработки архитектуры хорошо известны многим программистам. Это паттерны проектирования, являющиеся описанием того, как решить задачу таким образом, чтобы это можно было использовать в различных ситуациях. Если в ТРИЗ – 76 Стандартов изобретательских решений распределены в пять основных классов и множество подклассов по виду типовых технических проблем, которые они решают, то около 80 паттернов проектирования сгруппированы по семи основным типам. В программировании принято описание шаблона делать на одном из языков моделирования (например, языке UML), но с нашей точки зрения, эти описания могут быть достаточно легко переведены на язык вепольных структур. Добавим, что внедрение паттернов проектирования в список типовых приемов устранения технических противоречий позволит программистам повысить их производительность и качество создания программного обеспечения.

3.4. Методы развития творческого воображения

Применение методов развития творческого воображения очень важно на начальных этапах разработки ПО. Инерция мышления и сознательно или несознательно поставленные самому себе ограничения могут существенно обеднить разработку идеи. Методы РТВ можно рассматривать в рамках шкалы, где с одной стороны доминирует системный перебор, а с другой методы психологической активации.
При генерации идей для новых программных сервисов был использован метод фокальных объектов. Суть его в том, что для объекта, подлежащего совершенствованию, выбираем наугад несколько объектов и переносим свойства этих объектов на изначальный объект. Метод предусматривает синтез характеристик разных объектов, которые на первый взгляд кажутся несовместимыми с целью создания чего-либо другого.
Отметим, что обучение и практическое применение ТРИЗ повышает творческий потенциал, изменяя структуру и качество мышления [8].

3.5. Прогнозирование будущих задач на начальной стадии разработки

В качестве одной из особенностей применения ТРИЗ в проектировании программных продуктов можно отметить необходимость не только решения возникающих задач, но выявление, прогнозирование будущих возможных задач и противоречий уже на начальной стадии проектирования.
Здесь мы можем привести простой и жизненный пример. Увы, но дорожные пробки все больше и больше усложняют перемещение людей в мегаполисах. Попытка решить противоречие приводит к тому, что мы отказываемся от перемещения, эффективно решая функции существования без транспорта. От виртуального офиса до реального подарка переданного по Internetи воссозданного получателем (например, с помощью 3D-принтера для создания изделий из пластмассы) – вот диапазон современных решений, созданных специалистами по разработке ПО. А сколько еще решений ждет своей реализации!

4. Выводы

1. Эффективность проектирования программных продуктов может быть повышена за счет использования методов и инструментов ТРИЗ.
2. Использование ТРИЗ для решения задач в области программирования стало возможным благодаря выделению общесистемной составляющей в различных инструментах ТРИЗ и их адаптации к использованию в нематериальных системах.
3. Работа по применению и адаптации методов ТРИЗ в программировании должна быть продолжена совместными усилиями специалистов по ТРИЗ и по разработке ПО.

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

[1] Абрамов О.Ю. Действие законов развития технических систем в системах передачи и обработки информации / Сборник научных работ. Библиотека Саммита Разработчиков ТРИЗ. Выпуск 2, Санкт-Петербург, 2008. – 370 с.

[2] Одинцов И.О., Рубин М.С. Повышение эффективности разработки программных продуктов на основе методов ТРИЗ / Научно-практическая конференция «ТРИЗ-Фест 2009»: сборник трудов конференции. СПб., 2009. – 302 с.

[3] Одинцов И.О. Профессиональное программирование. Системный подход. — СПб.: БХВ, 2004.

[4] Петров В.М., Рубин М.С. Системы законов развития технических систем. Аналитический обзор / Сборник научных работ. Библиотека Саммита Разработчиков ТРИЗ. Выпуск 2, Санкт-Петербург, 2008. – 370 с.

[5] Рубин М.С., Об универсальной системе стандартов на решение изобретательских задач / Научно-практическая конференция «ТРИЗ-Фест 2009»: сборник трудов конференции. СПб., 2009. – 302 с.

[6] Рубин М.С., Об АРИЗ нового поколения: многоаспектный цикл преодоления противоречий / Научно-практическая конференция «ТРИЗ-Фест 2009»: сборник трудов конференции. СПб., 2009. – 302 с.

[7] Альтшуллер Г.С. Алгоритм изобретения, изд. Московский рабочий, 1973 г.

[8] Рубина Н.В., Шкала для талантов. Диагностика развития творческого мышления / Научно-практическая конференция «ТРИЗ-Фест 2009»: сборник трудов конференции. СПб., 2009. – 302 с.

Источник: http://www.temm.ru/

Категория: Технологии
Добавлено: 13.12.2010
Просмотров: 6877
Рейтинг: 5.0/1
Темы: эволюция ПО, АРИЗ, противоречия, архитектура ПО, ТРИЗ, ТРИЗ в программировании
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]