пятница, 29 января 2016 г.

HTTP

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


Соединение (connection)
Виртуальный канал транспортого уровня, установленный между двумя программами с целью связи.

Сообщение (message)
Основной модуль HTTP связи, состоящей из структурной последовательности октетов, соответствующих синтаксису, определенному в разделе 4 и передаваемых по соединению.

Запрос (request)
Любое HTTP сообщение, содержащее запрос, определяемый в разделе 5.

Ответ (response)
Любое HTTP сообщение, содержащее ответ, определяемый в разделе 5.

Ресурс (resource)
Сетевой объект данных или сервис, который может быть идентифицирован URI, определеляемым в разделе 3.2. Ресурсы могут быть доступны в нескольких представлениях (например на нескольких языках, в разных форматах данных, иметь различный размер, иметь различную разрешающую способность) или различаться по другим параметрам.

Клиент (client)
Программа, которая устанавливает соединения с целью посылки запросов.

Агент пользователя (user agent)
Клиент, который инициирует запрос. Как правило браузеры, редакторы, роботы (spiders), или другие инструментальные средства пользователя.

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

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

Шлюз (gateway)
Сервер, который действует как посредник для некоторого другого сервера. В отличие от прокси-сервера, шлюз получает запросы в качестве первоначального сервера для запрошенного ресурса; клиент запроса может не знать, что он соединяется со шлюзом.

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

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


[1] https://tools.ietf.org/html/rfc2616
[2] http://www.lib.ru/WEBMASTER/rfc2068/

воскресенье, 24 января 2016 г.

О безопасности

...может оказаться, что вы в последнюю минуту перед запуском впадете в панику, потому что никто даже в общих чертах не проверил надежность вашего продукта, который обошелся в $50 млн. О безопасности на протяжении жизненного цикла разработки программного обеспече ния (software development lifecycle, SDLC) слишком часто вспоминают в последнюю очередь. В итоге приходится в спешном порядке добавлять новые функции, а сроки сдачи уже не за горами. Безопасность должна быть «встроена», а не «пристроена», иначе безопасных программ не получится.



суббота, 2 января 2016 г.

Стратегии тестирования

Рекс Блэк, Росс Коллард, Сем Канер, Кэти Айберли, Камеш Пеммараджу о стратегиях тестирования:
Исчерпывающая. Тестируйте все, как можно полнее.

Вынужденная. Тестируйте что угодно и где угодно; распределяйте работы по тестированию на весь продукт.

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

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

Управляемая программистами. Тестируйте согласно указаниям программистов и рассматривайте их как высший авторитет на предмет правильных действий.

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

Управляемая реализацией. Изучайте архитектуру, код, схемы системы и т.п., чтобы определить, на чем сконцентрировать внимание при тестировании.

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

Интуитивная. Тестируйте в соответствии с тем, что говорят коллективный опыт, мудрость и интуиция сотрудников группы тестирования на предмет того, что следует тестировать.

Исследовательская. Одновременно изучайте систему, тестируйте, находите ошибки и совершенствуйте подход к тестированию, корректируйте его направленность.

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

Функциональная. Тестируйте каждую функцию системы по очереди.

Основанная на требованиях или претензиях. Тестируйте каждое требование или претензию к продукту.

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

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

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

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

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

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


А какую стратегию тестирования используете вы?