Разное

Фитнес функция: Генетические алгоритмы — Фитнес-функция — CoderLessons.com

НОУ ИНТУИТ | Лекция | Введение.Основы генетических алгоритмов

< Лекция 12 || Лекция 1: 1234567891011121314

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

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

Предисловие

intuit.ru/2010/edi»>Среди множества проблем, которые возникают перед исследователями как в области теории, так и в многочисленных практических приложениях значительную долю составляют так называемые оптимизационные проблемы. Понятие оптимальности, по-видимому, знакомо почти каждому и вошло в практику большинства предметных областей. С оптимизационной проблемой мы сталкиваемся каждый раз, когда возникает необходимость выбора из некоторого множества возможных решений наилучшего по определенным критериями и, как правило, удовлетворяющего заданным условиям и ограничениям. Само понятие оптимальности получает совершенно строгое толкование в математических теориях, однако в других областях оно может интерпретироваться скорее содержательно. Тем не менее различие между строгим и содержательным понятиями оптимальности, как правило, очень незначительно.

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

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

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

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

Введение

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

Высокая согласованность и эффективность работы элементов биологических систем приводила целый ряд исследователей к естественной мысли о возможности использования принципов биологической эволюции для оптимизации важных для приложений систем, природа которых отлична от биологической. Так, в 1966 году Фогель Л., Оуенс С. и Уолш М. в [1] подобную идею использовали для построения схемы эволюции логических автоматов, решающих задачи прогноза. В 1975 году была опубликована основополагающая работа Дж. Холланда [2], в которой был предложен генетический алгоритм, развивающий ту же идею. Д.Гольдберг, ученик Дж. Холланда, в работе [3] , выполненной в Мичиганском университете, успешно развил и расширил области его применения.

В 60-х годах прошлого века в Германии Рохенберг И., Швефель Г.-П., и др. [4] начали разработку так назывемой эволюционной стратегии. Перечисленные работы послужили толчком и основой развития прикладного направления, которое можно назвать эволюционными алгоритмами. К их числу, помимо упомянутых генетических алгоритмов и эволюционных стратегий, относятся также эволюционное программирование, ориентированное на оптимизацию функций без использования рекомбинаций, и генетическое программирование, использующее эволюционные идеи для оптимизации компьютерных программ. Основополагающая работа по эволюционному программированию принадлежит Дж. Коза [5] из Массачусетского технологического института.

Отметим, что аналогичные исследования успешно проводились отечественными учеными еще в Советском Союзе. Так, значительный вклад в развитие указанных направлений внесли Ивахненко А.Г. [6], Цыпкин Я.З. [7], Расстригин Л.А. [8] и др. В настоящее время исследования по ЭВ активно ведутся Букатовой [9,10], Курейчиком В.М. [11,12,13], их сотрудниками и учениками, а также многими другими исследователями.

Учебное пособие состоит из пяти частей.

В первой части «Основы генетических алгоритмов» (разделы пособия 1-5) изложены идейная сторона простых генетических алгоритмов, их математические основы, подробно описаны примеры построения генетических алгоритмов для решения конкретных задач комбинаторной оптимзации и, наконец, представлены современные модификации и обобщения этих алгоритмов.

Во второй части «Генетическое программирование и машинное обучение» (разделы 6-7) описана концепция компьютерного синтеза программ (с различными структурами их представления – линейными, древовидными, графоподобными) с использованием генетических алгоритмов. Изложены два основных подхода при машинном обучении — Мичиганский и Питтсбургский.

В третьей части «Вероятностные генетические алгоритмы»(раздел 8) приведен другой – вероятностный подход в эволюционных вычислениях, где популяция представляется вектором вероятностей.

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

intuit.ru/2010/edi»>В пятой части «Эволюционное программирование» (раздел 10) содержится описание основанного Фогелем Л.Дж. гибкого подхода в эволюционных вычислениях. В нем форма представления потенциального решения и генетические операторы адаптируются к решаемой проблемы в достаточно широких пределах. В частности, в качестве особи в процессе эволюции Фогелем используются конечные автоматы и целью эволюции является способность решения задач прогнозирования.

