По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
У облачного провайдера нам необходимо арендовать пул виртуальных серверов для создания на его основе облачного аналога перечисленной серверной части сети. К организованной облачной виртуальной инфраструктуре будут иметь доступ все отделения организации посредством VPN-туннелей. Все виртуальные машины создаются посредством гипервизора. Аналогичным образом виртуальные машины могут быть созданы и в обычной сети, но также могут использоваться и отдельные физические серверы. Для облачных же услуг технология виртуализации является основополагающей, поэтому в этом разделе подробнее будет рассмотрена технология виртуализации. В данном случае для организации собственных виртуальных серверов мы пользуемся услугами IaaS (чаще всего в списке услуг именуется как "аренда виртуальных серверов" или похожим образом). Но для организации серверов для, например, корпоративной почты или базы данных можно воспользоваться уже готовыми PaaS и SaaS-решениями, которые предлагаются некоторыми облачными провайдерами. При организации облачной инфраструктуры для крупной организации имеет смысл строить частное облако. Даже пусть оно иногда не будет покрывать все потребности организации и периодически придется превращать его в гибридное. Крупным компаниям нужна не столько экономия, столько полный контроль над обрабатываемыми данными - чтобы конфиденциальные данные не вышли за пределы компаний. Для небольших и средних организаций можно создать облачную инфраструктуру на базе публичного облака. Если компания только начинает свою деятельность, нет смысла покупать физические серверы - можно сразу арендовать виртуальные и сэкономить средства, которые можно потратить с большей пользой. Перевод в облако сразу всей инфраструктуры обусловлен еще и взаимосвязями между серверами и скоростью обмена данными между ними. Поэтому следует учитывать взаимосвязь серверов между собой и тот факт, что из любого офиса теперь скорость скачивания файла из того же облачного хранилища будет ограничиваться максимальной скоростью на сетях интернет-провайдера, однако обмен данными в сетях облачного провайдера будет гораздо выше в силу специализированности построенной сети ЦОД. Виртуальные машины Гипервизор - это программное или микропрограммное обеспечение, позволяющее виртуализировать системные ресурсы. Виртуальные машины в гипервизоре логически отделены друг от друга и не привязаны к аппаратному обеспечению, поэтому вирусы и ошибки на одной виртуальной машине никак не влияют на другие на том же гипервизоре и на аппаратную часть сервера, и могут быть легко перемещены с одного сервера на другой. Гипервизор по своей сути аналогичен операционной системе. Существуют 2 типа гипервизоров: гипервизор 1-го типа устанавливается поверх аппаратной части оборудования, 2-й тип устанавливается поверх операционной системы, а также гибридные. В таблице 1 приведены некоторые примеры гипервизоров. Таблица 1 Примеры гипервизоров Гипервизор Тип Требуемые ОС для установки Гостевые ОС KVM 2 Linux, FreeBSD, illumos FreeBSD, Linux, Solaris, Windows, Plan 9 VMware: ESX Server 1 Не требует ОС Windows, Linux, Solaris, FreeBSD, OSx86 (as FreeBSD), virtual appliances, Netware, OS/2, SCO, BeOS, Haiku, Darwin, others: runs arbitrary OS ESXi Server 1 Не требует ОС Fusion 2 macOS Server 2 Windows, Linux Workstation 2 Windows, Linux VMware ESXi (vSphere) 1 No host OS Same as VMware ESX Server Microsoft Hyper-V Hyper-V 2 Windows FreeBSD, Linux (SUSE 10, RHEL 6, CentOS 6) Hyper-V Server 1 Не требует ОС Xen гиб- рид GNU/Liux, Unix-like GNU/Linux, FreeBSD, MiniOS, NetBSD, Solaris, Windows 7/XP/Vista/Server 2008 (requires Intel VT-x (Vanderpool) or AMD-V (Pacifica)-capable CPU), Plan 9 VirtualBox 2 Windows, Linux, macOS, Solaris, FreeBSD, eComStation DOS, Linux, macOS, FreeBSD, Haiku, OS/2, Solaris, Syllable, Windows, and OpenBSD (with Intel VT-x or AMD-V PowerVM ? PowerVM Firmware Linux PowerPC, x86; AIX, IBM i Таким образом при проектировании корпоративной сети с помощью виртуальных серверов, следует заранее определиться с типом виртуальной машины и совместимых с ней операционных систем. Для облачных виртуальных серверов достаточно учитывать совместимые гостевые ОС, обеспечение работоспособности физических серверов и гипервизора берет на себя облачный провайдер. Создание виртуальной машины или виртуальной сети Для переноса элементов корпоративной сети в облако необходимо арендовать у облачного провайдера один или несколько виртуальных серверов, на которых будут развернуты необходимые нам системы. Часто достаточно обойтись моделью предоставления услуги VPS/VDS, описанной в разделе 2, арендовав несколько виртуальных серверов для каждого элемента инфраструктуры. Готовая виртуальная машина (ВМ) на сервере, по сути, будет представлять из себя два файла: файл конфигурации аппаратной части машины и образ диска этой машины, предназначенный для размещения в нем операционной системы. На диске ВМ помимо ОС размещается все программное обеспечение и файлы пользователей. Оба файла, а значит и вся ВМ целиком, могут быть без особых сложностей перенесены или дублированы с одного гипервизора и сервера на другой, что позволяет гибко распределять серверные ресурсы, создавать и восстанавливать резервные копии данных пользователей, а также помогать в процессе миграции на облачную инфраструктуру с уже заранее заготовленными образами систем. Для создания виртуальной машины на сайте почти любого облачного провайдера можно найти параметры конфигурации и "ползунки" для точной настройки вычислительных ресурсов арендуемой виртуальной машины, подобрав все параметры под цели и задачи сервера. Либо же можно воспользоваться "кейсами" - готовыми наборами настроек. А также часто клиентам предлагаются услуги тестирования, платного или бесплатного, арендуемого сервера, чтобы оценить его возможности и соответствие требованиям. Примеры параметров настройки виртуального сервера приведены на рисунке 1. В первом случае идет выбор именно ресурсов сервера, для дальнейшего развертывания на нем "целого парка виртуальных машин". Во втором случае настраивается конкретно виртуальный сервер данный вариант хорошо подойдет. Разворачивание частного облака позволяет создать и настроить необходимое количество виртуальных машин со своими приложениями, но организация и сопровождение такой структуры будет требовать больших затрат по сравнению с выделенным сервером. После создания виртуального сервера на рабочем столе рабочей станции появляется значок подключения к виртуальному серверу. Далее рассмотрим подробнее облачные решения для необходимых нам серверных структур. Терминальный сервер Как уже было упомянуто в разделе 1, терминальный сервер будет представлять собой сервер с заранее установленным на него приложением для удаленной работы с ним посредством "тонкого клиента". Например, такая возможность будет востребована при групповой работе с 1С. В таком случае сервер должен быть связан с сервером базы данных. Это означает, что клиенты подключаются к серверу приложения, а сервер приложения взаимодействует с сервером базы данных. Оба сервера должны находиться в облаке, чтобы между ними была хорошая связь. К терминальному серверу приложений сотрудники могут осуществлять подключение посредством протокола RDP. К приложению (1С, например) может быть организован доступ посредством публикации базы через web-сервер и, соответственно, работой с web-интерфейсом 1С, подключением с помощью "тонкого" или "толстого" клиента 1С или же подключением ко всему серверу терминалов по протоколам удаленного доступа (RDP и другие). Файловый сервер По сути, работа с файловым сервером в облаке ничем не отличается от того, если бы он был в локальной сети. Подключение к файловому серверу обычно осуществляется через протокол FTP (File Transport Protocol) с помощью файлового проводника. Однако следует тщательно взвесить решение о переносе файлового сервера в облако, т.к. объем данных при сообщении с сервером может сильно повлиять на тарифы услуг Интернет. Почтовый сервер В качестве почтового сервера, согласно перечню облачных сервисов, представленному в разделе 2, чаще всего облачные провайдеры используют Microsoft Exchange Server. Он является одним из самых распространенных ПО для корпоративной почты. Подключение к почтовому серверу может осуществляться аналогично другим терминальный приложениям: web, клиенты или удаленный доступ. Также требует доступа к базам данных Виртуальное рабочее место VDI или виртуальное рабочее место позволяет сотрудникам организации использовать рабочую станцию с любой конфигурацией для работы из любого места и в любое время. Для подключения к VDI чаще всего используется специальное клиентское ПО, или же иногда это может осуществляться из браузера. Web-сервер Формально web-приложение также должно быть соединено c сервером базы данных и может быть разбито на 3 части: исполняемый модуль на стороне браузера клиента; исполняемый модуль на стороне сервера; база данных. База данных представляет собой систематизированный набор данных для сетей и пользователей и управляемый посредством системы управления базами данных (СУБД). Пример СУБД MySQL. Сервер печати Следует учесть, что сервер печати однозначно не требует переноса в облако, т.к. выполняет задачу сообщения с офисным оборудованием, таким как принтеры и факсы. Конфигурация сервера Развертывание терминального сервера, а в частности внедрение продуктов 1С одна из самых распространенных задач системны администраторов. И подбор серверной аппаратной конфигурации под данную задачу может служить хорошим примером требований серверных систем к техническим параметрам оборудования. Рассмотрим несколько вариантов организации и аппаратной конфигураций для развертывания 1С сервера с базой данных. Можно предложить 3 варианта: Один сервер с файловой 1С; Один сервер с виртуальными машинами 1С и БД; Два физических сервера: один терминальный 1С, второй с БД. В первом случае будет организован терминальный сервер, на котором будет использоваться файловая версия 1С, таким образом БД будет находиться в файловой системе самого сервера вместе с программой 1С. Для большого количества пользователей разработчик рекомендует использовать систему "клиент-сервер". Организовать терминальный сервер, сервер БД и сервер 1С на одной операционной системе все равно можно, но это будет подвергать сомнению стабильность и информационную безопасность такой системы. Во втором случае как раз-таки и используется такая система, но оба сервера будут виртуальными на одном физическом. Данный вариант и используется в облачной инфраструктуре. Первый сервер будет содержать серверную часть 1С, второй базу данных. В третьем случае будут отдельно использоваться два сервера, а базы данных и программа будут разделены. Для конфигурации общего терминального сервера с двумя виртуальными машинами с расчетом работы примерно на 50 человек должно хватить следующей конфигурации: 10 ядер центрального процессора: по 6-8 терминальных сессий на одно ядро примерно 8 ядер, 1-2 ядра на базу данных, дополнительно еще запас, но для облачных серверов можно в любой момент докупить дополнительную вычислительную мощность; 64 Гб оперативной памяти: операционная система (например, Windows Server) 2 Гб база данных 4-6 Гб сервер 1С 2-4 Гб примерно 700 Мб на каждого пользователя 35 Гб SSD (для быстрых операций) и SAS (для хранения) память данных в условиях облачной инфраструктуры выбор дисковой подсистемы сводится к выбору конкретного типа дисков и их объемов: быстрых твердотельных накопителей (SSD) для быстрых операций чтения/записи и/или более медленных, но вместительных жестких дисков жестких дисков с интерфейсов SAS, подходящих для хранения баз данных. Подключение к облаку Для подключения сотрудников к корпоративному облаку могут применяться комбинации сразу нескольких решений, каждое из которых более детально рассмотрено в таблице 2. Таблица 2 Способы подключения к инфраструктуре в облаке Способ подключения Назначение Требования со стороны сервера Требования со стороны клиента Веб-доступ Доступ к сайту, расположенному на web-сервере через протокол HTTP/HTTPS Наличие выделенного терминального сервера + служба TS Web Access Использование адреса сайта для доступа к ресурсу с помощью браузера RDP Доступ к виртуальным серверам Наличие выделенного терминального сервера Запуск клиента RDP RemoteApp Доступ к терминальным сессиям Наличие конфигурационног о файла со списком программ, имеющим доступ к приложению Запуск сконфигурированного rdp-файла или иконки приложения для подключения к приложению по RDP Remote access VPN Подключение каждого пользователя к серверу через VPN-туннель Наличие сконфигурированного VPN- устройства/сервера. Запуск ярлыка для подключения к VPN-серверу. Продолжение таблицы 2 VPN site-to-site Подключение офиса к серверу через VPN- туннель Наличие двух сконфигурированных VPN-серверов. Пример: VPN-сервер в компании и VPN- сервер в облаке. Отсутствие необходимости создания и запуска ярлыка VPN- подключения. Обращение к ресурсам филиала / центрального офиса / облака напрямую. При обращении к ресурсам VPN- подключение организуется автоматически на уровне серверов. DirectAccess Автоматическая установка связи со всей корпоративной сетью сразу Наличие одного или более серверов DirectAccess в составе домена. Наличие центра сертификации (PKI). Windows - инфраструктура. Только Windows Компьютер клиента должен входить в состав домена. Отсутствие необходимости в создании и запуске ярлыка подключения. VDI Доступ к отдельному виртуальному рабочему месту Развернутая инфраструктура виртуальных рабочих столов VDI Пользователь получает свой собственный виртуальный рабочий стол, к которому можно подключаться с помощью тонкого клиента с любой рабочей станции. Выбор каждого конкретного способа подключения может зависеть от потребностей пользователей, что будет быстрее и удобнее для работы. Облачная инфраструктура корпоративной сети Теперь мы можем составить схему облачной инфраструктуры корпоративной сети. Это будет модифицированная схема из раздела 1. Схема представлена на рисунке:
img
Первые два типа систем (IPS - intrusion prevention system & IDS - intrusion detection system) появились в 1986 году как результат научной работы, и их базовые принципы до сих пор используются повсюду – в системах предотвращения и обнаружения, в NGIPS и NGFW – словом во всех системах, которые были упомянуты в заголовке. В статье мы расскажем, как IPS/IDS изменялись со временем, с какими проблемами сталкивались разработчики и что можно от них ожидать в будущем. Итак, как мы уже сказали, системы обнаружения угроз и системы предотвращения угроз появились после написания научной статьи некой Дороти Деннинг, и называлась эта статья «Модель обнаружения угроз», и благодаря этой статье Стэнфордский Исследовательский Институт разработал нечто под названием Intrusion Detection Expert System/ (IDES). Вольно это можно перевести как экспертная система обнаружения угроз. Она использовала статистическое обнаружений аномалий, сигнатуры и хостовыепользовательские профили для детектирования редискового поведения у систем. Таким образом, она могла определить если такие протоколы как FTP или HTTP были использованы некорректно и даже могла определять атаки с отказом обслуживания (DoS). 2000 - 2005: Обнаружение предпочтительнее предотвращения В ранних 2000х системы обнаружения считались хорошим тоном. А до этого межсетевые экраны были очень эффективны для ландшафта угроз безумных 90х годов. Фаерволы обрабатывали трафик относительно быстро, так как в них не было глубокой инспекции пакетов, то есть вы не знали, что это за трафик приходит к вам в сеть – фаерволы реагировали только на установленные в правилах (листах контроля доступа) порты, протоколы иили сетевые адреса. В начале 2000х появились новые атаки, такие как SQL-инъекции и прочие, и они моментально завоевали место на подиуме в арсенале взломщиков. И вот на этом этапе IDS системы и пригодились – а время систем предотвращения угроз еще не настало. В то время некоторые организации боялись использовать IPS так как такая система потенциально могла заблокировать безвредный трафик. Как мы более подробно описывали в нашей статье про IPS и IDS, IPS ставится «в разрыв» и блокирует подозрительные соединения, полностью разрывая коннект и связь между отправляющей и принимающими сторонами. Но как вы могли понять, такое соединение могло стать подозрительным просто по причине какой-то аномалии в подключении и грубо говоря «глюке». Таким образом, IDS системы просто сообщали о такой аномалии и ничего не блокировали, чтобы сисадмин мог среагировать и проверить - правда ли это что-то плохое или же это просто доброкачественная аномалия. По этой причине в то время рынок для систем предотвращения угроз был настолько мал, что существовало всего несколько IPS вендоров. То есть идеей было что нужно пропускать любой трафик, а разберемся, мол, уже опосля – риск потери хорошего трафика был страшнее угрозы взлома. В это время сигнатуры писались для обнаружения эксплойтов, но не уязвимостей – то есть для каждой уязвимости было 100 разных способов эксплойта. Как только злоумышленники находили уязвимость, они заставляли разработчиков IDS исходить потом и писать сотни разных сигнатур для эксплойтов – все только для того, чтобы система обнаружения отправила тревогу админу. И вендоры IDS хвастались количеством имеющихся у них сигнатрур, будто это выгодно отличало их от конкурентов – но как вы понимаете, это не было корректным критерием оценки. В общем и целом, механизмы тогда насчитывали следующее полчище методов – совпадение по паттернам, строкам, аномалиям и даже эвристический анализ. Принятие IPS - год 2005 Когда в 2005 году системы предотвращения начали становится популярнее, большее количество вендоров стали соревноваться за место под солнцем на растущем рынке, и перестали хвастать самыми длинными сигнатурами. Опять же, по причине установки «в разрыв», клиенты боялись, что все эти сигнатуры будут замедлять сеть, так как каждое соединение должно быть пропущено через них. Таким образом, было решено сменить вектор написания сигнатур на другие – те, которые будут базироваться не на эксплойте, а на самой уязвимости. Было получено опытным путем, что если в системе более 3500 сигнатур, то это будет заметно сказываться на производительности. Сегодня производители все еще помещают в систему как новые сигнатуры, так и некую классику уязвимостей, которую злоумышленники могут использовать. 2006 – 2010: Настает время производительных IPS/IDS комбайнов Вендоры, которые предлагали гибридные системы, быстро обошли конкурентов – они предлагали гораздо более производительные системы, вплоть до 5 Гбитсек, и могли мониторить сегментированные сети, DMZ, серверные фермы с веб-приложениями и площадь внутри периметра. К примеру, сегодня производительные IPS устройства легко дают более 40 гигабит в секунду. В итоге, клиенты начали массово переходить на системы предотвращения вторжений и рынок начал очень быстро расти. А когда появился стандарт безопасности PCI DSS начал требовать от организаций поддержу оплаты картами установки или IDS, или МСЭ с возможностью фильтрации веб-приложений, очень много организаций купили гибридные системы. И прошло уже много лет с момента рождения технологии, так что технологию порядочно оттюнинговали и подрихтовали, так что, ложно-положительных срабатываний стало гораздо меньше. Однако, в этот же момент начала расползаться эпидемия ботнетов. И самым популярным способом стало помещение зловредных приложений на популярных сайтах, и, если какой-нибудь браузерный плагин вроде Java или Adobe Flash был с уязвимостью, при клике на соответствующий документ вредонос тихонько скачивался на компьютер. Кроме того, в 2008 году злоумышленники активно использовали перенаправляющие ссылки на вредоносные сайты, так что IDS/IPS вендоры начали также добавлять списки IP-адресов вредоносных командных центров и их веб-адресов – если эти ресурсы содержали на себе вредоносы. 2011 – 2015: Системы предотвращения вторжений следующего поколения В эти годы был переломный момент для вендоров в сфере ИБ – так как они стали выпускать системы предотвращения угроз следующего поколеня, которые включали в себя такие фичи как контроль пользователей и приложений. Таким образом, традиционный IPS смотрит в сетевой трафик на предмет известных аттак и что-то делает с этим трафиком, в зависимости от модели развертывания, а IPS следующего поколения делает тоже самое, но кроме того он покрывает гораздо больше протоколов (вплоть до 7 уровня) для защиты от большего количества атак. Кроме того, он также позволяет гибко контролировать доступ к приложениям – то есть, например, чтобы можно было лайкать фотки в VK, но нельзя было их заливать. И более того – чтобы это могли делать только определенные группы пользователей. Следующее дополнение к IDS/IPS системам появилось после взлома RSA (компании, которая занимается мультифакторной аутентификацией) в 2011 году – тогда новостные ресурсы назвали это APT (Advanced Persistent Threat)-атакой, то есть сложной постоянной угрозой. Позже было сказано, что это была фишинговая атака, в которой содержался документ с вредоносом внутри. Клиенты стали спрашивать ИБ вендоров, могут ли они их защитить от подобных вещей, если у вендора нет сигнатуры на данный конкретный вредонос, и ответом вендоров было предоставление такой фичи как эмуляция и песочницы – но это потребовало около 18 месяцев для большинства вендоров. Так что компании FireEye и Fidelis оказались в фазе бурного роста, так как они предоставляли такие технологии песочницы, до которых всем было очень далеко. Только подумайте, песочницы впервые за всю историю могли обнаружить до сих пор неизвестную атаку нулевого дня. Как работает песочница: неизвестный исполняемый файл или документ сначала попадает в песочницу, где он запускается в разных операционных системах и алгоритм пытается имитировать действия пользователя – клавиши стучат, мышка елозит и кликает, время прокручивается – все в надежде на то, что вредонос вылупится и себя покажет. Вендоры пошли чуть дальше. Если вредонос себя проявлял, то его хэш-сумма (MD5 или SHA) сохранялась для того, чтобы в будущем всегда ловить такие файлы. Соответственно, если другой клиент на такой же системе получал тот же файл – то он не пропускался в сеть и звучала тревога. Такие системы получили название Next Generation Firewall – межсетевых экранов следующего поколения. Конечно, Гартнер использовал этот термин еще в 2003 году и предсказал, что они межсетевые экраны будут содержать внутри себя сложную IPS систему, но индустрия не принимала подобные устройства вплоть до 2013 года. 2018 – и далее: Межсетевые экраны следующего поколения Сегодня большинство организаций используют NGFW и список их фич только растет. Так как эти МСЭ отличаются различными фичами, организациям придется выбирать в зависимости от точности поставленной задачи и их требований. Опять же, есть за и против МСЭ следующего поколения: за – нужно купить только пару железяк вместо почти десятка. Против – это все один вендор, и его мудрость ограничена, то есть не существует лучшего вендора, который знал бы все и сразу. Таким образом очень неплохой практикой является комбинировать устройства защиты от разных производителей и разбавлять их «мудрость» между собой. Важно помнить, что любое устройство защиты всегда хорошо только настолько, насколько богаты знания и опыт, стоящие за этим устройством. Есть даже специальный термин – Threat Intelligence. Такие системы и базы знаний есть у всех больших ИБ вендоров. Более того, они есть полностью бесплатные и открытые – например, VirusTotal. Сегодня ландшафт угроз постоянно меняется и большинство вендоров сконцентрировано на машинном обучении, чтобы алгоритмы анализа файлов всегда улучшались, а количество шума и ложных срабатываний стремилось к минимуму. Но это бесконечная игра в кошки-мышки, и на каждый ход производителей хакеры придумают что-нибудь новое, что позже смогут нейтрализовать вендоры.
img
Процесс анализа программного кода должен быть максимально автоматизирован. Когда вы создаете запрос на включение изменений, как минимум, вам нужно запустить модульные тесты и статический анализ программного кода в функциональной ветке. Средства автоматизации могут многое рассказать о качестве кода: метрики, покрытие кода модульными тестами, обнаружение дублированных строк и т.д. Однако есть как минимум 50 вещей, которые нельзя проверить автоматически. Они нуждаются во внимательном взгляде опытного проверяющего (это дает нам хоть какую-то надежду на то, что роботы не заменят разработчиков в ближайшем будущем). Требования Программный код реализует все функциональные требования, которые необходимы заказчику? Программный код удовлетворяет всем нефункциональным требованиям, таким как производительность и безопасность? Если нефункциональные требования не были упомянуты заказчиком, то этот вопрос необходимо уточнить у проектировщика или у самого заказчика.  Условия сопровождения Помещены ли все интерфейсы, классы и т.д. на соответствующий прикладной уровень в соответствии с архитектурой  Onion/Clean ? Не изобретаете ли вы колесо, когда пишете программный код? Можно ли его заменить чем-то, что уже существует и что предоставляет какая-либо сторонняя библиотека?  Есть ли уже реализованная логика или какие-то ее фрагменты в кодовой базе? Правильно ли была выбрана область жизненного цикла для интерфейса и реализации в контейнере внедрения зависимостей? Являются ли реализованные функции детерминированными (то есть всегда ли они выдают один и тот же результат для одних и тех же входных данных)? Все ли зависимости явно внедряются через конструктор типов? Есть ли сильная связанность между классами, которая может затруднить повторное использование кода? Используются ли  объекты-значения вместо элементарных типов данных для того, чтобы избежать проблемы одержимости элементарными типами? Соответствуют ли реализованные компоненты, такие как функции, классы, интерфейсы и модули,  принципу единственной обязанностей ? Расширяются ли существующие функциональные возможности при помощи декораторов, технологий аспектно-ориентированного программирования (принципа открытия-закрытия) или они модифицируются на месте? Правильно ли реализованы механизмы синхронизации потоков при доступе к объектам-одиночкам в веб-приложениях? Используются ли по возможности  неизменяемые типы данных вместо изменяемых для того, чтобы избежать побочных эффектов? Добавлена ли функция ведения журнала с верными  уровнями ведения протокола в основные места кода, которые требуют отслеживания? Производительность Правильно ли были выбраны  структуры данных ? Например, используется ли структура Hashtable вместо массива, когда нужно часто искать значения, для того, чтобы избежать линейного поиска? Распараллелены ли длительные операции между всеми доступными ядрами для того, чтобы использовать ресурсы компьютера максимально эффективного? Выполняет ли программный код большое количестве  операций по выделению памяти для объектов в куче, оказывая тем самым дополнительную нагрузку на программу сборки мусора? Кэшируются ли данные, которые были считаны из базы данных, локально или в удаленном кэше? Сколько раз текущий код обращается к базе данных? Возможно стоит получить все данные за одно или несколько обращений? Выполняет ли код все обращения к базе данных, ввод-вывод и другие блокирующие вызовы асинхронно? Использует ли код  пул потоков по максимуму вместо того, чтобы создавать новые потоки? Правильно ли выбран баланс между  нормализацией и  денормализацией при создании дополнительных таблиц базы данных? Правильно ли добавляются или исправляются индексы, если запрос на включение изменений содержит новые SQL-запросы? Возникает ли  проблема с N+1 запросами при извлечении данных из базы данных при помощи фреймворка ORM? Установлен ли правильный уровень изоляции транзакций в хранимых процедурах? Возвращают ли SQL-запросы избыточные данные из базы данных, которые не требуются для кода приложения? Используется ли что-то вроде  SELECT * или что-то подобное? Модульное и интеграционное тестирование Полностью ли модульные тесты покрывают дополнительную логику? При появлении исправлений в логике, появляются ли изменения в соответствующем модульном тесте? Всегда ли все реализованные модульные или другие виды тестов ведут себя детерминировано? Например, приостанавливают ли они выполнение потока на какой-то определенный период времени перед утверждением (что по своей сути является ошибочным шаблоном)?  Все ли модульные тесты реализованы в соответствии с принципами  F.I.R.S.T. ? Есть ли какие-либо признаки проблем в модульном тестировании, такие как проблемы с  логикой проверки условий ,  рулеткой с утверждениями ,  дублированием утверждений и другие? Добавлен ли интеграционный тест, как минимум, для happy-path-сценария (сценария счастливого пути) реализованной функции? Все ли зависимости тестируемого объекта имитируются для того, чтобы модульный тест случайно не превратился в интеграционный и не выполнился быстрее положенного? Изолированы ли модульные и интеграционные тесты друг от друга? Конечные точки API Выбираются ли HTTP-команды, такие как  GET, POST, PUT, DELETE и другие, в соответствии с действием их конечной точки? Отвечает ли каждая конечная точка API за выполнение лишь одной бизнес-операции? Или все же нескольких? Возвращает ли конечная точка API правильный код состояния? Например, не возвращает ли она код 401 вместо 500 при несанкционированном запросе? Сжимаются ли объемные ответы перед их отправкой вызывающей стороне? Защищены ли конечные точки API политиками аутентификации и авторизации? Позволяет ли API, который возвращает большой список объектов, фильтровать его и разбивать на страницы? Является ли конечная точка API GET идемпотентной? Используются ли имена существительные вместо глаголов в именах конечных точек API? Критические изменения Имеются ли в конечной точке API такие критические изменения, как переименование API, удаление или переименование его параметров? Имеются ли критические изменения в полезных данных сообщения (в случае, если используется брокер сообщений), например, удаление или переименование его свойств? Повлияют ли такие изменения в схеме базы данных, как удаление столбцов или таблиц, на другие службы системы? Системная среда Насколько загружен ЦП и сколько оперативной памяти потребляет код при выполнении запроса на включение изменений? Будет ли в средах, в которых будет развернут код (среда тестирования, среда приёмочного пользовательского тестирования, производственная среда), достаточно мощный процессор и достаточный объем оперативной памяти для эффективного выполнения кода? Будет ли реализованная логика, алгоритмы, структуры данных и т.д. работать достаточно быстро на большом наборе данных, который может быть в производственной среде? Документация Была ли изменена документация для того, чтобы отразить новые изменения программного кода (документация API, документация по структуре, проектная документация)? Создается ли тикет  технических недоработок , если запрос на внесение изменений содержит неэффективный или «грязный» код, который сейчас невозможно перестроить из-за недостаточного количества времени? Заключение Количество пунктов, на которых проверяющий должен заострить свое внимание, зависит от конкретного проекта и даже от конкретного запроса на внесение изменений. Ваш с коллегами мозговой штурм (если вы примите во внимание вышеприведенные пункты) может значительно снизить риск того, что вы забудете о чем-то важно при анализе программного кода.   
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59