Программная инженерия: анализ, проектирование, моделирование

Анализ

Показывать лекцию целиком

1.1       Назначение анализа

Вначале дадим строгое определение понятия анализа.

   

Анализ — это метод исследования, характеризующийся выделением и изучением отдельных частей объектов исследования[1].

Скрупулезно проанализируем приведенное определение.

Итак, анализ — это метод познания объекта путем его деления на составляющие и последующего изучения этих составляющих.

 

1.1.1       Контекст проведения анализа

Для анализа важно:

 Ответ на каждый из приведенных вопросов формирует свой определенный контекст исследования, который предопределяет тип выполняемого анализа и задачи, решаемые в ходе выполнения анализа. Для программной инженерии выделяют следующие типы IT-анализа:

Во второй главе курса «Программная инженерия. Введение в специальность» мы подробно разобрали своды знаний из приведенных областей анализа и назначение проведения этих работ. Здесь повторяться не будем, а пойдем по пути расширения и углубления знаний.

Каким бы анализом вы ни занимались, необходимо помнить о том, что это самая ранняя стадия процесса разработки продукта. От качества выполнения анализа (в заданных условиях функционирования, отличающихся для waterfall- и agile-сред) зависит эффективность всего процесса разработки и суммарная, конечная стоимость продукта.

   

 

Общеизвестный факт из области программой инженерии: различные ошибки (в требованиях, при анализе и т. д.), влияющие на цифровой продукт, выявленные как можно раньше по ходу процесса (на более ранних его стадиях), стоят компании меньших средств. Если ошибки выявляются на более поздних стадиях процесса разработки, то их стоимость постепенно все увеличивается и достигает максимума к окончанию процесса.

Анализ для программной инженерии — как противотуманные фары для машины в пасмурный день:

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

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

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

   

 

В подобном восприятии отдельных частей нет ничего плохого или предосудительного до тех пор, пока специалист в состоянии без потерь собрать воедино полученные части. Потери бывают двух видов: структурные и функциональные.

Со структурными все более-менее понятно: скажем, была одна гусеница, стало две половинки одной гусеницы, а вот с функциональными не всегда все так очевидно. Одна гусеница имела функцию ползания, а вот будет ли иметь половина гусеницы подобную функциональность? Вопрос в том, как собрать части целого воедино, не потеряв ценности (как структурной, так и функциональной), которую приносит объект. Ответ на этот вопрос даст активность проектирования (синтез), которую мы рассмотрим далее.

 

1.1.2       Образ профессионального мышления

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

Аналитическое исследование факторов предопределяет образ мысли исследователя и предлагает ему профессиональный путь. Это путь размышления над составными частями целого, с выводами, над которыми потом нужно провести зеркальную работу по интеграции их в единую и целостную картину. Без интеграции анализ бесполезен для практических сфер деятельности. Работа по сбору частей мозаики в единое полотно формирует основную ценность проведенного анализа (рис. 1).

Рис.1

По-научному этот сбор отдельных элементов в единый структурный и функционирующий артефакт (в нашем случае это программный продукт) является процессом синтеза (проектирования). В области программной инженерии анализ и синтез неразрывно связаны друг с другом. Не сомневайтесь: после того как мы детально рассмотрим проектирование, то последовательно сделаем вывод, что эта активность так же неразрывно связана со всей областью программной инженерии. Постепенно мы придем к пониманию того, что для комплексного развития в области программной инженерии нужно уделять внимание разным аспектам сферы информационных технологий. Для этого есть определенная профессиональная модель развития — T-shaped skills.

   

 

T-shaped специалисты имеют широкий разноплановый опыт и умения в очень разных областях знаний и навыков (это горизонтальная линия буквы Т) и при этом в одной-двух областях имеют очень глубокие познания и уровень экспертизы (вертикальная линия буквы Т)[2].

 

1.1.3       T-shaped skills

Широкий кругозор развития дает множество преимуществ в сравнении с узкими специализациями, которые нуждаются в дополнительном курировании и управлении. Поначалу к T-shaped skills модели будет сложно привыкнуть, но потом эта работа окупится. Есть принцип, который может помочь освоить ее и развиваться как T-shaped специалисту. Этот принцип Шу Ха Ри, разбивающий путь от новичка до мастера на три профессиональных этапа:

  1. Понять, как вещь работает.
  2. Научиться работать по тем же правилам, что и эксперты.
  3. Придумывать свои правила и решения.

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

 

1.2       Алгоритмика

По традиции дадим формальное определение понятия алгоритма.

   

Алгоритм последовательность действий, либо приводящая к решению задачи, либо поясняющая, почему это решение получить нельзя[3].

 

1.2.1       Разные точки зрения

Основателем понятия алгоритма является среднеазиатский научный деятель Аль-Хорезми.

Аль-Хорезми разработал подробные тригонометрические таблицы, является автором серьезных трудов по астрономии, сделал открытия в области географии, известен своей «Книгой о восполнении и противопоставлении», которая заложила основы современной алгебры

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

   

Алгоритм — это конечный набор правил, который определяет последовательность операций для решения конкретного множества задач и обладает пятью важными чертами: конечность, определенность, ввод, вывод, эффективность[4].

Это определение алгоритма, данное Д. Э. Кнутом, обладает для нас определенной практической ценностью.

Дональд Эрвин Кнут — американский ученый в области информатики, преподаватель и идеолог программирования, разработчик нескольких известных программных технологий. Автор всемирно известной серии книг, посвященной основным алгоритмам и методам вычислительной математики[5]

 