В шестой части «Роевой интеллект» (разделы 11-12) описаны принципы и методы оптимизации, базирующиеся на коллективном поведении децентрализованных самоорганизующихся систем. Такие системы представляются, например, в виде графа, содержащего множество вершин (агентов), локально взаимодействующих между собой и с окружающей средой. Имеющиеся экспериментальные данные подверждают эффективность роевого интеллекта (муравьиных, пчелиных, роевых и т.п. алгоритмов) для решения многих оптимизационных задач.

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

Дальше >>

< Лекция 12 || Лекция 1: 1234567891011121314

Фитнес-функция

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

В области советников каждое проектное решение обычно представляется в виде строки чисел (называемой хромосомой ) . После каждого раунда тестирования или моделирования идея состоит в том, чтобы удалить n худших конструктивных решений и вывести n новых из лучших конструктивных решений. Таким образом, каждому проектному решению необходимо присвоить показатель качества, чтобы указать, насколько близко оно подошло к соответствию общей спецификации, и это создается путем применения функции пригодности к результатам испытаний или моделирования, полученным из этого решения. [2]

Существуют два основных класса функций пригодности: один, в котором функция пригодности не меняется, как при оптимизации фиксированной функции или при тестировании с фиксированным набором тестовых случаев; и тот, в котором функция пригодности является изменчивой, как при дифференциации ниши или совместном развитии набора тестовых случаев. [3] [4] Еще один способ взглянуть на функции пригодности — использовать ландшафт пригодности , который показывает приспособленность для каждой возможной хромосомы. Далее предполагается, что пригодность определяется на основе оценки, которая остается неизменной во время прогона оптимизации.

Фитнес-функция не обязательно должна иметь возможность вычислять абсолютное значение, поскольку иногда достаточно сравнить кандидатов, чтобы выбрать лучшего. В некоторых случаях достаточно относительной индикации пригодности (кандидат a лучше, чем b), например , при турнирном отборе или оптимизации по Парето .

Качество оценки и расчета функции пригодности имеет основополагающее значение для успеха оптимизации советника. Он реализует принцип Дарвина «выживает сильнейший». Без основанных на пригодности механизмов отбора для выбора партнера и принятия потомства поиск EA был бы слепым и едва отличимым от метода Монте-Карло . При настройке фитнес-функции всегда нужно помнить, что это нечто большее, чем просто описание желаемого целевого состояния. Скорее, эволюционный поиск на пути к оптимуму также должен быть максимально поддержан (см. также раздел о вспомогательных целях). , если и постольку, поскольку это уже не сделано одной функцией пригодности. Если фитнес-функция разработана плохо, алгоритм либо сойдется к неподходящему решению, либо вообще столкнется с трудностями.

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


Связь между фронтом Парето и взвешенной суммой. Множество допустимых решений частично ограничено фронтом Парето (зеленый). [13]Z{\ Displaystyle Z}

Пример невыпуклого фронта Парето [13]

Пример двух графиков заказа, состоящего из пяти рабочих шагов от a до e , которые должны соответствовать самому позднему времени выполнения [21]

Как определить фитнес-функцию в генетическом алгоритме? | by Vijini Mallawaarachchi

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

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

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

Любая фитнес-функция должна удовлетворять следующим требованиям.

  1. Функция пригодности должна быть четко определена. Читатель должен быть в состоянии четко понять, как рассчитывается показатель пригодности.
  2. Функция пригодности должна быть реализована эффективно. Если фитнес-функция станет узким местом алгоритма, то общая эффективность генетического алгоритма снизится.
  3. Функция пригодности должна количественно измерять, насколько данное решение подходит для решения задачи.
  4. Фитнес-функция должна давать интуитивно понятные результаты. Лучшие/худшие кандидаты должны иметь лучшие/худшие значения баллов.

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

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

Как правило, для задач классификации, в которых используется обучение с учителем, в качестве функции пригодности широко используются меры ошибок, такие как Евклидово расстояние e и Манхэттенское расстояние .

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

Давайте рассмотрим несколько примеров задач и связанных с ними фитнес-функций.

Пример 1. Создание последовательностей

Рассмотрим приведенный ниже пример. Я использовал этот простой пример в основном для простоты понимания.

