Повышение эффективности разработки программных продуктов на основе методов ТРИЗ

И.О. Одинцов, М.С. Рубин
Ключевые слова: ТРИЗ в профессиональном программировании, программный продукт, архитектура программы.

1. Особенности применения ТРИЗ в области разработки программных продуктов
Современное развитие техники все больше зависит от качества и стоимости программных продуктов. Однако, разработка качественных программных продуктов сдерживается качеством работы программистов и коллективов, занятых в создании этих продуктов. Одним из инструментов совершенствования создания и развития программных продуктов на всех этапах жизненного цикла могут быть методы, развитые в теории решения изобретательских задач (ТРИЗ) и получившие распространение во всех развитых странах: в США, ЕС, Японии, Южной Корее, России, Китае, Австралии и т.д.
В работе [1] приведены примеры того, что многие законы развития технических систем справедливы для систем передачи и обработки информации (в основном на примере телекоммуникационных технических средств). Программные продукты также являются техническими системами передачи и обработки информации, и в данной работе мы приведем примеры применения для них законов развития технических систем и примеры возникающих противоречий требований при разработке программных продуктов.
Процесс программирования (разработки и сопровождения программных продуктов) обычно заключается в итеративной работе по построению моделей предметной области [2], которые могут быть определены следующим образом:
1. Модель (общая постановка) задачи на естественном языке в терминах предметной области.
2. Модель архитектуры на языке моделирования.
3. Алгоритмическая модель на высокоуровневом языке программирования.
4. Модель на низкоуровневом языке ассемблер.
5. Модель на языке команд вычислителя, которая можеть быть исполнена им в динамическом окружении.
Обратим внимание на то, что языки построения этих моделей, по мере перехода от одной к другой, все более и более формализуются, и наконец становятся формальным языком, понимаемым вычислителем (как правило, компьютером). Некоторые переходы от одной модели к другой, а также средства построения некоторых моделей – автоматизированы, при этом используются инструменты программирования (редакторы текстов и моделей, трансляторы, редакторы связей, ...). Совокупность процессов, работающих с моделями, и дающих, в итоге, программный продукт, обычно называют технологическим подходом.
При построении моделей используется абстрагирование – принцип игнорирования второстепенных аспектов предмета с целью выделения главных. В программировании абстракции рассматриваются одновременно как по отношению к решаемой задаче, так и по отношению к физической машине (вычислителю). Заметим здесь, что такие термины ТРИЗ как «техническое» или «физическое» противоречие оказываются вполне корректными, несмотря на то, что работа ведется в основном с нематериальными элементами моделей. Основными абстракциями в программировании являются абстракции архитектуры (модульности), управления и данных. Уточним, что с точки зрения архитектуры, программисты работают с малыми модулями (процедурами, функциями, классами), средними модулями (программами, библиотеками), и огромными (совокупностью взаимодействующих программ).
Инструменты ТРИЗ могут быть применимы к разрабатываемому (или сопровождаемому) программному продукту на каждом из пяти уровней моделей по нашей классификации. В первую очередь это относится к таким инструментам классической ТРИЗ, как законы развития технических систем, изобретательские приемы устранения технических противоречий (с учетом терминологической и семантической адаптации для нашей предметной области), вепольный анализ, задачи-аналоги и АРИЗ. Мы убедились, что на первых уровнях моделей успешно применимы элементы развития творческого воображения.

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

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

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

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

Выводы

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

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

1. О.Ю. Абрамов. Действие законов развития технических систем в системах передачи и обработки информации / Сборник научных работ. Библиотека Саммита Разработчиков ТРИЗ. Выпуск 2, Санкт-Петербург, 2008. – 370 с.
2. И.О. Одинцов. Профессиональное программирование. Системный подход. — СПб.: БХВ, 2004.
3. В.М. Петров, М.С. Рубин. Системы законов развития технических систем. Аналитический обзор / Сборник научных работ. Библиотека Саммита Разработчиков ТРИЗ. Выпуск 2, Санкт-Петербург, 2008. – 370 с.
4. Альтшуллер Г.С. Алгоритм изобретения, изд. Московский рабочий, 1973 г.
5. Рубин М.С., Об универсальной системе стандартов на решение изобретательских задач, Санкт-Петербург, ТРИЗ-Фест 2009, публикация в настоящем сборнике.
6. Рубин М.С., Об АРИЗ нового поколения: многоаспектный цикл преодоления противоречий, Санкт-Петербург, ТРИЗ-Фест 2009, публикация в настоящем сборнике.

--------------
[1] В настоящий период он размещается на сайте http://gpe4gtk.sourceforge.net/
[2] В этой работе участвовали А.Кирдин, О.Абрамов, О.Фейгенсон и другие сотрудники ЦИТК «Алгоритм»
[3] Базовый семинар по ТРИЗ был проведен совместно с О.Герасимовым.

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

«Наука - это попытка привести хаотическое многообразие нашего чувственного опыта в соответствие с некоторой единой системой мышления»

Альберт Энштейн

Файлы

Прошлое, настоящее, будущее человека

Манипуляция сознанием

Мир многих миров

В мире случайных событий