В нем приведены важные атрибуты, которыми должен обладать каждый алгоритм, — конечность, определенность, ввод, вывод, эффективность. Далее мы подробнее рассмотрим эти атрибуты.

А вот это определение понятия алгоритма ценно для нас тем, что предполагает наличие системы правил, которые автор алгоритма будет формировать в соответствии с своим профессиональным опытом:

   

Алгоритм — предписание, задающее на базе системы правил последовательность операций, точное выполнение которых позволяет решать задачи определенного класса[6].

Давайте сначала определимся с общими чертами всех приведенных определений.

 

1.2.2       Атрибуты алгоритма

Алгоритм состоит из последовательности действий / набора правил, результат выполнения которых заключается в решении задачи (или доказательстве того, что ее решить нельзя). Получается весьма абстрактное описание, под которое подходит практически любой процесс. Мы приходим к необходимости анализа специфичных понятий и деталей (рис. 2), полученных на основе дополнительно рассмотренных определений. Еще раз перечислим понятия, которые стоит рассмотреть подробнее для понимания сути значения алгоритма, — автор алгоритма, определенность алгоритма, конечность алгоритма, эффективность алгоритма, ввод и вывод.

Рис. 2

Автор алгоритма

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

Конечность алгоритма

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

Определенность алгоритма

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

Эффективность алгоритма

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

Для достижения эффективности нужно работать над уменьшением ресурсов, которые используются на этапах выполнения алгоритма. Ресурсы (время, скорость) нельзя сравнить напрямую друг с другом. Сравнение не всегда возможно по одному эквивалентному значению. То, какой из вариантов этапов алгоритма следует считать более эффективным, определяется дополнительным контекстом выполнения задачи. Для этого контекста требуется дополнительно рассматривать как тактические, так и стратегические факторы применения алгоритма.

Ввод

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

Вывод

Если выразиться просто, то понятие вывода можно сравнить с понятием результата. Вывод — это то, что получается после исполнения алгоритма.

 

1.2.3       Еще немного специфики

Алгоритмы можно описывать как человеческим языком, так и специальными нотациями. Специальный формальный язык записи облегчает жизнь специалистам — он позволяет избежать неоднозначности и формировать алгоритм в кратком и понятном виде. Для каждого отдельного случая необходим свой формальный язык, и мы рассмотрим их более подробно, когда будем говорить о разных видах IT-анализа.

Умение составлять алгоритмы и представлять их в понятном виде — залог успешной формализации идеи и последующей автоматизации в виде программного продукта (рис. 3).

Рис. 3

Алгоритм представляет собой схему решения какой-то задачи. Сформулируем очередное заключение: решить формальную задачу можно с помощью анализа, но для того, чтобы зафиксировать способ решения, представить его схему и учесть необходимые атрибуты, которые позволят сделать решение успешным (определенным, конечным, эффективным), можно использовать алгоритм (рис. 4). Алгоритм лежит в основе проведения каждого типа анализа, визуализирует и документирует способ решения и задает параметры и атрибуты достижения результата. В основе решения задачи лежит анализ, а основой для его проведения является составление алгоритма. В этой цепочке важно помнить о формальных признаках успешного алгоритма и использовать их в процессе анализа. По мере решения различных задач ваша база формальных атрибутов успешных алгоритмов будет пополняться. Развивая понимание широкого диапазона применения алгоритмов, вы сможете выбрать наиболее оптимальный алгоритм для решения конкретной задачи.

 

Мышление правильными, оптимальными алгоритмами помогает делать все быстрее и, как правило, более качественно[7].

Рис. 4

Надеемся, что мы обосновали важность аналитического мышления и использования алгоритмов в работе. Дальше дело за вами.

 

Контрольные вопросы

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

Сначала поговорим об анализе (рис. 4.1).

  1. В чем состоит назначение анализа как вида деятельности?
    1. Для чего нужен анализ?
    2. В каких условиях можно заниматься развитием анализа?
  2. Для чего нужен контекст проведения анализа?
    1. Являются ли инструменты анализа универсальными?
    2. На что направлен анализ?
  3. Анализ — это образ мышления?
    1. Зачем проводить анализ?
    2. В чем аналитическое мышление может помочь при решении бытовых задач?
  4. Интересно ли вам развивать аналитические навыки?
    1. Зачем заниматься развитием аналитического мышления?
    2. Может ли развитие аналитического мышления сделать размышляющего более счастливым?

Рис. 4.1

 

А теперь обсудим алгоритмы (рис. 4.2).

  1. В чем состоит назначение алгоритмики и алгоритмов?
    1. Зачем применять алгоритмическое мышление?
  2. Для чего нужен контекст проведения анализа?
    1. Какими характеристиками обладают алгоритмы?
    2. Какие из характеристик более нужны, а какие можно проигнорировать?
  3. Анализ — это образ мышления?
    1. Где можно применять алгоритмы?
    2. В чем состоит ценность от применения алгоритмов?

Рис. 4.2

 

[1]https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7

[2]https://medium.com/@ivan_5394/%D1%82-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D0%B5-%D0%BB%D1%8E%D0%B4%D0%B8-9d04a748f94f

[3]http://www.machinelearning.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC

[4] Кнут Д. Э. Искусство программирования. Т. 1. Основные алгоритмы. 2006.

[5] http://www.nsc.ru/win/elbib/data/show_page.dhtml?76+4

[6] https://lawbooks.news/psihologiya_888_889/slovar-prakticheskogo-psihologa.html 

[7] https://logiclike.com/blog/razvitie-intellekta/myshlenie-algoritmami

Вернуться к учебному плану