Имея набор из 5 генов, которые могут содержать одно из бинарных значений 0 и 1, мы должны придумать последовательность, в которой все единицы. Таким образом, мы должны максимизировать количество единиц как можно больше. Это можно рассматривать как задачу оптимизации. Следовательно, фитнес-функция рассматривается как количество единиц, присутствующих в геноме . Если есть пять единиц, то он имеет максимальную пригодность и решает нашу проблему. Если нет единиц, то if имеет минимальную пригодность.

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

Пример 2 — Составление расписания

Расписание на неделю

Очень известный сценарий, в котором можно использовать генетические алгоритмы, — это процесс составления расписания или планирование расписания .

Допустим, вы пытаетесь составить еженедельное расписание занятий в колледже для определенной группы. Мы должны организовать занятия и придумать расписание, чтобы не было столкновений между занятиями. Здесь наша задача заключается в поиске оптимального графика расписания.

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

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

Рассмотрим три переменные x, y и z. Задача состоит в том, чтобы найти наилучший набор значений x, y и z, чтобы их суммарное значение равнялось значению t.

 x + y + z = t 

Нужно уменьшить сумму x+y+z от отклонения от t, т.е. |x + y + z — t| должно быть равно нулю. Следовательно, фитнес-функцию можно рассматривать как инверсия |x + y + z — t| .

 Фитнес-функция = 1/|x + y + z - t| 

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

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

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

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

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

Спасибо, что прочитали…

Фитнес-ориентированная разработка | Thoughtworks

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

 

Архитектурные стандарты постоянно развиваются. Например, сегодняшние стандарты соответствия, вероятно, через год будут другими; текущие изменения в этих стандартах должны отражаться при переходе к производственному развертыванию. Идея о том, что архитектура может поддерживать изменения, была описана Нилом Фордом, Ребеккой Парсонс и Пэтом Куа в 2017 году как эволюционная архитектура.

 

«Эволюционная архитектура поддерживает управляемые постепенные изменения в качестве первого принципа во многих измерениях».

 
Что такое фитнес-функции?

 

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

 

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

 

С чего начать

 

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

 

Изучение этих тем часто выявляет потенциальные конфликты или архитектурные компромиссы. Например, цели в отношении маневренности и гибкости могут противоречить целям в отношении стабильности и отказоустойчивости. Стабильность и маневренность часто диаметрально противоположны из-за того, как они преследуются. Мы пытаемся добиться стабильности, устанавливая контроль над изменениями и создавая привратников, в то время как инновации и гибкость обеспечиваются за счет снижения барьеров для изменений, чтобы свести к минимуму вероятность неудачи. Смещение мышления в пользу «среднего времени восстановления» (MTTR) вместо «среднего времени наработки на отказ» (MTBF) и принятие постоянных изменений — непростая задача. Оценка мотивации заинтересованных сторон и целостная расстановка приоритетов качеств, важных для организации, — это первый шаг в определении функций архитектурной пригодности. Это начальное упражнение похоже на сеанс кросс-функциональных требований, результатом которого является создание желаемых функций пригодности.

 

После сбора фитнес-функций спроектируйте их в тестовой среде. В идеале фитнес-функции должны описывать цель «-способности». Он рассматривает это с точки зрения объективной метрики, значимой для продуктовых команд или заинтересованных сторон. Мониторинг критических качеств как фитнес-функций может помочь командам разработчиков избежать архитектурных отклонений и объективно измерить технический долг. Но где находятся эти фитнес-функции и как они сигнализируют о потенциальном отклонении архитектуры? Создание желаемых фитнес-функций — и включение их в соответствующие конвейеры доставки — сообщает об этих показателях как о важном аспекте архитектуры предприятия. Регулярные обзоры фитнес-функций могут сосредоточить архитектурные усилия на значимых и поддающихся количественной оценке результатах. Эти обзоры также помогают поддерживать важные атрибуты качества системы для готовности к производству.

 

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

Чтобы убедиться, что конвейеры соответствуют стандартам непрерывной доставки организации, первоначальная проверка может гарантировать, что ключевые этапы установлены, а привратники на месте. Например, мы можем написать тест, гарантирующий, что «все задания сборки должны экспортировать журналы в конце своего выполнения». Дополнительные проверки могут гарантировать, что:

  • Качество вашего кода должно быть выше 90% для перехода на следующий этап
  • Версии UAT не должны отличаться более чем на две версии от рабочей версии
  • Никакие секреты не могут быть зафиксированы в открытом тексте
  • Вы всегда должны проводить тестирование безопасности stage
  • Вы никогда не должны выполнять развертывание с учетной записью службы другого приложения.
  • У вас всегда должно быть два утверждающих до производства

