Основа траблшугинта. Работает ли метод ТРИЗ
Для решения поставленной задачи перед траблшутером, он не учитывает математические правила, законодательные нормы, особенности бизнеса, или другие какие-либо рамки обычного представления ситуации. Поиск выхода и устранение причин возникновения проблем достигаются путем применения различных методов решения изобретательских задач.
Основные методы решения изобретательских задач:
- Мозговой штурм: поиск идеального решения, предлагая постановку задач и способов их решения учитывая все возможные ресурсы;
- Определение возможных характеристик по определенным критериям. Используется при определении целевой аудитории;
- Метод аналогий (синектика), включающий в себя личностную, прямую и фантастическую аналогии;
- Метод фокальных объектов, представляет собой поиск идей в необычных направлениях;
- И другие.
Методика ТРИЗ Г. С. Альтшуллера позволяет:
- Решать научные и исследовательские задачи;
- Выявлять проблемы этих задач при работе в сложных системах;
- Выявлять причины брака, противоречий;
- Максимально эффективно использовать имеющиеся ресурсы для решения проблем;
- Объективно оценивать решения.
Те идеи, которые разрабатываются траблшутером для разрешения поставленных перед ним задач, в последствие досконально разрабатываются всей его командой, состоящей из специалистов различных областей на предмет возможности внедрения и реализации.
История из жизни #2
Не так давно я с коллегами проходил обучение инструментам ТРИЗ. Перед нами была поставлена задача: как повторно использовать воду, применяемую для охлаждения вагранной печи, тем самым сэкономить на экологических взносах.
Была сформирована команда из трех человек: главный механик, руководитель группы развития ПС и девушка, которая всю жизнь занималась логистикой и представления не имела, как работает вагранная печь и зачем там нужна вода.
В итоге, задавая нам постоянно уточняющие вопросы, она подвела нас к решению данной проблемы. И наша команда разработала систему, которая не только исключает сбросы воды, но и снижает закупку оборотной воды на 80%.
Часто бывает, что неопытный сотрудник, задавая самые разные (порой «глупые») вопросы, наводит команду на решение проблемы.
Как решать проблемы профессионально?
HR-специалисты ежедневно сталкиваются с решением проблем различной сложности. Основы траблшутинга помогут взглянуть на них с другого ракурса и делать это эффективнее.
1. Концентрируйтесь на решении, а не на проблеме
Думая о проблемах, вы погружаетесь в отрицательные эмоции. Сосредоточившись на поиске решения, вы сохраняете спокойствие и трезвость ума.
2. Рассматривайте все решения
Не отсекайте даже нелепые идеи. Часто бывает так, что смешные и казалось бы неподходящие способы становятся основой серьезных и результативных решений.
3. Выключите эмоции
Проблема — признак того, что в существующей системе что-то пошло не так. Просто пришло время искать новые пути и решения. Не стоит негативно оценивать случившееся, эмоции будут вам только мешать.
4. Избавьтесь от негативного мышления
Запрограммируйте свои мысли и высказывания на «что если…», избегайте отрицательных формулировок «я не думаю…», «это неправильно…». Освободившись от словесного негатива, вы сможете мыслить более свободно и креативно.
5. Упрощайте
Люди склонны все усложнять, а вы делайте наоборот — упрощайте. Не углубляйтесь в проблему, а отстранитесь, обобщите ее. Так, вы увидите очевидные решения. Помните, самые простые идеи иногда помогают решать сложные вопросы.
Особенности Docker
Итак, что же сделать, чтобы со всем этим работать?
Во-первых, поймите, что Docker – это не страшно, это не какая-то магия, его вполне можно поставить к себе на компьютер и попробовать с ним работать. Это достаточно удобно, особенно если вы хотите попробовать какой-нибудь сервис. Например, вы хотите внедрить в код-ревью. Мне нравится Upsource – это достаточно удобный сервис для код-ревью. Вместо того, чтобы ставить на какой-то машине, вы можете скачать официальный образ, развернуть его у себя, попробовать с ним поработать и убрать, если он вам не подойдет.
Запуск тестов фактически не отличается – код, который использовался для запуска теста в Jenkins, перекочевал как каковой с Windows-машин на Linux-машины
Единственное, на что нужно обращать внимание – это регистр, потому что Linux регистрозависимый, какие слеши вы используйте в путях, и будьте аккуратнее с правами доступа на уровень файловой системы.
Kubernetes – это тоже в принципе не страшно. Можете поставить себе minikube
Он работает и под Windows в том числе. Это такой кластер на одну вашу машину. Вы можете легко позапускать в нем какие-то данные.
Изучение спецификаций
Перед началом работы над новым проектом Вам нужно будет изучить одну или
несколько спецификаций.
Несколько — потому что проект может иметь спецификацию, которая описывает
бизнес логику, спецификацию интерфейсов и, например, документацию для
поддержки проекта.
То какая информация попадает в одну спецификацию, а какая в другую зачастую
завист от менеджера ведущего проект, либо может быть чётко прописана
в корпоративных правилах.
Interfaces — спецификация интерфесов
В любом случае, в спецификации интерфейсов мы ожидаем увидеть описание
API
и задача тестировщика здесь сводится к тому, чтобы
- Связать бизнес логику с запросами, описанным в спецификации интерфейсов.
-
Проверить качество спецификации а именно уточнить не забыли ли
разработчики описать какое-либо действие. Насколько понятно названы запросы и т.д.
Так как логика разработчиков отличается от логики тестировщиков бывает полезным
уточнить какие из перечисленных запросов создаются непосредственно клиентами
а какие являются вторичными, то есть нуждаются в запросе триггере, который приходит
от клиента или бэкенда.
Результатом проверки спецификации интерфейсов будет карта составленная в виде
документа, либо просто в воображении тестировщика, которая накладывает на
бизнес процессы соответсвующием им запросы либо цепочки запросов.
Parsing the Data
The next stage in configuring Logstash to parse the data is crucial because this part of the process will add the context you need to your containers’ logs and enable you to analyze the data more easily.
Three main sections need to be configured in the Logstash configuration file: input, filter, and output. (If you’re running Logstash 5.x, this file is located here: /usr/share/logstash/pipeline).
The input depends on which log shipping method you are using. If you are using Filebeat, then you need to specify the Beats input plugin. If you are using logspout or the syslog logging driver, then you need to define syslog as the input.
The filter section contains all the filter plugins you wish to use to break up the log messages. These will greatly depend on the type of container you are logging and the generated log messages for that particular container.
There is no easy way to configure this section because every container is outputting a different type of logs. There is plenty of trial and error involved, but there are some online tools to help you along the way such as the Grok Debugger. The export section will specify the Logstash output—in our case, the Elasticsearch container.
Here is a basic Logstash configuration example for Docker logs being shipped via syslog. Note the usage of a series of filters (grok, date, mutate, and the if conditional):
input { syslog { port => 5000 type => "docker" } } filter { grok { match => { "message" => "%{SYSLOG5424PRI}%{NONNEGINT:ver} +(?:%{TIMESTAMP_ISO8601:ts}|-) +(?:%{HOSTNAME:service}|-) +(?:%{NOTSPACE:containerName}|-) +(?:%{NOTSPACE:proc}|-) +(?:%{WORD:msgid}|-) +(?:%{SYSLOG5424SD:sd}|-|) +%{GREEDYDATA:msg}" } } syslog_pri { } date { match => } mutate { remove_field => } mutate { remove_tag => } mutate { gsub => ", "" ] } if =~ "^ *{" { json { source => "msg" } if "_jsonparsefailure" in { drop {} } mutate { remove_field => } } } output { elasticsearch { hosts => "elasticsearch:9200" } }
Do not forget to restart the Logstash container to apply the new configurations. To make sure your pipeline is working, first list Elasticsearch indices with:
curl 'localhost:9200/_cat/indices?v'
You should see an index with a Logstash pattern:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open logstash-2017.03.05 kgJ0P6jmQjOLNTSmnxsZWQ 5 1 3 0 10.1kb 10.1kb yellow open .kibana 09NHQ-TnQQmRBnVE2Y93Kw 1 1 1 0 3.2kb 3.2kb
Open Kibana again.
You will notice that the ‘logstash-*’ index is identified by Kibana. Hit the Create button, and you will see your logs displayed in Kibana.
Testing the Installation
To make sure all is working as expected, perform the following actions.
First, curl Elasticsearch with:
curl localhost:9200
You should see the following output:
{ "name" : "W3NuLnv", "cluster_name" : "docker-cluster", "cluster_uuid" : "fauVIbHoSE2SlN_nDzxxdA", "version" : { "number" : "5.2.1", "build_hash" : "db0d481", "build_date" : "2017-02-09T22:05:32.386Z", "build_snapshot" : false, "lucene_version" : "6.4.1" }, "tagline" : "You Know, for Search" }
Open Kibana at HTTP://:5601:
As you will notice, you are now required to enter an index pattern, which is only possible once you have indexed some logs. We will get to this later.
Optional endpoints
Logging plugins can implement two extra logging endpoints:
Defines the capabilities of the log driver. You must implement this endpoint for
Docker to be able to take advantage of any of the defined capabilities.
Request:
Response:
Supported capabilities:
ReadLogs — this tells Docker that the plugin is capable of reading back logs
to clients. Plugins that report that they support ReadLogs must implement the
/LogDriver.ReadLogs endpoint
Reads back logs to the client. This is used when is
called.
In order for Docker to use this endpoint, the plugin must specify as much when
is called.
Request:
is the list of options for reading, it is defined with the following
golang struct:
- defines the oldest log that should be sent.
- defines the number of lines to read (e.g. like the command )
-
signals that the client wants to stay attached to receive new log messages
as they come in once the existing logs have been read.
is the same type defined in . It should be used
to determine what set of logs to read.
Response:
The response should be the encoded log message using the same format as the
messages that the plugin consumed from Docker.
Examples, Usage, plugins, docker, documentation, user guide, logging
Where are Docker logs stored?
You should find the docker logs in the /var/lib/docker/containers directory on the host system. This directory contains the log files related to all containers in their individual directories. You can identify the directories with the container ID.
I used the to find that is the container ID of the Nextcloud container.
If I look into the directory where docker logs are stored:
There are currently four containers running, and you can see that the third one matches the one we need to look into (it begins with ).
If you check the contents of this directory, you can see that our log file sits right there!
Therefore, the corresponding log file is 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log which is the same file that you were reading when I ran the command in the beginning.
Let me quickly verify that:
The log contents are the same, but since I’m reading the log file directly from the host, this has a lot of jargon compared to the command used earlier.
Программа как уровни абстракции
Большинство грамотно созданных программ подобны пирамиде с уровнями абстракции. Классы/функции верхних уровней разбивают сложную задачу на подзадачи, тогда как классы/функции нижних уровней абстрагируют реализацию подзадач, таких как черные ящики, и предоставляют интерфейсы для вызова верхним уровнем. Эта парадигма облегчает программирование, поскольку каждый уровень сосредоточен на своей логике, не беспокоясь о всевозможных деталях.
Уровни абстракции
Например, веб-сайт может состоять из следующих уровней: бизнес-логика, HTTP и TCP/IP. Реагируя на URL-запрос, уровень бизнес-логики решает, какую веб-страницу показать, и отправляет ее контент на уровень HTTP, где он превращается в HTTP-ответ. Следующий уровень TCP/IP преобразует HTTP-ответ в пакеты TCP и рассылает их.
Ведите логи только на правильных уровнях
Как следствие абстракции, разные уровни имеют разные степени понимания выполняемой задачи. В предыдущем примере уровень HTTP не владел данными ни о количестве отправляемых пакетов TCP, ни о намерении пользователей в момент URL-запроса. Предпринимая попытку логирования, разработчикам следует выбрать правильный уровень, который содержит полную информацию о переходах состояний и причинах.
Вернемся к нашему примеру проверки корректности номера социального страхования. Допустим, что логика его проверки обернута в класс Validator следующим образом:
Есть еще другая функция, которая проверяет запрос, обновляющий информацию о пользователе, и вызывает проверку номера социального страхования.
Существует два местоположения (A и B) для записи логов об ошибке проверки номера социального страхования, но только B владеет достаточной для этого информацией . В A программа не знает, ни какой запрос она обрабатывает, ни от какого пользователя он поступает. Логирование просто добавляет деталей. Будет лучше, если validateUserUpdateRequest выбросит ошибку из вызывающего компонента (validateRequest), содержащего больше контекста для лога.
Однако это вовсе не означает, что логирование на нижних уровнях программы совершенно необязательно, особенно когда они не раскрывают ошибки верхним уровням. Например, сетевой уровень может иметь встроенную логику повторных попыток, из чего следует, что верхние уровни не замечают проблем с прерывающимися соединениями. В общем, нижние уровни могут вести логи больше на уровне DEBUG, чем на INFO, в целях сокращения многословности. При необходимости разработчики могут настроить уровень лога для получения большего количества деталей.
Limitations and Challenges of Docker Logging
Docker makes containerized application deployment easier, faster, and streamlines it with limited resources. Log management and analysis are handled differently with Docker as compared to a traditional system, which introduces a new set of challenges and limitations. From storing logs in a file system to forwarding them to a central repository, Docker logging has some pain points you’ll need to overcome with a deeper understanding of Docker capability.
The Only Compatible Driver Is json-file
The json-file driver is the only one that works with the command, a limitation of Docker logs. When you start using any other logging drivers, such as Fluentd or Splunk, the command shows an error and the Docker logs API calls will fail. Also, you won’t be able to check the container logs in this situation.
Docker Syslog Impacts Container Deployment
The reliable way to deliver logs is via Docker Syslog with TCP or TLS. But this driver needs an established TCP connection to the Syslog server whenever a container starts up. And the container will fail if a connection is not made.
Your container deployment will be affected if you face network problems or latency issues. And it’s not recommended that you restart the Syslog server because this will drop all the connections from the containers to a central Syslog server.
Potential Loss of Logs with Docker Syslog Driver
The Docker syslog driver needs an established TCP or TLS connection to deliver logs. Note that when the connection is down or not reachable, you’ll start losing the logs until the connection reestablished.
Multi-Line Logs Not Supported
Generally, either of two patterns is followed for logging: single-line per log or multiple lines with extended information per log, like stack traces or exceptions. But with Docker logging, this is a moot point, because containers always broadcast logs to the same output: .
Multiple Logging Drivers Not Supported
It’s mandatory that you use only a single driver for all of your logging needs. Scenarios where you can store logs locally and push it to remote servers are not supported.
Logs Can Miss or Skip
There’s a rate limitation setting at the Docker end for journald drivers that takes care of the rate that logs get pushed. If it exceeds, then the driver might skip some logs. To prevent such issues, increase the rate limitation settings according to your logging needs.
Запуск Apache 2.4 с модулем 1С внутри Docker контейнера
Про Apache и про Linux слышали, наверное, все. А вот про Docker пока нет, но он сильно набирает популярность последнее время и не зря. Поделюсь своим опытом и дам пошаговую инструкцию настройки веб-сервера Apache с модулем 1С внутри Docker контейнера на Linux хосте. При этом сам сервер 1С может находиться совсем на другой машине и на другой операционной системе
Это не важно, главное чтобы Apache смог достучаться до сервера 1С по TCP. В статье дам подробное пояснение по каждой используемой команде со ссылками на документацию по Docker, чтобы не создавалось ощущение непонятной магии
Также прилагаю git репозиторий с описанием всей конфигурации, можете попробовать развернуть у себя буквально за 10 минут.
История из жизни #1
Притча о том, что проблемы нужно решать, а не сокрушаться по поводу их наличия.
Один профессор так учил своих студентов. Он взял в руки стакан, наполненный водой, и стал его держать на вытянутой руке.
— Как вы думаете, что будет, если я так простою минуту?
— Вам будет неприятно.
— А если я так простою час?
— Рука затечет и удерживать стакан будет тяжело.
— А если я так день простою?
— Наверное, рука так занемеет, что может начаться паралич.
— А вес стакана меняется в зависимости от времени, сколько я его держу?
— Нет, не меняется.
— И что мне нужно сделать, чтобы у меня не случился паралич?
— Поставить стакан на стол!
Профессор с облегчением поставил стакан на стол и сказал:
— Вот так и с решением проблем. Чем дольше вы думаете о проблеме, тем тяжелее вам становится. Единственное, что может вас избавить от напряжения — это действие.
7 вопросов, которые задают чаще всего
Траблшутер — это консультант? Хотя их работа и имеет много общего, подход к решению задач разный. Траблшутер предлагает индивидуальные, нередко нестандартные решения. Консультант обычно действует по стандартной схеме.
Может ли траблшутер быть консультантом? Обычно да. Но может ли консультант работать траблшутером? Скорее нет
Важно уметь видеть разные решения, неожиданные, комплексные, обращать внимание на «несущественные» мелочи — я таких консультантов не видел
Но у хорошего консультанта все же есть предпосылки стать траблшутером.
Как быстро решается задача и что нужно для ее решения? Задача в бизнесе решается быстро, когда известны все условия, но вот их как раз очень часто не хватает. И тогда приходится их собирать, на что может потребоваться время.
Больше всего времени тратится на прояснение ситуации, на уточнение деталей, на какие-то мелочи, чтобы решение было точным.
А потом — этап выдачи решения и его внедрения, которое нужно отслеживать или сопровождать, что тоже занимает время. При необходимости вносить изменения в решения. И перестраиваться на ходу.
Как вы гарантируете, что решите задачу? Я люблю этот вопрос. И отвечаю кратко — никак.
Какие гарантии, что вы расширите долю рынка со мной? Тогда встречный вопрос — а у вас есть гарантии, что вы расширите долю рынка без меня? Так расширяйте, зачем платить гонорар? Но про гарантии спрашивают редко — заказчики в нашей сфере чаще всего приходят по рекомендации.
У меня уникальный бизнес (новая ниша), как вы решите задачу его роста? Это самое частое заявление, которое приходится слышать. Решения траблшутер выдает нестандартные, а если ниша новая, то вообще замечательно. Значит нет прямых конкурентов, только косвенные.
Фото с сайта progorodsamara.ru
Что может помешать траблшутеру в решении задачи? Незнание всех необходимых условий, изменение задачи заказчиком и когда заказчик пытается доказать, что он лучше меня знает тему.
Сейчас многие называют себя траблшутерами. По каким критериям можно определить хорошего специалиста? Есть те, кого приглашают, чтобы решить задачу с помощью силы: бывшие охранники, спортсмены. Есть отраслевые решатели, скажем, в области маркетинга или политтехнологий. Но мало людей, которые берутся за комплексное решение задач в бизнесе.
А хороший решатель определяется по результату.
Можно ли стать траблшутером для себя и своего бизнеса? Конечно можно. Освойте несколько методов решения проблем. И вперед. Пробуйте!
КАКИЕ ПРОБЛЕМЫ МЫ ПОМОЖЕМ РЕШИТЬ?
- Проблемы организации и управления бизнесом, действия в кризисных условиях и угрозы банкротства;
- Сложности, возникающие во взаимоотношениях с кадрами;
- Проблемы оптимизации бизнеса, поиска ресурсов развития и причин утечки средств;
- Проблемы, возникающие в ходе предпринимательской деятельности, производства и продвижения продукции, проблемы утечки информации, репутационные сложности и т.д.;
- Сложности и конфликты во взаимоотношениях с другими организациями, контролирующими органами, клиентами и поставщиками;
- Проблемы взаимоотношений компаньонов, раздела бизнеса;
- Проблемы и сложности в продвижении по карьерной лестнице, широкий спектр проблем, возникающих в деятельности чиновников, общественных деятелей, руководителей любого уровня;
- Сложности, связанные с владением имуществом, реализацией прав, различные проблемы повседневной жизни;
- Сложности в принятии стратегических решений в сфере бизнеса, управления, карьеры, личной жизни и т.д.
Выше приведен лишь приблизительный перечень сфер тех проблем, которые мы можем помочь решить. На самом деле, полный перечень таких проблем неисчерпаем, поскольку проблема — это всегда встреча с новыми, уникальными условиями. Вы можете обратиться к нам с любым вопросом, обещаем: мы внимательно изучим проблему и подумаем, что можно сделать.
Запуск тестирования на GitLab и Jenkins
При запуске этой сборки у нас опять возникает картинка – Jenkins против GitLab CI.
Сначала посмотрим GitLab, потому что он чуть проще.
На машине, где установлен Docker, вам нужно зарегистрировать GitLab runner – он запускает тесты в GitLab CI.
Дальше – в файле gitlab-ci.yml вы указываете:
-
образ, в котором хотите запускать тесты;
-
на каких компьютерах вы хотите их запускать;
-
GitLab сам скачивает последнюю версию образа, запускает контейнер, и потом все эти команды будут выполняться уже внутри контейнера.
То есть вам не надо сильно изучать Docker – вы просто пишете типовые команды.
Теперь как это устроено в Jenkins – он позволяет настроить более тонко, но и настраивать это дольше.
-
Первое, что вам надо – это запустить на вашем Docker-хосте Docker-daemon https://docs.docker.com/engine/reference/commandline/dockerd.
-
На Jenkins вам надо поставить Docker-plugin – это позволяет запустить Docker Cloud Provider.
-
Самая большая проблема – это то, что в ваших Docker-образах должна быть установлена Java и, собственно, агент Jenkins. По адресу https://github.com/jenkinsci/docker-inbound-agent есть официальный пример от Jenkins, как это добавить.
-
А дальше вы каждому такому образу присваиваете Label, который будет соответствовать Jenkins-агентам.
Как это выглядит на практике?
-
У вас на Jenkins по каким-то триггерам или при помещении кода, или по таймеру в очередь встает задание.
-
Jenkins смотрит, что это задание надо запускать на Cloud-провайдере каком-то, запрашивает возможность запустить эти данные – проверяет, хватает там сейчас памяти или нет.
-
Готовит специальный образ только под эту задачу, в него подключается и дальше запускает задачки внутри контейнера.
Как настраивается Cloud Provider?
Если вы запускаете тестирование просто на Docker, то вам надо указать IP-адрес вашего Docker-хоста и авторизацию, если есть.
И дальше нужно описать, какие Docker-агенты вы будете запускать – на базе какого образа, назначить ему Label и, если нужно, дополнительные параметры.
Теперь в задаче Jenkins вы:
-
указываете Label контейнера;
-
если хотите больших настроек, можно указывать вручную образ и параметры запуска;
-
а дальше пишите типовой код на Jenkins, указывая путь к Jenkinsfile.
На слайде показано, как выглядит Jenkinsfile у нас.
Мы говорим, что хотим собираться на версии платформы 8.3.15, а дальше у нас обыкновенный код – мы подготавливаем папки, забираем наш репозиторий, ну и запускаем тесты. В частности, тут юниты.
Если хотим больше настроек, мы можем прямо указать, с какого Docker Registry скачивать, какую версию.
И тут через точку можно указывать кучу параметров – сколько памяти он будет занимать, как долго контейнер будет жить и т.д. и т.п.
Usage
To use the driver as the default logging driver, set the
and keys to appropriate values in the file, which is
located in on Linux hosts or
on Windows Server. For more about
configuring Docker using , see
.
The following example sets the log driver to and sets the
option.
Restart Docker for the changes to take effect.
You can set the logging driver for a specific container by using the
option to :
This log driver does not implement a reader so it is incompatible with
.
If Docker detects that it is running in a Google Cloud Project, it discovers
configuration from the
instance metadata service.
Otherwise, the user must specify
which project to log to using the log option and Docker
attempts to obtain credentials from the
Google Application Default Credential.
The flag takes precedence over information discovered from the
metadata server so a Docker daemon running in a Google Cloud Project can be
overridden to log to a different Google Cloud Project using .
Docker fetches the values for zone, instance name and instance ID from Google
Cloud metadata server. Those values can be provided via options if metadata
server is not available. They do not override the values from metadata server.
Словарь тестировщика
Термины идут не по алфавиту, а по смыслу. Сначала база, а потом, те, что на неё опираются.
Объективное доказательство
(Objective Evidence)
Объективные доказательства описывают то, что наблюдал тестировщик, что на самом деле произошло или не произошло.
Объективные доказательства должны содержать достаточные данные, чтобы рецензент мог доказать их
соответствие критериям приёмки (Acceptance Criteria) теста.
Сравнение объективных доказательств с критериями приёмки приводит к прохождению или провалу теста.
Следует иметь в виду, что такие утверждения, как Пройдено (Passed), Провал (Failed) и как ожидалось (As Expected), никогда не
рассматриваются как объективное свидетельство выполненного теста.
Верификация дизайна
(Design Verification)
Подтверждение экспертизой и предоставлением объективных доказательств того, что указанные
требования выполнены.
Проверочные мероприятия проводятся на нескольких этапах и уровнях проектирования устройства.
Деятельность по проверке может включать испытания, инспекции/обзоры и анализы.
Эти проверочные мероприятия обеспечивают соответствие между входным требованием проекта
и его выходным результатом.
Валидация дизайна
(Design Validation)
Валидация означает подтверждение путем экспертизы и предоставления объективных доказательств того,
что конкретные требования для конкретного целевого использования могут быть последовательно выполнены.
Валидация конструкции означает установление с помощью объективных доказательств того, что технические
характеристики устройства соответствуют потребностям пользователя и предполагаемому использованию.
Видите, какие скучные и не до конца внятные определения даны выше?
Если во время собеседования вас начнут грузить подобной информацией — скорее всего
работа будет не очень интересной.
Выбор фич для следущего релиза, подробности
здесь
Фото: freepik.com
Результат теста
Должен включать в себя:
Явное указание на то, что какой объект был протестирован. То есть название устройства или программы,
версию и всё что необходимо для однозначной
идентификации.
Идентификационный номер тест кейса, который был проведён. Это особенно актуально для больших компаний с обширными библиотеками тестов.
Дату проведения теста.
Описание тестового окружения, использованного во время тестирования. Например, тип компьютера.
Заключение об Успехе/Провале теста. Так называемое Pass/Fail statement
Объективное доказательство (Objective Evidence)
Список найденных дефектов в случае провала теста.
Как читать логи. Пример
Существует довольно много форматов записи, combined — один из наиболее распространенных. В нем строчка кода может выглядеть так:
%h %l %u %t \»%r\» %>s %b \»%{Referer}i\» \»%{User-Agent}i\»
Директивы имеют следующее значение:
- %h — IP-адрес, с которого был сделан запрос;
- %l — длинное имя удаленного хоста;
- %u — удаленный пользователь, если запрос был сделан аутентифицированным юзером;
- %t — время запроса к серверу и его часовой пояс;
- %r — тип и содержимое запроса;
- %s — код состояния HTTP;
- %b — количество байт информации, отданных сервером;
- %{Referer} — URL-источник запроса;
- %{User-Agent} — HTTP-заголовок.
Еще один пример чтения логов можно посмотреть в статье «Как читать логи сервера».
Опытные веб-мастера для сбора и чтения лог-файлов используют программы-анализаторы. Они позволяют читать логи сервера без значительных временных затрат. Вот некоторые из наиболее востребованных:
- Analog. Один из самых популярных анализаторов, что во многом объясняется высокой скоростью обработки данных и экономным расходованием системных ресурсов. Хорошо справляется с объемными записями, совместим с любыми ОС.
- Weblog Expert. Программа доступна в трех вариациях: Lite (бесплатная версия), Professional и Standard (платные релизы). Версии отличаются функциональными возможностями, но каждая позволяет анализировать лог-файлы и создает отчеты в PDF и HTML.
- SpyLOG Flexolyzer. Простой аналитический инструмент, позволяющий получать отчеты с высокой степенью детализации. Интегрируется c системой статистики SpyLOG, позволяет решать задачи любой сложности.
Системное администрирование & автоматизация
Без знания UNIX-систем практически никуда. Windows Server еще встречается, но его концентрация крайне мала. В довесок к знанию архитектуры ОС желательно разбираться в сетевых протоколах (модель OSI, как минимум) и уметь работать с распределением запросов (балансировка нагрузки) для повышения отказоустойчивости системы, анализировать технические метрики, придерживаться SLA. Автоматизация работы, связанной с ops (администрированием), написание утилит для уменьшения ручного труда, рутины и оптимизации бизнес-процессов, развёртывание dev-окружения, настройка виртуальных машин — это всё тоже в зоне ответственности SRE-инженера.
По возможным инструментам: для мониторинга метрик, событий из облачной инфраструктуры, контейнеров или оркестраторов используется серверная утилита Telegraf, которая написана на языке Go (тоже опенсорсная)
Этап 3. «Оптимизация»
Следующий этап, к которому мы перешли – оптимизация всего этого дела.
Мы поняли, что жить с одним сервером Windows – это очень долго, поскольку он очень любит ставить обновления, перезагружаться и поднимать обратно сессии. Мы завели набор виртуальных машин на Windows. Там были достаточно простые машины – по два гигабайта памяти и два процессора.
-
Настройка инфраструктуры через Ansible. Ansible – это такое программное обеспечение, которое позволяет описать вашу инфраструктуру декларативно. Вы можете заводить описания, какие вам пакеты надо поставить, в том числе можно описывать, какие платформы вы хотите поставить – какое дополнительное ПО вам надо, и оно раскатывается на все ваши машины. У нас был набор из шести-восьми машин, и они все идентичные.
-
Ну и не забываем, опять же, мониторить метрики – теперь нам надо было мониторить восемь машин вместо одной.
На этом этапе мы проработали достаточно долго – примерно полгода без каких-либо проблем. А потом, как обычно, что-то пошло не так.
What About Docker Daemon Logs
Docker daemon logs are generated by the Docker platform and located on the host. Depending on the host operating system, daemon logs are written to the system’s logging service or to a log file.
If you were to collect only container logs you’d get insight into the state of your services. However, by traditional logging methods, you also need to be aware of the state of your Docker platform, which is what Docker daemon logs are for. They paint a clear picture of your overall microservices architecture.
On that note, the Docker daemon logs two types of events:
- Events generated by the Docker service itself
- Commands sent to the daemon through Docker’s Remote API
Depending on your Operating System, the Docker daemon log file is stored in different locations.
Краткие выводы
Чтобы профессионально писать логи, следует рассматривать программу как серию переходов состояний с уровнями абстракции. Владея теоретическими знаниями, можно ответить на ключевые вопросы о логировании в приложении:
1.Когда писать логи? В момент перехода в критическое состояние.
2.Что записывать в лог? Ключевыехарактеристики текущего состояния и причину перехода состояния.
3.Кто должен записывать логи? Логирование должно происходить на правильном уровне, содержащем достаточно информации.
4.Каким должно быть количество логов? Определите X-фактор (по формуле # логов = X * # рабочих элементов+ константы) и настройте его экономно, но выгодно.
- Логирование в Python с помощью Logzero
- Используйте перечисления, а не логические аргументы
- Логи в Python. Настройка и централизация
Перевод статьи Neal Hu: Logging Like a Pro