И так далее.

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

Качество кода

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

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

 описать "Качество кода" сделать
он «имеет тестовое покрытие выше 90%»
ожидать(качество.get_test_coverage()).to > .9
конец
он «имеет рейтинг ремонтопригодности 0,1 или выше (B)»
ожидать(качество.get_maintainability_rating()).to < .1
конец
конец
 
Отказоустойчивость

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

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

 описать "Отказоустойчивость" сделать
описать "Новое развертывание" сделать
он «имеет менее 1% ошибок для нового развертывания»
ожидать(new_deployment. get_error_rate()).to < .01
конец
конец
описать "Сетевая задержка" сделать
он «имеет менее 5% ошибок, даже если есть задержка в сети»
ожидать(network_tests.get_error_rate()).to < 0,05
конец
он «завершает транзакцию менее чем за 10 секунд, даже если есть задержка в сети»
ожидать (network_tests.get_transaction_time()).to < 10
конец
конец
конец
 
Наблюдаемость

  • Чтобы обеспечить отслеживание приложений, общие библиотеки могут реализовывать функции пригодности, чтобы гарантировать соблюдение архитектурных стандартов для наблюдаемости, в том числе: Ведется ли журнал приложений и используются ли журналы агрегатором журналов?
  • Используются ли метрики приложения службой метрик?
  • Есть ли у приложения конечная точка работоспособности?
  • Регистрирует ли приложение корреляцию или идентификаторы трассировки?

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

 описать "Наблюдаемость" сделать
это "потоки метрики" делают
ожидать (service.has_metrics()). быть (истина)
конец
он "имеет анализируемые журналы"
ожидать (service.has_logs_in_aggregator()). быть (истина)
конец
конец
 
Производительность

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

 описать "Производительность" сделать
он "завершает транзакцию менее чем за 10 секунд"
ожидать(transaction.check_transaction_round_trip_time()).to < 10
конец
он «имеет менее 10% ошибок на 10000 транзакций»
ожидать(transaction.check_error_rate_for_transactions(10000)).to < .1
конец
конец
 
Соответствие

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

 описать "Стандарты соответствия" сделать
описать "Соответствие PII" сделать
это "не должно быть PII в журналах" сделать
ожидать(logs.has_pii_content()).to_not be(true)
конец
конец
описать "Соответствие GDPR" сделать
он «должен сообщать о типах обрабатываемой личной информации»
ожидать (gdpr.reports_PII_types()). быть (истина)
конец
это "должно было быть проверено в прошлом году"
ожидать(gdpr.audit_age()).to < 365
конец
конец
конец
 
Безопасность

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

 описать "Безопасность — анализ кода" сделать
описать «Анализ кода» сделать
он "должен использовать только библиотеки, одобренные корпорацией"
ожидать (code.only_uses_corporate_libraries()). быть (истина)
конец
это «не должно иметь ничего из 10 лучших OWASP»
ожидать(code.has_owasp_top_10()).to_not be(true)
конец
он «не должен иметь секретов открытого текста в кодовой базе»
ожидать(code.has_secrets_in_codebase()).to_not be(true)
конец
конец
описать «Анализ CVE» сделать
он «не должен использовать библиотеки с известными уязвимостями»
ожидать(libraries. have_no_cves()).быть(истина)
конец
он «не должен использовать образ контейнера с известными уязвимостями»
ожидать (container.has_no_cves()). быть (истина)
конец
конец
конец
 
Работоспособность

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

 описать "Стандарты работоспособности" сделать
описать "Проверка операций" сделать
он «должен иметь сервисный модуль Runbook»
ожидать (service.has_runbook()). быть (истина)
конец
он "должен иметь README" сделать
ожидать (service. has_readme()). быть (истина)
конец
он "должен иметь оповещения"
ожидать (service.has_alerts()). быть (истина)
конец
он "должен иметь идентификаторы отслеживания"
ожидать (service.has_tracing_ids()). быть (истина)
конец
конец
конец
 
Заключение

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *