Результати пошуку за запитом: курс - практикум по frontend разработке*
Що повинен знати Java розробник у 2020 році?
Автор: Влад Сверчков
Язык программирования Java и ООП
Алгоритмы и структуры данных
Шаблоны проектирования
Язык запросов SQL
Технологии JDBC & Hibernate
Java Enterprise Edition и фреймворк Spring
MVC
SOLID
Модульное тестирование
Git & GitHub
Scrum
Английский язык
Выводы
Мы вновь приветствуем вас, друзья!
На этот раз в нашей рубрике “Что должен знать разработчик...” под прицелом оказался такой многофункциональный язык программирования, как Java. В современном IT-рынке область веб-разработки является очень популярной, поэтому сегодня вы узнаете, каким стеком технологий должен обладать потенциальный соискатель вакансии Java веб-разработчика. Не будем медлить - начинаем!
Язык программирования Java (“Джава”)
Опираясь на данные Stack Overflow Developer Survey (около 90 000 опрошенных респондентов), можно сказать, что язык Java входит в пятерку самых популярных. Это универсальный объектно-ориентированный язык программирования, который используется в создании различного информационного продукта:
веб-приложений (серверной части);
мобильных приложений под Android;
облачных хранилищ данных;
настольных приложений;
компьютерных игр;
программного обеспечения для банковских систем и т. д.
Java был создан компанией Sun Microsystems в 1995 году. Он достаточно быстро завоевал популярность среди программистов и стал использоваться в создании клиентских приложений и серверного программного обеспечения. Java-приложения транслируются в специальный байт-код, выполняемый виртуальной машиной JVM (Java Virtual Machine), которая может быть установлена практически на любое устройство. Это делает программы, разработанные на Java, кроссплатформенными.
Что конкретно необходимо знать? Языком Java следует владеть на достаточно хорошем уровне, поэтому и список необходимых для освоения тем будет немаленьким.
Среди обязательных базовых разделов: машинная математика, переменные и типы данных, условные конструкции, логические операции, циклические конструкции, методы, рекурсия, массивы, объекты и классы, списки, обработка исключений, суперкласс Object, обобщения (Generics), работа с памятью.
Далее идут более продвинутые темы: коллекции, карты (Map), основы вывода (IO, NIO), методы работы со строками (String, StringBuilder, StringBuffer), регулярные выражения, Date API, рефлексия, ClassLoader, аннотации, Javadoc, VarArgs, сериализация, клонирование, потоки и интерфейс Runnable, лямбда выражения, Stream API.
Стоит знать, что совокупность вышеперечисленных разделов Java + ООП парадигмы в среде джавистов именуется Java Core (от англ. “core” - ядро).
Дабы закрепить знания и не лишиться полученных навыков написания кода мы советуем вам как можно чаще практиковаться и решать прикладные задачки из интернета либо составленные самолично.
Также советуем использовать онлайн-тренажеры, например, интерактивный тренажер от ITVDN. С его помощью вы сможете потренироваться в кодинге на Java и проверить свои знания.
Объектно-ориентированное программирование (ООП)
Объектно-ориентированное программирование - это методология разработки программного обеспечения, в основе которой лежат четыре главных принципа: абстракция, инкапсуляция, наследование и полиморфизм. Поскольку Java является объектно-ориентированным языком, необходимость изучения и полного понимания ООП парадигм обязательно. Однако, есть и приятная новость: все принципы быстро и легко усваиваются во время изучения Java.
Алгоритмы и структуры данных
Понимание алгоритмов и структур данных - обязательное требование для любого программиста. Это необходимый фундамент, благодаря которому разработчик обучается написанию хорошего исходного кода путем подбора оптимальных формы представления информации и последовательности действий.
Изучив структуры данных, вы сможете управлять сложностью своих программ, делая их более доступными для понимания, а также разрабатывать высокопроизводительные приложения, которые будут рациональнее работать с памятью.
Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач на Java.
Шаблоны проектирования
Паттерны (они же шаблоны) представляют собой архитектурные конструкции, которые описывают типичные способы решения распространенных задач, возникающих в ходе проектирования программного обеспечения. Всего существует более двух десятков шаблонов, однако виртуозно ими владеть должен архитектор ПО, а не рядовой разработчик. Обычно в одном проекте используется небольшое количество паттернов, поэтому вам достаточно знать лишь самые популярные из них.
SQL
Structured Query Language - декларативный язык структурированных запросов, который создан для взаимодействия с базами данных. Особенность SQL состоит в том, что он лишь описывает необходимые компоненты и желаемые результаты, не указывая, как именно эти результаты должны быть получены.
Каждый программный продукт подразумевает работу с данными, будь то обыкновенная процедура приема данных от сервера (например, скачивание файлов) или внесение в БД информации о новом зарегистрированном пользователе - умение работать с данными одинаково важно во всех сферах разработки, разве что за исключением FrontEnd.
Также изучите одну из систем управления базами данных (СУБД). Это может быть MySQL либо PostgreSQL. Их главное отличие от SQL в том, что SQL - это язык запросов, а MySQL/PostgreSQL - реализации СУБД, имеющие свой диалект языка SQL.
XML
Extensible Markup Language - расширяемый язык разметки, с помощью которого можно структурировать данные для удобства их дальнейшей обработки. Прежде всего нацелен на использование в интернет среде и являет собой формат хранения и передачи данных на сервер. XML хорошо масштабируем, сочетает в себе простой и удобный синтаксис, а также базируется на кодировках Юникод для представления содержания документов.
JDBC & Hibernate
Java Database Connectivity - это стандарт взаимодействия Java-приложений с различными СУБД.
Простыми словами, JDBC имеет единый интерфейс, позволяющий любой Java-программе работать с любой базой данных одинаковыми методами. Для реализации этого универсального взаимодействия применяются специальные драйвера (не те, которые мы привыкли устанавливать на наши компьютеры). Как результат - программа никак не меняется от переключения с одной базы данных на другую, что дает JDBC весомую значимость в Java разработке.
Hibernate - это ORM (от англ. “Object-Relational Mapping” - объектно-реляционное отображение) фреймворк, главная задача которого отображение объектно-ориентированной модели данных в традиционные реляционные базы данных, то есть, связывание ООП с реляционной БД. Представляет собой программное обеспечение с открытым исходным кодом.
Java EE / Spring
Java Enterprise Edition - это платформа для создания корпоративных решений с помощью языка Java. Чаще всего на ней разрабатывают различные веб-приложения и веб-сервисы. Java EE включает в себя множество спецификаций (JSP, EJB, CDI, JPA, Servlet и прочие), главная задача которых состоит в обеспечении масштабируемости приложений и целостности данных во время работы системы.
Spring - популярный фреймворк с открытым исходным кодом, который используют для создания веб-приложений на Java. Он дает Java-разработчикам большую свободу в проектировании приложений, предоставляя средства решения проблем корпоративного масштаба. Является альтернативой Java EE в создании веб-сервисов. Spring имеет обширную документацию и достаточно прост в использовании.
Максимальной популярностью на данный момент пользуется именно Spring. Его лучше всего выбирать при создании небольших приложений или программ с микросервисной архитектурой. Java EE больше подходит для разработки легко масштабируемых монолитных приложений.
MVC (Model-View-Controller)
Архитектурный шаблон, который предусматривает разделение приложения на три компонента: Модель, Представление, Контроллер, что способствует реализации концепции распределения и закрепления ответственности за каждым компонентом. Данный подход позволяет упростить и ускорить разработку проектов, благодаря чему паттерн MVC широко применяется множеством разработчиков. Java EE и Spring имеют специальные MVC-надстройки, которые обеспечивают удобное использование данного шаблона.
Scala (опционально)
Строго типизированный мультипарадигмальный язык программирования. Одной из его особенностей является комбинирование стандартного ООП подхода с функциональным программированием. Scala, как правило, применяется в мощных системах с большим объемом данных и внушительным количеством пользователей. Данный язык программирования подходит для машинного обучения и анализа данных.
Scala не является обязательной к изучению для Java программистов. Однако, ее знание будет огромным плюсом на собеседовании. В дальнейшем вы сможете переквалифицироваться в полноценного Scala разработчика, имея необходимый бэкграунд, полученный во время Java разработки.
SOLID
Акроним, который обозначает пять основных принципов объектно-ориентированного программирования. Следование стандарту SOLID позволяет создавать легко поддерживаемые и масштабируемые проекты с удобной архитектурой и минимальным количеством “запахов кода”. Также знание данных принципов показывает грамотность разработчика, уровень его профессионализма. Это безусловно сыграет вам на руку на собеседовании.
Unit тестирование
Тот самый тип тестирования, который берет на себя не тестировщик, а сам программист. Идея - в написании тестов под каждую нетривиальную функцию либо метод. Цель модульного тестирования — изолировать отдельные части программы и показать, что по отдельности они являются работоспособными. Таким образом происходит проверка кода на регрессию и соответствующее обнаружение ошибок.
Git & GitHub
Git - наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. В роли главного конкурента Git выступает SVN (централизованная система, в отличие от Git).
Помимо этого, стоит уметь работать с сервисом онлайн-хостинга проектов, использующих систему контроля версий. В данном случае это GitHub. В тандеме с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах.
Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы.
Scrum
Методология ведения разработки программного обеспечения, которая относится к семейству гибких (Agile). Исповедует командный подход к созданию ПО, короткие итерации, частые выпуски новых версий продукта, учет изменений и непрерывное улучшение в процессе работы. Scrum применяется не только в IT, но и в производстве, маркетинге, консалтинге и прочих сферах.
Множество команд разработки ПО успешно применяют данную методологию, поэтому ее важность сложно переоценить.
Английский язык
Знание английского языка - естественное требование для каждого разработчика в IT, поскольку большинство новых сведений о технологиях, курсы, учебные и справочные материалы появляются в первую очередь на английском. Для работы в команде разработчиков обычно знаний языка на уровне чтения технической документации и комментирования кода вполне достаточно, однако если вы планируете самостоятельно вести переговоры и переписку с иностранным заказчиком, ваш уровень должен быть выше.
Выводы
Таким образом мы с вами рассмотрели основные технологии, которыми должен владеть кандидат, стремящийся занять должность Java разработчика. Сам Java уже много лет прочно удерживает высокие позиции во всевозможных рейтингах языков программирования и покидать свой пьедестал не собирается, о чем свидетельствуют следующие статистики: dou.ua (Украина), tiobe.com (Tiobe - нидерландская компания, которая занимается оценкой качества программного обеспечения), вышеупомянутый Stack Overflow Developer Survey и другие информационные ресурсы.
Несмотря на то, что в статье мы была затронута именно путь веб-разработчика на Java, данный язык успешно применяется в разработке Android-приложений (Kotlin и Objective-C), разработке объемных программных систем; также на нем можно писать настольные игры (хотя он не имеет таких инструментов создания игр, как у платформы .NET).
Java достаточно универсален и способен на практически все что угодно в руках умелого программиста. А таковым вы можете стать с помощью наших курсов, направленных на интенсивное изучение языка Java. Программа обучения предлагает 23 видео курса общей продолжительностью более 160 часов. Также ITVDN предоставляет интерактивный тренажер, с помощью которого можно отточить навыки написания кода на различных языках, в том числе и на Java.
Если вам понравилась эта статья, поделитесь информацией с теми, кому она может быть интересна. Пишите в комментариях, на какие еще вопросы, связанные с выбором специальности и планированием обучения вы хотите получить ответы. Мы постараемся ответить на них в наших новых обзорах.
Як я побудував проект на Django, Django REST Framework, Angular 1.1.x та Webpack
Автор: Редакція ITVDN
Моя идея состояла в том, чтобы построить простой репликабельный проект на Angular с бэкэндом на Django. Я искал и не смог найти нужных решений, пришлось во всем разбираться самому. В итоге я разобрался и решил сам написать гайд для всех, кого может заинтересовать данная проблема.
Данная статья поможет вам построить простое приложение Angular с бэкэндом на Django, организованного с помощью Webpack.
Проблема
Я хочу настроить проект на Angular 1.1.x и скормить ему данные с сервера Django. Мне бы хотелось использовать Django REST Framework (DRF), чтобы пострить RESTful API. Я также хочу сбандлить JS ассеты. Сейчас я собираюсь запустить сайт на одном сервере.
Предварительные требования
Python 2.x
Django 1.9.x
npm 2.15.8+
Webpack 1.13.x (sudo npm i -g webpack)
ESLint 2.13.1+ (sudo npm i -g eslint)
NodeJS 4.4.7+
Содержание
Скаффолдинг проекта. Создайте свои начальные директории.
Скаффолдинг проекта на Django.
Настрока переменных среды, нужных для запуска сервера Django.
Установка Django REST Framework и настройка Django с использованием переменных среды.
Создание API.
Запуск Django сервера с использованием dev settings.
Инициализация npm-пакета и установка front-end JS зависимостей.
Создание Angular entry-point и загрузка начальных зависимостей.
Настройка Webpack'а.
Дайте команду Django загрузить приложение.
Создайте шаблон базы приложения Angular.
Напишите компонент home.
Напишите Angular роуты, ведущие к вашему компоненту home и странице 404.
Добавьте директивы ангуляр-маршрутизатора к шаблону входной точки приложения.
Проверьте ваше REST API в приложении Angular. Шпаргалка.
Итак, начнем!
0. Настройте среду для Python.
mkvirtualenv mysite
1. Скаффолдинг проекта на Django. Создайте начальные директории.
Мы хотим сфокусироваться на модулярности в ходе разработки. Следовательно, существует множество директорий в конечном итоге использования. Мы хотим, чтобы наше дерево изначально выглядело так:
mysite
├── backend
│ ├── docs
│ ├── requirements
└── frontend
├── app
│ ├── components
│ └── shared
├── assets
│ ├── css
│ ├── img
│ ├── js
│ └── libs
├── config
├── dist
└── js
Сделайте следующее:
mkdir mysite && cd mysite
mkdir -p backend/docs/ backend/requirements/ \
frontend/app/shared/ \
frontend/app/components/ \
frontend/config \
frontend/assets/img/ frontend/assets/css/ \
frontend/assets/js/ frontend/assets/libs/ \
frontend/dist/js/
*Примечание: Структура этого проекта была навеяна опытом с несколькими другими проектами. Я считаю эту организацию идеальной, но вам не обязательно ей следовать. Но, пока вы читаете этот гайд, вы должны придерживаться этой структуры.
2. Скаффолдинг проекта на Django.
В директории backend/ создайте Django проект:
python django-admin.py startproject mysite
Также создайте requirements.txt:
pip freeze > requirements/requirements.txt
В директории (вашего проекта) backend/mysite/ произведите скаффолдинг директории, той, где будет жить ваше API:
mkdir -p applications/api/v1/
touch applications/__init__.py applications/api/__init__.py \
applications/api/v1/__init__.py applications/api/v1/routes.py \
applications/api/v1/serializers.py applications/api/v1/viewsets.py
Теперь создайте структуру директории настроек:
mkdir -p configlord/settings/
touch configlord/settings/__init__.py \
configlord/settings/base.py configlord/settings/dev.py configlord/settings/prod.py \
configlord/dev.env configlord/prod.en
3. Настройте переменные окружения, которые нужны для запуска сервера Django.
На этом этапе я предпочитаю пользоваться django-environ для работы с переменными окружения. Существует множество способов сделать это, но пакет django-environ чрезвычайно упрощает этот процесс, поэтому я использую его во всех своих проектах.
Установите django-environ:
pip install django-environ
В mysite/dev.env добавьте следующее:
DATABASE_URL=sqlite:///mysite.db
DEBUG=True
FRONTEND_ROOT=path/to/mysite/frontend/
SECRET_KEY=_some_secret_key
Мы собираемся использовать эти переменные среды в наших настройках. Выгода от использования наших переменных окружения в отдельных файлах состоит в основном в том, что такая настройка позволяет облегчить переключение между средами. В нашем случае файл the dev.env является списком переменных, которые мы бы использовали в локальной среде разработки.
*Примечание: SECRET_KEY можно взять из settings.py, который был сгенерирован django-admin.py startproject.
4. Установите Django REST Framework и настройте Django, используя переменные среды.
Установка DRF:
pip install djangorestframework
Наполните settings/base.py следующим:
Укажите, где искать переменные окружения.
import environ
project_root = environ.Path(__file__) - 3
env = environ.Env(DEBUG=(bool, False),)
CURRENT_ENV = 'dev' # 'dev' is the default environment
# read the .env file associated with the settings that're loaded
env.read_env('./mysite/{}.env'.format(CURRENT_ENV))
Установите базу данных. В данном случае мы собираемся использовать встроенные в django-environ настройки SQLite.
DATABASES = {
'default': env.db()
}
Установите SECRET_KEY ,а также debug.
SECRET_KEY = env('SECRET_KEY')
DEBUG = env('DEBUG')
Добавьте DRF в пул приложений, которые Django должен использовать.
# Application definition
INSTALLED_APPS = [
...
# Django Packages
'rest_framework',
]
Ссылки будут «жить» в специальном URL модуле, созданном с помощью базы проекта.
ROOT_URLCONF = 'mysite.urls'
Укажите Django, где искать все шаблоны и другие статические ассеты.
STATIC_URL = '/static/'
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
STATICFILES_DIRS = [
env('FRONTEND_ROOT')
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [env('FRONTEND_ROOT')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
В соответствии с настройкой TEMPLATES Django должен будет искать шаблоны внутри frontend/ directory. Это то, где Angular приложение будет жить. Мы используем только Django, чтобы обслужить шаблон, внутри которого Angular приложение будет загружаться, которое будет выполнено через entry-point директиву. Если вы не знаете, о чем я, продолжайте чтение...
Наполните settings/dev.py:
from mysite.settings.base import *
CURRENT_ENV = 'dev'
Здесь мы указываем, что этот файл настроек унаследывает настройки из base.py и переопределяет строку CURRENT_ENV, найденную в base.py. Мы говорим: «Используй это значение вместо значения, найденного в наследуемом модуле».
5. Создайте API.
Нам нужно нечто, с помощью чего мы сможем протестировать службы Angular, поэтому давайте создадим небольшое API. Этот шаг можно пропустить, но я не советовал бы делать этого. Нам важно знание того, что настройки приложения Angular работают исключительно с точки зрения его потенциала, чтобы облегчить HTTP запросы.
Сгенерируйте приложение.
manage.py startapp games
Создайте модель в games/models.py.
class Game(models.model):
title = models.CharField(max_length=255)
description = models.CharField(max_length=750)
Создайте DRF сериализатор для модели игры в applications/api/v1/serializers.py.
from rest_framework.serializers import ModelSerializer
from applications.games.models import Game
class GameSerializer(ModelSerializer):
class Meta:
model = Game
Создайте DRF viewset для модели в приложениях applications/api/v1/viewsets.py.
from rest_framework import viewsets
from applications.games.models import Game
from applications.api.v1.serializers import GameSerializer
class GameViewSet(viewsets.ModelViewSet):
queryset = Game.objects.all()
serializer_class = GameSerializer
В applications/api/v1/routes.py зарегистрируйте роуты, используя DRF's router registration features.
from rest_framework import routers
from applications.api.v1.viewsets import GameViewSet
api_router = routers.SimpleRouter()
api_router.register('games', GameViewSet)
Обозначьте ссылки для зарегистрированного DRF роута внутри mysite/urls.py:
from django.contrib import admin
from django.conf.urls import include, url
from applications.api.v1.routes import api_router
urlpatterns = [
url(r'^admin/', admin.site.urls),
# API:V1
url(r'^api/v1/', include(api_router.urls)),
]
6. Запустите сервер Django, используя dev settings.
manage.py runserver --DJANGO_SETTINGS_MODULE=mysite.settings.dev
Впуская DJANGO_SETTINGS_MODULE в runserver, мы «говорим» - работать используя специфические параметры.
Если все работает, у вас появится возможность открыть localhost:8000/api/v1/games и увидеть ответ от DRF. Если все работает – самое время заняться построением приложения Angular. Если нет – направьте автору проблему. Если вы застряли на этом этапе – оставьте комментарий автору под оригиналом публикации.
7. Инициализируйте npm-пакет и установите front-end JS зависимости.
Приложение Angular не будет работать так, как мы хотим, если правильные зависимости не будут установленны. Самое время установить базовые пакеты, которые понадобятся.
Инициализируйте npm-пакет. Прямо из frontend/ запустите
npm init --yes
By passing the --yes flag into init, you're telling NPM to generate a package.json using NPM defaults. Otherwise, if you don't pass that in, you'll have to answer questions... Boring.
Установите dev dependencies.
npm install --save-dev eslint eslint-loader
Установите общие зависимости.
npm install --save eslint eslint-loader angular angular-resource angular-route json-loader mustache-loader lodash
Файл package.json file во frontend/ должен выглядеть приблизительно следующим образом:
{
"name": "my-app",
"version": "0.0.1",
"description": "This is my first angular app.",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"eslint": "^3.1.1",
"eslint-loader": "^1.4.1"
},
"dependencies": {
"angular": "^1.5.8",
"angular-resource": "^1.5.8",
"angular-route": "^1.5.8",
"eslint": "^3.1.1",
"eslint-loader": "^1.4.1",
"json-loader": "^0.5.4",
"lodash": "^4.13.1",
"mustache-loader": "^0.3.1"
}
}
Здесь то, что мы только что установили:
eslint – отличный линтер, благодаря которому код JavaScript будет в порядке (последователен).
eslint-loader – для запуска eslint через Webpack. Чуть позже я объясню концепцию «загрузчиков».
angular - MVC фреймворк. Если вы не знали об этом, стоит подумать о том, чтобы закрыть эту страничку прямо сейчас.
angular-resource - (Angular) HTTP библиотека выбора. Это абстракция $http.
json-loader - загрузчик (снова, используемый Webpack) для распаковки JSON из .json файлов с помощью require() во время работы нашего приложения.
mustache-loader – загрузчик, который мы будем использовать, чтобы парсить наши mustache шаблоны. Mustache шаблоны – это веселье.
Я могу спокойно предположить, что вы не знаете, как все эти пакеты заиграют вместе.
Не переживайте, братишки.
8. Создайте entry-point в Angular, объявите начальные зависимости, объявите первоначальные глобальные переменные.
В frontend/app/app.js добавьте следующее:
/* Libs */
require("angular/angular");
require("angular-route/angular-route");
require("angular-resource/angular-resource");
/* Globals */
_ = require("lodash");
_urlPrefixes = {
API: "api/v1/",
TEMPLATES: "static/app/"
};
/* Components */
/* App Dependencies */
angular.module("myApp", [
"ngResource",
"ngRoute",
]);
/* Config Vars */
// @TODO in Step 13.
/* App Config */
angular.module("myApp").config(routesConfig);
app.js это то, где Webpack будет искать модули, чтобы бандлить их вместе. Лично я ценю такую организацию и методику вызовов, но такой порядок не обязателен. Существует 6 секций:
Libs – главные библиотеки, используемые на протяжении работы Angular приложения;
Globals – зарезервированные глобальные переменные, которые мы можем использовать во время работы приложения;
Components (Компоненты) – особенные модули проекта;
App Dependencies (Зависимости приложения) – объявление входной точки приложения и его зависимостей;
Config Vars – переменные, где хранятся настройки, такие как route config;
App Config - вводит configs (настройки) в приложение, используя сохраненные из предыдущей секции.
Для того, чтобы globals работали, вам следует указать ESLint на то, какие из переменных - глобальные.
В config/eslint.json добавляем следующее:
{
"env": {
"node": true
},
"extends": "eslint:recommended",
"rules": {
"indent": [
"error",
2
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"double"
],
"semi": [
"error",
"always"
],
"no-console": 0
},
"globals": {
"_": true,
"_urlPrefixes": true,
"angular": true,
"inject": true,
"window": true
},
"colors": true
}
Ниже несколько переменных, о которых мы предупредили ESLint:
_ представить lodash.
_urlPrefixes – объект, который мы будем использовать в приложении для гиперссылок. Я расскажу об этом позже.
angular, чтобы представить AngularJS object driving our entire application.
inject, который будет использоваться для ввода зависимостей Angular.
window, которая просто представляет объекты окон в JavaScript, является представителем DOM.
9. Настройка Webpack.
Теперь, когда мы выложили большинство наших зависимостей приложения, мы можем построить config file для Webpack. Webpack будет консолидировать все зависимости, а также модули для приложений, которые мы создаем в один файл. В bundle.
В frontend/webpack.config.js добавляем следующее.
module.exports = {
entry: "./app/app.js",
output: {
path: "./dist/js/",
filename: "bundle.js",
sourceMapFilename: "bundle.js.map",
},
watch: true,
// eslint config
eslint: {
configFile: './config/eslint.json'
},
module: {
preLoaders: [{
test: /\.js$/,
exclude: /node_modules/,
loader: "eslint-loader"
}],
loaders: [
{ test: /\.css$/, loader: "style!css" },
{ test: /\.html$/, loader: "mustache-loader" },
{ test: /\.json$/, loader: "json-loader" }]
},
resolve: {
extensions: ['', '.js']
}
};
Для того, чтобы Webpack бандлил все наши статические зависимости, нам нужно указать ему, где их брать, какие зависимости обрабатывать и как управлять ими до банлинга.
Давайте посмотрим на то, что указывает Webpack с помощью webpack.config.js:
Entry - это путь к тому, что Webpack'у нужно для старта бандлинга. Это можеть быть полный путь или путь, относительный тому, где webpack.config.js располагается. В данном случае мы говорим о последнем варианте.
output - это объект, содержащий в себе path, который является директорией, в которую связанные зависимости будут помещаться; filename - это название бандла; и, в данном случае, мы решили использовать sourceMapFilename, чтобы обозначить, что наша() source map будет вызван(а).
watch указывает Webpack следить за изменениями в файле, пока он выполняется. Если это не настроено как true, Webpack прогонит процесс бандлинга единожды и остановится.
eslint содержит в себе специфические ESLint настройки, используемые eslint-loader.
module указывает Webpack'у, что делать с модулями, с которыми он работает.
module.preLoaders «говорит», что делать перед бандлингом. В данном случае мы хотим запустить модули (исключив модули установленные npm) через eslint.
module.loaders - это то, где указана последовательность загрузчика. В нашем случае мы просто настраиваем test и loader, где test указывает Webpack’у, какие модули запускать в загрузчике (по соответствию с паттерном regex), и loader говорит Webpack’y, какой загрузчик использовать в модулях, которые соответствуют regex паттерну в test. Каждый загрузчик указан в строке и разделен восклицательным знаком. Ex: loader!another_loader!yet_another_loader
module.preLoaders указывает, какие preLoaders'у запускать модули. Используемые настройки такие же точно, какие мы использовали в module.loaders.
Но, Грег, какая разница между preLoaders и loaders? Я рад, что ты спросил, мой дорогой друг!!
A loader указывает Webpack'у, как бандлить требуемые файлы. Loader смотрит на модуль и говорт: «Эй, так как вы упаковываете это в один файл как строку – это то, как оно должно быть преобразованно для bundle'а».
A preLoader обрабатывает код перед loaders, например, чтобы слинтить JavaScript модули.
A postLoader является плагином Webpack'а, который обрабатывает код после бандинга. Мы не специфицировали ни один postLoader ради простоты.
10. Укажите Django загрузить приложение.
Прямо сейчас все, что нужно сделать – указать Webpack’у что создавать, как создавать и что должно быть создано. (На данном этапе я бы очень удивился, если вы попробуете запустить его и он заработает без ошибок. Если так и есть, я чертов мужик.)
Так как Django использует свой собственный URL процессор в нашем приложении, мы можем быть рады тому, как любезно Django управляет всем тем, что введено в строку браузера пользователя. Как бы то ни было, мы бандлим одностраничное приложение, используя абсолютно другой фреймворк, и хотим, чтобы у приложения был полный контроль над тем, что пользователь вводит. Все, что нам нужно – обслуживать одну страничку, в которой работает SPA. Следовательно...
В backend/mysite/mysite/urls.py добавляем в список urlpatterns следующее:
# Web App Entry
url(r'^$', TemplateView.as_view(template_name="app/index.html"), name='index'),
Это значит, что когда пользователь открывает mysite.com/, env('FRONTEND_ROOT') + app/index.html будет находить STATICFILES_FINDERS в порядке рендера HTML шаблона.
11. Создайте шаблон базы приложения Angular.
frontend/app/components/app/index.html шаблон должен выглядеть как обычный шаблон Django.
В frontend/app/index.html добавляем следующее:
{% load staticfiles %}
<html ng-app="myApp">
<head>
<title>My Sitetitle>
<script src="{% static 'dist/js/bundle.js' %}">script>
head>
<body>
body>
html>
В таком случае вам удастся запустить Webpack. Если вы запустите Django сервер и откроете localhost:8000,вы увидите пустую страничку. Если нет – дайте знать автору.
12. Напишите home component.
Давайте напишем наш первый компонент. Он отобразит текст на страничке, пока пользователь открывает localhost:8000.
Создайте директорию для компонента и базовые файлы. В frontend/app/components/:
mkdir home && touch home/home-controller.js home/home.js home/home.html
В frontend/app/components/home/home.html добавляем следующее:
<div ng-controller="HomeController as ctrl">
<div>
<h1>Home!h1>
div>
div>
Теперь добавим следующее в frontend/app/components/home/home-controller.js:
function HomeController() {
var that = this;
that.foo = "Foo!";
console.log(that); // should print out the controller object
}
angular.module("Home")
.controller("HomeController", [
HomeController
])
Определение модуля Angular должно быть объявлено в home.js:
angular.module("Home", []);
require("./home-controller");
Теперь мы можем сослаться на "Home" в области зависимости определения модуля. Давайте сделаем это!
В app/app.js добавьте следующее:
/* Components */
require("./components/home/home");
/* App Dependencies */
angular.module("myApp", [
"Home", // this is our component
"ngResource",
"ngRoute"
]);
13. Пропишите пути Angular'а, ведущие к home component и страничке 404.
Нам нужно настроить первый путь. Когда пользователь попадает на localhost:8000, Angular должен взять контроль над загрузкой отрендеренного шаблона. Чтобы сделать это, нам потребуется использовать angular-router.
В frontend/app/routes.js пишем следующее:
function routesConfig($routeProvider) {
$routeProvider
.when("/", {
templateUrl: _urlPrefixes.TEMPLATES + "components/home/home.html",
label: "Home"
})
.otherwise({
templateUrl: _urlPrefixes.TEMPLATES + "404.html"
});
}
routesConfig.$inject = ["$routeProvider"];
module.exports = routesConfig;
Если мы не добавим _urlPrefixes.TEMPLATES, angular-router предположит, что components/home/home.html является действительной ссылкой, которую узнает сервер. Так как STATIC_URL в настройках предполагает неправильную работу localhost:8000/components/home/home.html.
Также, если вы еще не заметили, вы увидите otherwise({...}) в коде роутов. Это то, как будут реализованы страницы 404.
В frontend/app/404.html добавляем следующее:
<h1>NOT FOUNDh1>
И в завершении добавляем frontend/app/app.js:
/* Config Vars */
var routesConfig = require("./routes");
14. Добавьте директивы angular-router к шаблону точки входа приложения.
А теперь нам нужно указать Angular, где будет происходить переключение отображаемого, когда пользователь пользуется навигацией. Чтобы сделать это, мы используем всю силу angular-router.
В тэг
в frontend/app/index.html добавляем:
<base href="/">
Теперь в тэг
добавляем:
<div ng-view>div>
Ваш index.html теперь должен выглядеть так:
{% load staticfiles %}
<html ng-app="myApp">
<head>
<title>My Sitetitle>
<script src="{% static 'dist/js/bundle.js' %}" >script>
<base href="/">
head>
<body>
<div>
<div ng-view>div>
div>
body>
html>
Запустите Webpack. Откройте localhost:8000. Вы должны увидеть, что произошло в home/home.html. (Если ничего, отправьте эти данные автору J ).
15. Проверьте REST API в приложении Angular.
Если все сделано, у вас появится возможность написать angular службы для Django API. Давайте создадим небольшой компонент, чтобы увидеть, можем ли мы это сделать. Этот компонент должен перечислять игры. Я предполагаю, что вы уже заполнили базы данных, следовательно запрос HTTP к localhost:8000/api/v1/games вернет список игр.
Создайте скаффолд компонент в frontend/app/components/:
mkdir -p game/list/ && touch game/list/game-list-controller.js game/list/game-list-controller_test.js game/game-service.js game/game.js game/game.html
Этот компонент будет перечислять игры.
Этот компонент должен перечислять игры. Я предполагаю, что вы уже заполнили базы данных, следовательно запрос HTTP к localhost:8000/api/v1/games вернет список игр.
В game/game-service.js:
function GameService($resource) {
/**
* @name GameService
*
* @description
* A service providing game data.
*/
var that = this;
/**
* A resource for retrieving game data.
*/
that.GameResource = $resource(_urlPrefixes.API + "games/:game_id/");
/**
* A convenience method for retrieving Game objects.
* Retrieval is done via a GET request to the ../games/ endpoint.
* @param {object} params - the query string object used for a GET request to ../games/ endpoint
* @returns {object} $promise - a promise containing game-related data
*/
that.getGames = function(params) {
return that.GameResource.query(params).$promise;
};
}
angular.module("Game")
.service("GameService", ["$resource", GameService]);
Обратите внимание на ссылку $resource, которую мы используем для того, чтобы настроить механизмы HTTP в нашей службе.
В game/list/game-list-controller.js:
function GameListController(GameService) {
var that = this;
/* Stored game objects. */
that.games = [];
/**
* Initialize the game list controller.
*/
that.init = function() {
return GameService.getGames().then(function(games) {
that.games = games;
});
};
}
angular.module("Game")
.controller("GameListController", [
"GameService",
GameListController
]);
В game/game.html:
<div ng-controller="GameListController as ctrl" ng-init="ctrl.init()">
<div>
<h1>Gamesh1>
<ul>
<li ng-repeat="game in ctrl.games">{{ game.title }}li>
ul>
div>
div>
В game/game.js:
angular.module("Game", []);
require("./list/game-list-controller");
require("./game-service");
Затем обратимся к компоненту в app.js:
/* Components */
require("./components/game/game");
/* App Dependencies */
angular.module("myApp", [
"Home",
"Game",
"ngResource",
"ngRoute"
]);
В конце концов, мы собираемся настроить роуты для списка игр, поэтому в frontend/app/routes.js добавьте следующее в объект $routeProvider:
.when("/game", {
templateUrl: _urlPrefixes.TEMPLATES + "components/game/list/game-list.html",
label: "Games"
})
Запустите Webpack снова. Все должно верно скомпилироваться. Если нет – дайте знать автору.
Откройте localhost:8000/#/games. Вы увидите список игр.
Сделано!
Это все.
Сомнения/Мысли
Но есть некоторые сомнения:
Глобальные переменные могут конкретно подставить вас, если вы не знаете, как с ними работать. Их локальное поведение не гарантирует того же на продакшене. Насколько я помню, их можно заставить работать, если правильно описан метод. Ваше приложение на Angular тесно связанно с Django. Поэтому ваше приложение не будет просто слиянием back- и фронтенда. Если ваш Django-RIP давно устарел, значит поменялись и маршруты, следовательно сконфигурируете ваш бэкенд согласно тому, как должны вести себя статические файлы. Так же вам будет необходимо заменить index.html с точкой входа Angular. Маленькие проекты не дадут вам особо попотеть, а вот большие явно заставят понервничать. Совет: единственное место, где должны сопрягаться приложение на Angular и Django сервер - это одна точка входа.
Деплоймент должен быть выполнен так же, как любой обычный деплоймент приложения.
Это все. Если у вас есть какие-либо вопросы и вы испытываете трудности, пожалуйста, оставьте их в комментариях в исходной статье!
Чит!
Автор пообещал выложить на гитхабе репозиторий со всем кодом.
Оригинальная статья на английском языке.
Огляд основних SQL запитів
Автор: Армен Маїлян
Види SQL запитів
Типи SQL запитів за їх видами
Створення та налаштування бази даних
Приклади простих запитів SQL до баз даних
SELECT
INSERT
UPDATE
DELETE
DROP
Приклади складних запитів до бази даних MS SQL
Висновки
Кожен сайт в Інтернеті, будь-який проєкт, який обробляє значний обсяг інформації, змушений зберігати цю інформацію у тих чи інших базах даних (БД). Переважна більшість проєктів інформацію зберігають у БД реляційного типу, роблячи записи в різних подобах таблиць. Як внесення нових записів, так і звернення до наявних здійснюється завдяки використанню запитів, що складаються конструкціями SQL (structured query language) – непроцедурної декларативної мови структурованих запитів. У нашому випадку це означає, що, використовуючи конструкції SQL ми будемо звертатися до БД, повідомляючи, що потрібно зробити з даними, але не вказуючи яким саме способом це потрібно зробити.
Фактично SQL є набором стандартів для написання запитів до БД. Остання чинна редакція стандартів мови SQL - ISO/IEC 9075:2016.
Ґрунтуючись на вказаних стандартах мови SQL, ряд організацій випустили свої розширені версії стандартів зазначеної мови. Подібні версії іноді називають діалектами SQL.
Варіанти специфікацій SQL розробляються компаніями та співтовариствами і служать, відповідно, для роботи з різними СУБД (Системами Управління Базами Даних) – системами програм, заточених під роботу з продуктами зі своєї інфраструктури.
Найбільш застосовувані сьогодні СУБД, що використовують свої стандарти (розширення) SQL:
MySQL — СУБД, що належить компанії Oracle.
PostgreSQL — вільна СУБД, що підтримується та розвивається спільнотою.
Microsoft SQL Server — СУБД, що належить компанії Microsoft. Застосовує діалект Transact-SQL (T-SQL).
Діалекти SQL, які створюються, специфікуються і використовуються різними організаціями, мають як спільні риси, так і ряд відмінностей у можливостях розширень.
Загальними рисами діалектів є основні конструкції, які застосовуються практично без відмінностей у багатьох реляційних БД. Основні відмінності діалектів полягають у відмінностях використаних типів даних, кількості, реалізації та детальних можливостей команд. Різні діалекти застосовують як різні набори зарезервованих слів, так і різні набори команд.
Тут ми розглядатимемо запити, застосовуючи конструкції зі специфікацій діалекту T-SQL.
Торкнемося класифікації SQL запитів.
Виділяють такі види SQL запитів:
DDL (Data Definition Language) – мова визначення даних. Завданням DDL-запитів є створення БД та опис її структури. Запитами такого виду встановлюються правила того, в якому вигляді різні дані будуть розміщуватися в БД.
DML (Data Manipulation Language) – мова маніпулювання даними. До запитів цього типу входять різні команди, використовуючи які безпосередньо здійснюються деякі маніпуляції з даними. DML-запити потрібні для додавання змін до вже внесених даних, для отримання даних з БД, для їх збереження, для оновлення різних записів і для їх видалення з БД. До елементів DML-звернень входить основна частина SQL операторів.
DCL (Data Control Language) – мова управління даними. Включає запити та команди, що стосуються дозволів, прав та інших налаштувань СУБД.
TCL (Transaction Control Language) – мова управління транзакціями. Конструкції такого типу застосовують для керування змінами, які здійснюються з використанням DML-запитів. Конструкції TCL дозволяють нам проводити об'єднання DML запитів у набори транзакцій.
Основні типи SQL запитів за їх видами:
Нижче ми розглянемо практичні приклади застосування SQL запитів для взаємодії з БД, використовуючи запити двох категорій – DDL та DML.
Створення та налаштування бази даних
Нам потрібна буде для прикладів БД MS SQL Server 2017 та MS SQL Server Management Studio 2017.
Розглянемо послідовність дій того, як створити запит SQL. Скориставшись Management Studio, спочатку створимо новий редактор скриптів. Щоб це зробити, на стандартній панелі інструментів оберемо «Створити запит», або скористаємось клавіатурною комбінацією Ctrl+N.
Натискаючи кнопку «Створити запит» у Management Studio, ми відкриваємо тестовий редактор, використовуючи який можна виконувати написання SQL запитів, зберігати їх і запускати.
Використовуємо для початку прості запити SQL, завдяки яким можна створити та налаштувати нову БД, щоб отримати можливість надалі з нею працювати.
Створимо нову БД з ім'ям “b_library” для бібліотеки книг. Щоб це зробити, наберемо в редакторі такий SQL запит:
CREATE DATABASE b_library;
Далі виділимо введений текст і натиснемо F5 або кнопку "Виконати". У нас створиться БД "b_library".
Усі подальші маніпуляції ми можемо провести із цією створеною нами БД. Для цього спочатку підключимося до цієї бази:
USE b_library;
У БД "b_library" створимо таблицю авторів "tAuthors" з такими стовпцями: AuthorId, AuthorFirstName, AuthorLastName, AuthorAge:
CREATE TABLE tAuthors (
AuthorId INT IDENTITY (1, 1) NOT NULL,
AuthorFirstName NVARCHAR (20) NOT NULL,
AuthorLastName NVARCHAR (20) NOT NULL,
AuthorAge INT NOT NULL
);
Заповнимо нашу таблицю такими авторами: Олександр Пушкін, Сергій Єсенін, Джек Лондон, Шота Руставелі та Рабіндранат Тагор. Для цього використовуємо такий SQL запит:
INSERT tAuthors VALUES
('Александр', 'Пушкин', '37'),
('Сергей', 'Есенин', '30'),
('Джек', 'Лондон', '40'),
('Шота', 'Руставели', '44'),
('Рабиндранат', 'Тагор', '80');
Ми можемо подивитися в «tAuthors» записи шляхом відправлення до СУБД простого SQL запиту:
SELECT * FROM tAuthors;
У нашій БД «b_library» ми створили першу таблицю «tAuthors», заповнили «tAuthors» авторами книг і тепер можемо розглянути різні приклади запитів SQL, якими ми зможемо взаємодіяти з БД.
Приклади простих запитів SQL до баз даних.
Розглянемо основні запити SQL.
SELECT
1) Виведемо всі наявні у нас БД:
SELECT name, database_id, create_date
FROM sys.databases;
2) Виведемо всі таблиці у створеній нами раніше БД «b_library»:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
3) Виводимо ще раз наявні у нас записи за авторами книг зі створеної вище «tAuthors»:
SELECT * FROM tAuthors;
4) Виведемо інформацію про те, скільки у нас є записів рядків у «tAuthors»:
SELECT count(*) FROM tAuthors;
5) Виведемо з «tAuthors» два записи, починаючи з четвертого. Використовуючи ключове слово OFFSET, пропустимо перші три записи, а завдяки використанню ключового слова FETCH – позначимо вибірку наступних 2 рядків (ONLY):
SELECT * FROM tAuthors
ORDER BY AuthorId
OFFSET 3 ROWS
FETCH NEXT 2 ROWS ONLY;
6) Виведемо з «tAuthors» всі записи із сортуванням в алфавітному порядку за першою літерою імені автора:
SELECT * FROM tAuthors ORDER BY AuthorFirstName;
7) Виведемо з «tAuthors» дані, попередньо по AuthorId відсортувавши їх за спаданням:
SELECT * FROM tAuthors ORDER BY AuthorId DESC;
8) Виберемо записи з "tAuthors", значення AuthorFirstName у яких відповідає імені "Александр":
SELECT * FROM tAuthors WHERE AuthorFirstName='Александр';
9) Виберемо з "tAuthors" записи, де ім'я автора AuthorFirstName починається з "се":
SELECT * FROM tAuthors WHERE AuthorFirstName LIKE 'се%';
10) Виберемо з "tAuthors" записи, в яких ім'я автора (AuthorFirstName) закінчується на "ат":
SELECT * FROM tAuthors WHERE AuthorFirstName LIKE '%ат' ORDER BY AuthorId;
11) Зробимо вибірку всіх рядків із «tAuthors», значення AuthorId у яких дорівнює 2 або 4:
SELECT * FROM tAuthors WHERE AuthorId IN (2,4);
12) Виберемо в "tAuthors" такий запис AuthorAge, значення якого - найбільше:
SELECT max(AuthorAge) FROM tAuthors;
13) Проведемо вибірку з "tAuthors" по стовпцях AuthorFirstName та AuthorLastName:
SELECT AuthorFirstName, AuthorLastName FROM tAuthors;
14) Отримаємо з "tAuthors" всі рядки, у яких AuthorId не дорівнює трьом:
SELECT AuthorId, AuthorFirstName, AuthorLastName FROM tAuthors WHERE AuthorId!='3';
INSERT
INSERT – це вид запиту SQL, у разі застосування якого СУБД виконує додавання нових записів у БД.
Додамо до «tAuthors» нового автора – Вільяма Шекспіра, 51 рік. Відповідно, у полі AuthorFirstName додасться Вільям, в AuthorLastName додасться Шекспір, в AuthorAge – 51. До AuthorId, у нашому випадку, автоматично додасться значення, інкрементоване відносно попереднього на 1.
INSERT INTO tAuthors VALUES ('Уильям', 'Шекспир', '51');
Перевіримо:
SELECT * FROM tAuthors;
UPDATE
UPDATE – SQL запит, який дозволяє внести зміни або дописувати нову інформацію до тих записів, які вже існують.
Внесемо коригування до шостого запису (AuthorId = 6). Значення змінимо для полів імені, прізвища та віку автора.
UPDATE tAuthors SET AuthorFirstName = 'Лев', AuthorLastName='Толстой', AuthorAge = '82' WHERE AuthorId = '6';
Потім звернімося до БД, щоб вивести всі наявні записи:
SELECT * FROM tAuthors;
Ми бачимо зміни інформації в записі автора під номером 6.
DELETE
DELETE – SQL запит, виконуючи який у СУБД проводиться операція видалення певного рядка з таблиці в БД.
Звернемося до "tAuthors" з командою на видалення рядка, де AuthorId = 5:
DELETE FROM tAuthors WHERE AuthorId = '5';
Щоб побачити зміни, знову звернемося до бази для виведення всіх записів:
SELECT * FROM tAuthors;
Ми бачимо, що запис автора під номером 5 тепер відсутній у tAuthors і, відповідно, не виводиться з іншими записами.
DROP
DROP – ключове слово в SQL, яке використовується для видалення даних за допомогою запиту. Наприклад, видалення деякої таблиці з БД.
Після розгляду ряду простих запитів до БД ми можемо повністю видалити нашу таблицю tAuthors, виконавши простий SQL запит:
DROP TABLE tAuthors;
Далі розглянемо складні запити SQL.
Приклади складних запитів до бази даних MS SQL
Складні запити SQL представляють собою комбінації простих запитів. Виконуючись, прості запити повертають згруповані в проміжні таблиці набори даних. А складний запит уже маніпулює даними, отриманими завдяки простим «підзапитам».
Складні запити отримуються такими способами:
Переміщенням одного запиту в інший. В цьому випадку зовнішній вираз називатиметься основним запитом, а вкладений вираз - підзапитом.
Застосування з SQL запитами різних операторів об'єднання результатів виконання підзапитів. Такі оператори називають реляційними.
Розглянемо у SQL приклади складних запитів.
Скористаємося нашою попередньою таблицею tAuthors та створимо додатково ще одну таблицю з книгами цих авторів – tBooks. У якості ідентифікатора авторів книг використовуємо значення AuthorId з "tAuthors", а назва книги - BookTitle.
CREATE TABLE tBooks (
BookId INT IDENTITY (1, 1) NOT NULL,
BookTitle NVARCHAR (20) NOT NULL,
Author INT NOT NULL
);
Заповнимо «tBooks» такими книгами:
INSERT tBooks VALUES
('Руслан и Людмила', '1'),
('Кавказский пленник', '1'),
('Евгений Онегин ', '1'),
('Радуница', '2'),
('Преображение', '2'),
('Мартин Иден', '3'),
('Морской волк', '3'),
('Белый Клык', '3');
1) Зробимо вибірку з БД усіх книг, у яких ім'я автора – «Александр»:
SELECT BookId, BookTitle
FROM tBooks
WHERE Author = (SELECT AuthorId FROM tAuthors WHERE AuthorFirstName = 'Александр');
Отримаємо:
2) Зробимо вибірку даних із «tBooks» усіх книг, авторами яких є люди з іменами «Александр» або «Сергей»:
SELECT BookTitle
FROM tBooks
WHERE Author = SOME(SELECT AuthorId FROM tAuthors
WHERE AuthorFirstName IN ('Александр', 'Сергей'));
3) Зробимо вибірку за книгами з таблиці «tBooks», у яких імена авторів НЕ «Сергій» та НЕ «Олександр»:
SELECT *
FROM tBooks
WHERE Author != ALL(SELECT AuthorId FROM tAuthors WHERE AuthorFirstName IN ('Александр', 'Сергей'));
4) Візьмемо таблицю «tBooks» і зробимо з неї вибірку всіх книг із зазначенням як імен, так і прізвищ авторів цих книг із «tAuthors»:
SELECT tBooks.BookId, tBooks.BookTitle, tAuthors.AuthorFirstName,
tAuthors.AuthorLastName
FROM tBooks
JOIN tAuthors ON tAuthors.AuthorId = tBooks.Author;
Висновки
Ми з вами розглянули декілька варіантів найпростіших і найскладніших SQL запитів. Звичайно цю статтю не варто розглядати ні як навчальний посібник, ні як вичерпний перелік можливостей запитів у T-SQL та інших діалектах. Її швидше за все можна вважати прикладом SQL запитів для початківців. Однак вона може бути для Вас відправною точкою.
Існує набагато більше різних SQL запитів. Це і запити з циклічними конструкціями, і рекурсивні, і різна робота зі змінними, і інші види запитів та підзапитів. Якщо Ви хочете вивчити цю дуже важливу специфічну мову складання запитів до БД – можете пройти відповідні курси на нашому порталі ITVDN.com, обравши відповідний Вам діалект:
Transact-SQL - https://itvdn.com/ru/video/ssms_tsql
SQL Essential - https://itvdn.com/ru/video/sql-essential
SQL Практикум - https://itvdn.com/ru/video/sql-workshop
MySQL - https://itvdn.com/ru/video/mysql-essential
PostgreSQL - https://itvdn.com/ru/video/postgresql
Вибір IT-спеціальності. Добірка матеріалів ITVDN за 2020 рік
Автор: Редакція ITVDN
Привет, друзья!
IT — одна из сфер деятельности, которая продолжает расти и развиваться, несмотря на кризис 2020.
Все больше людей хотят перейти в IT, но как это сделать, если ты до конца не понимаешь, в чем разница между специальностями, языками программирования, что перспективно, что тебе под силу, а что будет сложно?
Чтобы облегчить путь новичков в IT, команда ITVDN регулярно создает много видео уроков, вебинаров, статей, планов обучения, привлекая для этого экспертов с большим опытом в подготовке специалистов.
Огромной популярностью среди новичков пользуется рубрика Выбор IT специальности на YouTube канале ITVDN. Сегодня мы вам расскажем о том, какие наиболее интересные вебинары и статьи были в 2020 году. Смотрите, читайте и учитесь на ITVDN!
Вебинары ITVDN по выбору специальности
Вебинары по теме “Как стать ...” — это отличный источник важной информации из уст профессиональных разработчиков. В них вы найдете самые актуальные ведомости касательно желаемой IT-специальности: специфика профессии, какие технологии и языки стоит учить, эффективный подход к обучению, его длительность и т. д.
Вам могут быть полезны следующие вебинары за текущий год:
Кто есть кто в IT компании. Структуры и роли
Как стать C# разработчиком в 2021 году. .NET или .NET Core?
Как стать программистом? Frontend, Java, Python или .NET - что выбрать?
Как прокачать английский для собеседования в IT компанию
Как стать веб-дизайнером с нуля
Как стать Android разработчиком
Как стать FrontEnd разработчиком?
Как стать Java разработчиком?
Как стать Python разработчиком?
Как стать C# / .NET разработчиком?
Статьи ITVDN по выбору специальности
Приведенные ниже статьи позволят вам сформировать целостное понимание популярных на сегодняшний день специальностей, а также разобраться с языками программирования и технологиями, которые требуются для успешного старта в выбранном направлении.
Что должен знать C# / .NET разработчик?
С чего начинается создание сайтов? Специальность верстальщик
Кто такой Full Stack разработчик?
Какую IT-специальность выбрать в 2021 году?
Что должен знать FrontEnd разработчик в 2019 году?
Что должен знать Python разработчик в 2020 году?
Что должен знать Java разработчик в 2020 году?
Как стать разработчиком игр?
Как стать Android разработчиком?
Java vs Python. Что выбрать?
Также приведем статьи, которые подойдут любому начинающему разработчику. Они ориентированы на расширение вашего IT-кругозора, а также вы найдете в них множество полезных советов по обучению и развитию себя как профессионала.
FAQ начинающего программиста
Онлайн обучение программированию: подводные камни и советы
Идеальное резюме программиста: что писать в резюме?
Как не провалить своё IT-обучение?
Нужно ли программисту высшее образование?
C наилучшими пожеланиями, команда ITVDN
Оставайтесь с нами и приводите друзей!
Коротко про GIT, node.js, npm, Grunt, Bower на прикладі офіційного AngularJS програми angular-phonecat
Автор: Антон Гончаров
Введение
Эта статья предназначена для начинающего разработчика, который впервые столкнулся с изучением AngularJS и сопутствующими технологиями, такими как GIT, node.js, Grunt, Bower. Вы могли много читать литературы по поводу перечисленных выше технологий, в этой статье мы лишь вкратце опишем, чем по сути является каждая из них, и как с ней работать.
1. Проходим по ссылке:
https://docs.angularjs.org/tutorial
и следуем всем инструкциям по установке. Не бойтесь, мы Вам в этом поможем! И постараемся вместе разобраться в основных понятиях современного Frontend Development'a :)
Для начала нам следует установить git на свою ЭВМ :)
Коротко о git.
Git — система для контроля версий файлов. Более обширное определение - это ресурс, который позволяет разработчику или команде разработчиков контролировать версии своих приложений. Подробнее тут:
https://ru.wikipedia.org/wiki/Git
Идем по ссылке в новой вкладке:
http://git-scm.com/
и выбираем ту версию git, которая нас интересует, в соответствии с нашей операционной системой.
Скачиваем файл для установки, с расширением .exe и устанавливаем в папку Program files.
2. Идем по ссылке в новой вкладке браузера
https://github.com/
и регистрируемся. Github – самый крупный веб-сервер для хостинга (размещения) проектов разработчиков.
Итак, мы это все сделали, далее скачиваем приложение из репозитория angular-phonecat, размещенного на Github. То есть, нашей задачей теперь будет взять и скачать готовое приложение себе на жесткий диск.
3. AngularJS – это JavaScript фреймфорк, который заточен под разработку одностраничных приложений.
Официальный сайт AngularJS
https://angularjs.org/
Основной идеей AngularJS является убеждение создателей оного, что декларативное программирование (парадигма программирования - описание программы, какая она по сути, а не то, как ее создать) находит применение в разработке внешнего вида приложения, а императивное программирование (парадигма программирования – в отличие от декларативного программирования, описывает процесс вычисления в виде инструкций, по сути, пошагово изменяет инструкции программы, похоже на приказы) используется для описания бизнес логики.
AngularJS – расширяет HTML, чтобы создать двустороннюю привязку данных для динамического контента.
Цели AngularJS:
DOM-манипуляции не зависят от логики приложения.
Параллельная разработка путем разделения клиентской части и серверной части приложения.
Планирование разработчиком всех приложений – интерфейс, бизнес-логика, тестирование.
Открываем терминал/консоль и перемещаемся в ту папку, в которую хотим сохранить проект с помощью команды
cd Documents/
(эта команда означает - cd – change derictory на Documents)
и нажимаем Enter
мы переместились в папку, где хранятся документы (просто потому, что мне так удобней, можно этого не делать и остаться в корне диска).
Копируем следующую строку
git clone --depth=14 https://github.com/angular/angular-phonecat.git
вставляем в терминал/консоль и нажимаем Enter. Эта строка создает папку angular-phonecat и копирует приложение с Git с последними 14 коммитами (изменениями). Ждем окончания копирования проекта.
Далее переходим в директорию с нашим приложением командой
cd Documents/angular-phonecat
или
cd angular-phonecat/
после жмем Enter и оказываемся в папке с приложением
4. У нас на жестком диске есть наше приложение, теперь нам следует установить node.js.
Node.js – что такое node.js? Есть много статей, определений и объяснений. В общем и коротко:
Node.js – это интерпретатор JavaScript. Приложение node.js получает js код и выполняет его.
Нам надо установить node.js в папку с нашим приложением.
Переходим по ссылке:
http://nodejs.org/download/
качаем приложение и устанавливаем.
5. Вместе с node.js устанавливается и npm. Что такое npm?
Npm – это node package manager. Npm устанавливает пакеты, которые прописаны в файле package.json
перед установкой npm нам следует проверить, какая версия node.js установлена у нас. Это мы делаем командой в терминале:
node –-version
есть :)
Теперь в терминале набираем следующее:
npm install
На выходе получаем такую структуру нашего проекта:
Файл package.json содержит в себе информацию о приложении, название, версию, установленные пакеты в приложении. Возможна установка пакетов как через файл package.json, так и через терминал.
6. Это не обязательно, но в будущем этот пакет Вам пригодится.
Grunt – это Task Runner – автоматизатор процессов, позволяет проводить минификацию кода, сборку кода(компиляцию), тестирование.
В терминале вводим следующее:
npm install -g grunt-cli
(-d - говорит о том, что мы устанавливаем grunt глобально.) Дополнительно устанавливаем в директорию с приложением
npm install grunt-cli
теперь обновляем npm:
sudo npm update npm -g
sudo - (substitute user and do – подменить пользователя и выполнить) – в Unix системах позволяет пользователям выполнять команды от имени суперпользователя root.
В директории с приложением требуется создать файл Gruntfile.js, вложим в него код из официального примера
http://gruntjs.com/sample-gruntfile
в конце страницы - конечная версия файла, копируем код себе в файл. Или копируем отсюда:
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
options: {
separator: ';'
},
dist: {
src: ['src/**/*.js'],
dest: 'dist/<%= pkg.name %>.js'
}
},
uglify: {
options: {
banner: '/! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> /\n'
},
dist: {
files: {
'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>']
}
}
},
qunit: {
files: ['test/**/*.html']
},
jshint: {
files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
options: {
// options here to override JSHint defaults
globals: {
jQuery: true,
console: true,
module: true,
document: true
}
}
},
watch: {
files: ['<%= jshint.files %>'],
tasks: ['jshint', 'qunit']
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.registerTask('test', ['jshint', 'qunit']);
grunt.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);
};
Пакеты, которые мы прописали в Gruntfile.js, следует установить через npm следующими командами:
npm install grunt-contrib-uglify --save-dev
npm install grunt-contrib-qunit --save-dev
npm install grunt-contrib-concat --save-dev
npm install grunt-contrib-jshint --save-dev
Подробнее об установленных пакетах можно прочитать тут:
https://github.com/gruntjs/grunt-contrib-uglify
https://github.com/gruntjs/grunt-contrib-qunit
https://github.com/gruntjs/grunt-contrib-concat
https://github.com/gruntjs/grunt-contrib-jshint
https://github.com/gruntjs/grunt-contrib-watch
7. Установка Bower и что это такое.
Bower – менеджер пакетов для клиентской стороны приложения JS.
Отличием Bower от Npm есть то, что Bower, если возникнет конфликт, не позволит Вам поставить несовместимый пакет(библиотеку), которая уже установлена, Bower ставит одну версию пакета.
В терминале ставим глобально bower и пишем:
npm install -g bower
и конечно ставим в директорию с проектом
bower install
8. Сongrats !!!
Теперь у нас установлено приложение и мы можем запускать его, из файловой системы заходим в папку с приложением, потом в папку – app, находим файл и тапаем (двойной клик) по нему index.html или (что будет правильным) нужно зайти в терминал и ввести:
npm start
(запускаем сервер) и в браузере в омнибоксе (адресной строке) ввести:
http://localhost:8000/app/index.html
Wuala – наше приложение запускается и работает.
Подробнее об AngularJS и как с ним работать вы можете узнать из курса AngularJS в учебном центре CyberBionic Systematics.
Всем спасибо и удачного кода.
Що таке адаптивна верстка і навіщо вона потрібна
Автор: Редакція ITVDN
Что такое адаптивная верстка?
Преимущества мобильного адаптивного дизайна
Почему адаптивный дизайн важен для бизнеса
Как создать адаптивный дизайн
Плавающая Сетка (Fluid Grid)
Гибкий текст и изображения
Медиа-запросы
Пользовательское тестирование адаптивных сайтов
Браузерное и устройство-зависимое тестирование на адаптивный дизайн
Вдохновение от других адаптивных сайтов
Будущее адаптивного дизайна для мобильных устройств
Является ли ваш сайт Mobile-Friendly?
Подводя итоги
От редакции ITVDN
Еще в 2015 году Google внедрил изменения в алгоритмы своей поисковой системы, которые теперь учитывают адаптированность сайта под мобильные устройства как важный пункт при ранжировании сайта. Дата была удачно названа Мобилгеддон (Mobilegeddon), как сравнение с Армагеддоном. Одно только такое введение требований от поисковиков к наличию мобильной версии сайта может оправдать важность адаптивного дизайна. Проще говоря, веб-сайт должен быть удобным для просмотра на смартфоне.
Требования к адаптивной верстке включают в себя такие элементы дизайна, как:
читаемый текст без необходимости его увеличения;
достаточное количество места для целей касания (tap targets);
отсутствие горизонтальной прокрутки.
На сегодня уже почти 4 миллиарда пользователей используют смартфоны для серфинга в Интернете.
Веб-сайты, не оптимизированные для всех небольших экранов смартфонов, имеют рейтинг в поисковых системах ниже тех, что выполнены адаптивно.
Более 50% поисковых запросов в Интернете теперь происходит с мобильного устройства.
Чтобы ваш веб-сайт мог работать с карманными устройствами (не создавая отдельное приложение), вам для начала стоит признать – адаптивная вёрстка важна для пользователей смартфонов.
Давайте рассмотрим более детально, почему и как это происходит.
Прежде всего ... а что такое адаптивная верстка и мобильный дизайн, и почему вы вообще должны о них заботиться?
Что такое адаптивная верстка?
Адаптивный веб-дизайн (RWD - Responsive web design) создает систему, позволяющую одному сайту (с одним URL-адресом и одним источником контента) реагировать и адаптироваться к размерам устройства пользователя. Адаптивный веб-сайт создан с использованием верстки с гибким макетом, который подстраивается под размеры экрана устройства.
По-сути, благодаря адаптивной верстке, ваш веб-сайт будет отлично выглядеть и хорошо работать как на настольном компьютере (или ноутбуке), так и на планшете, и в браузере мобильного телефона.
В прошлом разработчики создавали более одного сайта, для соответствия страниц экранам разных размеров. С учетом того, что на рынке сегодня представлено много типов устройств, это кажется совершенно неэффективным… верно?
Сам термин «адаптивная верстка» был фактически придуман в 2010 году веб-дизайнером Итаном Маркоттом. Сегодня адаптивная верстка в веб-дизайне уже не новая тенденция, а скорее проверенный временем способ мышления, стоящий за созданием сайтов.
На сегодня наличие адаптивного веб-сайта больше не является еще одной возможностью для развития вашей инфраструктуры — это уже необходимость!
Преимущества мобильного адаптивного дизайна
Преимущество адаптивного макета номер один— это получение гарантии того, что любой пользователь на любом устройстве будет иметь наилучшие возможности взаимодействия с контентом на вашем сайте.
Адаптивная верстка веб-сайта также является отличным способом улучшить контент на вашем сайте. Вы сможете убедиться, что те, кто использует мобильное устройство, видят всю важную информацию.
Благодаря особенностям алгоритма Google, адаптивный веб-дизайн повышает видимость сайта в поисковых системах, поскольку он удобен для просмотра на мобильных устройствах.
Сайт с качественным представлением контента на мобильном устройстве будет находиться в результатах поиска выше, чем сайт, хорошо отображающий контент только на десктопах.
Почему адаптивный дизайн важен для бизнеса
Расширяется охват клиентов благодаря захвату пользователей небольших устройств (планшетов и смартфонов);
Постоянный опыт работы с широкой аудиторией, который может увеличить количество потенциальных клиентов, продажи и конверсии;
Аналитика, отслеживание и отчетность по версиям сайтов для десктопов и мобильных устройств могут быть в одном месте;
Затраты времени и стоимость управления контентом снижается;
Более 60 % запросов в Google на конец первого квартала 2019 делаются с мобильных устройств.
Обратите внимание, что есть еще два способа, с помощью которых можно обеспечить взаимодействие пользователя с сайтом через мобильные приложения.
Первый называется динамическим показом (Dynamic Serving), в котором используется один и тот же URL-адрес, но разные коды HTML и CSS. Страницы распознают устройство, на котором они просматриваются, и предоставляют соответствующий код.
Второй способ — это вообще отдельный мобильный сайт. Когда пользователи посещают сайт с мобильного устройства, они отправляются на другой - мобильный URL-адрес. Вам следует выяснить, какой вариант лучше всего подходит для вашего присутствия в Интернете, прежде чем остановиться на одном.
Учтите, что на Google ежедневно приходится более 5,6 миллиардов поисковых запросов.
Рекомендуемая Google конфигурация для сайтов, оптимизированных для смартфонов, - это сайты с адаптивным веб-дизайном.
Google даже предлагает тест на адаптивность сайта под мобильные устройства, чтобы вы могли увидеть, насколько легко посетитель может использовать вашу страницу на мобильном устройстве. Вы просто вводите URL страницы и получаете оценку.
Как создать адаптивный дизайн
Как сделать адаптивную верстку? Есть несколько моментов, о которых стоит подумать при создании адаптивного макета. Это процесс, который требует определенной системы проектирования и иерархии контента среди различных устройств.
Три основных компонента адаптивного веб-дизайна включают в себя:
Гибкая (плавающая) сетка - fluid grid;
Гибкий текст и изображения;
Медиа-запросы.
Рассмотрим каждый из этих элементов детальнее.
Плавающая Сетка (Fluid Grid)
Сетка является ключевым элементом для создания адаптивного макета.
На сегодня сетки уже не являются чем-то новым. Веб-дизайнеры использовали сетки для создания веб-сайтов с самого начала. Однако в прошлом эти сетки имели фиксированную ширину и не позволяли поддерживать плавную компоновку.
Гибкая сетка, используемая для адаптивных веб-сайтов, обеспечит вам гибкость и масштабируемость дизайна. Элементы будут иметь постоянный интервал, пропорции и смогут настраиваться на определенную ширину экрана в процентах.
Гибкий текст и изображения
Способ отображения текста зависит от того, на каком устройстве пользователь просматривает ваш сайт. Однако текст должен оставаться читаемым, несмотря ни на что. На адаптивных веб-сайтах есть возможность увеличить размер шрифта и высоту строки (расстояние между каждой строкой текста) для удобочитаемости.
Гибкий текст и изображения настраиваются в пределах ширины макета, в соответствии с иерархией содержимого, заданной с помощью CSS (таблицы стилей). Текст на сайте с адаптивной версткой теперь может быть разборчивым независимо от устройства конечного пользователя. Благодаря гибкому контейнеру (внутри сетки) текст может переноситься с увеличением размера шрифта на небольших устройствах.
Гибкие изображения могут оказаться более сложными из-за времени загрузки в небольших браузерах устройств. Но эти изображения могут масштабироваться, обрезаться или исчезать в зависимости от того, какой контент необходим для мобильных устройств.
Медиа-запросы
Медиа-запросы - это код, который обеспечивает гибкость макета на адаптивных веб-сайтах. Медиа-запросы определяют код CSS, который будет применен соответственно, в зависимости от размеров и ориентации устройства (например, книжная ориентация iPhone или альбомная ориентация iPad и т. д.).
Медиа-запросы допускают существование несколько макетов дизайна, которые будут использовать одну и ту же HTML-кодированную веб-страницу.
Все три указанных элемента являются основой адаптивной верстки. Однако есть и другие важные средства, которые могут помочь определить акценты и усовершенствовать адаптивный веб-дизайн ваших сайтов для мобильных устройств.
Обратите внимание на:
Пользовательское тестирование адаптивных сайтов
Информация о том, как пользователи взаимодействуют с вашим сайтом, - бесценна и точно стоит того, чтобы заплатить за ее получение.
Существует множество способов провести пользовательское тестирование, чтобы получить максимально полезную обратную связь.
Такие сайты, как UserTesting.com, предоставляют пользователям тестирование за небольшую плату или бесплатно. Различные методы, такие как тестирование in-the-wild и карточная сортировка (Card Sorting), также могут помочь обнаружить неожиданные болевые точки и слабые места в использовании вашего продукта.
Браузерное и устройство-зависимое тестирование на адаптивный дизайн
Убедитесь, что ваш адаптивный дизайн и верстка совместимы со всеми соответствующими браузерами и сохраняет целостность вашего пользовательского опыта и дизайна.
Не полагайтесь только на изменение размеров окна браузера при тестировании адаптивного веб-дизайна для мобильных устройств. Попробуйте просмотреть сайт на как можно большем количестве физических устройств.
Вы будете удивлены тем, что можно обнаружить при переходе от одной операционной системы к другой, от одного устройства – к другому.
Вдохновение от других адаптивных сайтов
Точно также, как и выполняя любой другой дизайн-проект, обратитесь к опыту других людей. Найдите другие адаптивные веб-сайты, которые творчески обыгрывают концепцию адаптивного веб-дизайн.
Задумайтесь над следующими вопросами:
Какие веб-сайты или приложения вы часто используете на своем мобильном телефоне или других портативных устройствах?
Почему вы предпочитаете один сайт другим, которые могут предоставлять аналогичные услуги?
Предпочитаете ли вы использовать их на смартфоне или на настольном компьютере?
Поиск ответов на эти вопросы может помочь вам найти слабые места, которые вы, возможно, никогда не замечали, во время ежедневного использования своего вебсайта.
Будущее адаптивного дизайна для мобильных устройств
Мы знаем, что Google требует следующих оптимизированных элементов для эффективного взаимодействия с пользователями мобильных интерфейсов, используя адаптивный веб-дизайн:
Текст, с читаемым размером без необходимости его принудительного увеличения;
Контент, который умещается на экране устройства, без необходимости горизонтальной прокрутки;
Ссылки и кнопки, расположенные на достаточном расстоянии друг от друга, чтобы не было затруднений в работе с интерфейсом;
Разумное время загрузки страниц;
Не используйте Flash!
Эти правила адаптивной верстки очень важно соблюдать.
Рост числа мобильных устройств — это только начало перехода к более удобному использованию Интернета. Нужно быть уверенными, что пользователи могут просматривать ваш сайт в любом месте на любом устройстве, самые разнообразные мобильные носимые устройства становятся все более популярными.
Важным моментом будет учитывать современные размеры гаджетов, чтобы понимать в вашей адаптивной верстке какие разрешения учитывать. К примеру, на 2019 год все еще лидирующим остается разрешение экранов - 360х640.
Является ли ваш сайт Mobile-Friendly?
Пройдите тест Google, чтобы узнать, насколько адаптирован ваш сайт для мобильных устройств.
Ваш сайт получил зеленый свет? Отлично, значит вы прошли тест Google на адаптивность. Вы уже прочитали выше причины, почему адаптивный дизайн важен для пользователей вашего сайта.
Вместо зеленого видите большие красные иксы? Значит вам следует начать предпринимать определенные шаги для оптимизации работы вашего сайта под пользователей мобильных устройств.
Помните, что изменения в алгоритмах Google и требованиях к адаптивному дизайну в настоящее время мало учитывают планшеты, но, если вы сделаете ваш сайт полностью адаптивным - вы будете впереди тех конкурентов, которые этого еще не сделали!
Подводя итоги
Согласно требованиям сегодняшнего времени, ваш веб-сайт должен отлично выглядеть и хорошо работать как на настольном компьютере, так и на планшете, и в браузере смартфона. Адаптивный веб-дизайн может помочь вам достичь этого.
В этой статье мы ответили на общий вопрос «что такое адаптивный дизайн?». Есть три компонента адаптивного веб-дизайна: плавающая сетка, гибкий текст и изображения и медиазапросы.
Помните о важности адаптивного веб-дизайна для вашего бизнеса.
Выполнение вашего сайта по всем правилам адаптивной верстки поможет вам:
Увеличить охват потребителей на всех устройствах;
Поддерживать постоянный качественный пользовательский опыт, который увеличивает удержание аудитории на сайте;
Консолидировать данные аналитики, отслеживания и отчетности;
Сократить время и стоимость управления контентом;
Конкурировать в своей отрасли с другими брендами.
Google привлекает к коммерческим сайтам более 85% трафика мобильного поиска и рекомендует применять на ваших сайтах адаптивный дизайн. Поскольку адаптивный веб-дизайн удобен для мобильных устройств, он помогает улучшить видимость в поисковых системах, что, в свою очередь, может увеличить количество посетителей вашего сайта.
Увеличение трафика приводит к лучшей генерации потенциальных клиентов, дополнительным конверсиям и увеличению продаж - три основные причины, по которым вам нужен адаптивный веб-дизайн!
От редакции ITVDN
Мы с вами рассмотрели необходимость адаптивной верстки для каждого современного сайта. Такой подход является конкурентным преимуществом для компании из любой сферы бизнеса. Если говорить о разработчике, то навыки создания адаптивных web-сайтов будут существенным конкурентным преимуществом при поиске работы. Специальные знания и навыки вы можете получить, обучаясь по видео курсам ITVDN. В первую очередь это курсы:
HTML5&CSS3 Advanced
Практический курс по верстке лендинга
Создание адаптивного сайта с Bootstrap 3
Также вам могут быть интересны другие курсы и технологии, которые входят в программу обучения по специальностям Верстальщик сайтов и FrontEnd разработчик.
По материалам статьи за авторством Сони Грегори.
Популярні PHP MVC фреймворки
Автор: Редакція ITVDN
Автор статьи: Влад Кобылянский, архитектор программного обеспечения, разработчик и консультант по технологиям малого бизнеса (Майами, Флорида).
Вопрос: Что сегодня происходит с PHP фреймворками?
В феврале 2017 года я так ответил на этот вопрос:
«В основном все крутится вокруг двух PHP фреймворков - Laravel и Symfony. Особой нужны в использовании CakePHP, Zend, CodeIgniter, Yii и т. д. нет, если вы начинаете новый проект. Только если вы уже знаете эти фрэймворки или у вас в команде есть разработчики которые привыкли работать с ними, тогда причины их использования обоснованы.
Когда начинается реальная разработка, вы должны иметь возможность находить инструменты, плагины, ответы на общие проблемы. С сообществами Laravel и Symfony, с постоянным развитием новых «модулей» или функций, не будет ощущения, что вы остались «в стороне». Одни Laracast (даже если вы не работаете в Laravel) чего стоят! Они просто фантастичны.
Когда заходит речь об интеграции с iron.io или другими SaaS сервисами, поддержке широкого спектра источников данных или о среде разработки – Laravel и Symfony и их расширения намного более продвинуты.
Еще одним достоинством Lumen, является быстрая разработка и прототипирование API для Laravel. При этом это никак не ограниченно для построения больших приложений.Вообще говоря, сегодня мы определенно видим переход к контейнерной архитектуре, где MVC играет гораздо меньшую роль. Все это касается микросервисов, оркестровки и создания приложений как «функций» (AWS Lambda и подобных сервисов). Возможно, пришло время освежить наши навыки Node/JS и GoLang?»
Хотя я в целом доволен этим ответом, сейчас я думаю, что некоторые моменты пришло время пересмотреть.
Прежде чем перейти к таким странным темам, как GoLang, давайте взглянем на тенденции PHP MVC фреймворков.
Я бы сказал, что тенденции, которые мы наблюдали в прошлом, остаются. Laravel продвигается вперед, в то время как большинство остальных фреймворков отстает. В популярности Symfony наблюдается небольшой всплеск, вероятно, из-за долгожданного выпуска Symfony 3. Я попробовал более конкретные поиски для сравнения, такие как «CakePHP 3» или «ZF2», однако они не привели к статистически значимым тенденциям.
На этот раз я добавил CodeIgniter, потому что он оказалася очень популярным. Я получил ряд вопросов о CodeIgniter. Если коротко, CI сейчас не в конкуренции, потому что это не 100% фреймворк MVC. Иначе, чем организованной коллекцией POPO, я это не назову.
Для наглядности представляю вам цитату из руководства CodeIgniter:
«CodeIgniter имеет довольно свободный подход к MVC, поскольку не требуются Models. Если вам не нужно дополнительное разделение или вы обнаружите, что поддерживающие Models требуют большей сложности, чем вы хотите, вы можете их проигнорировать и создать свое приложение с помощью Controllers и Views.»
Когда дело доходит до построения структуры, я просто не согласен с таким подходом. Возможно, это достойный шаблон (отсюда и популярность CodeIgniter), однако должна быть какая-то дисциплина, навязанная фреймворком, иначе конечный продукт в итоге превращается в беспорядочный спагетти-код, завернутый в какой-то «шаблон».
Далее, Symfony 3 привнес некоторые достойные улучшения в разработку и целый ряд новых «фич». Как и многие аналоги PHP, теперь он предлагает микро-фреймворк. ZF3, к примеру, добавил ряд улучшений, таких как поддержка PHP7 (наконец!) и даже стал микро-фреймворком... но, в их руководстве так и говорится:
«Для пользователей Zend Framework 2 MVC, различия с ZF3 незначительны...»
Я действительно надеялся, что они скажут, что различия есть, что было замечательное архитектурное усовершенствование, замечательные новые модули, которые помогают вам разрабатывать все по-современному. Но, увы, по большей части ZF3 по-прежнему похож на ZF2.
Long Story Short
Вот как я вижу мир PHP фреймворков сегодня:
Symfony или Laravel (выбор зависит от того, какую задачу вам нужно решить)
Все остальное
Laravel на первом месте. Объем доступной информации, Laracasts, таланты разработчиков во всем мире, простые реализации шаблонов, интегрированные наборы инструментов тестирования, активная реализация записей в форме Eloquent, облегченная версия в Lumen, развитие Homestead (Vagrant) – все перечисленное способствует фреймворку действительно выделяться и для новых, и для опытных разработчиков.
Однако модели Eloquent могут стать непослушными и довольно большими по размеру, а сервисов Laravel (не путать с микросервисами) можно создать очень много, и вот тут люди начинают думать о реализации Repository, которому здесь не место. Так родился Monolith.
Если вам не нравится активный шаблон записи и вам нужна дополнительная гибкость в репозиториях, или, возможно, вы видите слишком много независимых анонимных функций, тогда используйте Symfony + Doctrine. Рассматриваю ли я Symfony как шлюз для монолитных приложений? В какой-то степени, да.
В целом, я бы не назвал это резким изменением с прошлого года. Тем не менее, нам нужно взглянуть на общую картину: правильно разработанное приложение выходит за рамки чистого MVC; речь идет об инфраструктуре, конвейере развертывания, разъединённой архитектуре. Все это может быть достигнуто в стеке MVC, но нужно быть внимательным, чтобы избежать Monolith.
Приход микросервисов
Раньше я упоминал о распространенности микросервисов и необходимости улучшать навыки GoLang или Node. А в статье о PHP MVC было бы глупо не упомянуть о явно растущем движении к микросервис-ориентированной архитектуре (MOA); и это движение набирает обороты, поверите вы или нет.
Хотя эти два понятия не являются взаимоисключающими, не нужно находить параллели между ними, ведь они действительно представляют собой разные философии. В качестве примера, размещение вашего приложения MVC в одном контейнере и MySQL в другом, а затем объединение их вместе, не обязательно представляет собой надлежащую MOA.
Это, безусловно, лучший подход, чем пытаться установить MAMP, XAMPP или что-либо еще, чтобы заставить ваш компьютер работать с приложением.
Кроме того, это может решить некоторые проблемы, такие как простота запуска локальной среды на разных платформах и, возможно, в некоторых случаях стратегии развертывания, но вы застрянете с монолитным MVC в вашем приложении/контейнере.
Уничтожение Monolith
Микросервисы – это как раз о «разрушении». В то время как MVC обращается к вашей структуре кода и организации, обеспечивая надежный подход к разделению проблем, эта концепция еще больше расширяется контейнерами/сервисами/MOA.
Вместо того, чтобы просто отделять виды (Views) от моделей (Models), вы теперь разделяете каждый «кусок» или логическую единицу вашего приложения на индивидуальную службу, предназначенную для правильной работы с собственными обязанностями.
Если у вашего MVC-приложения есть контроллер «Поиск», действия и соответствующие методы модели, то у нас уже есть пример монолитного приложения.
Напротив, используя подход MOA, у нас будет сервис для каждого из этих процессов. В качестве примера:
Router сервис
Request сервис
Query сервис
DataSource сервис
Response сервис
Но не все эти «сервисы» являются частью стека MVC? Конечно нет. Они являются строительными блоками нашего Monolith.
С MOA каждый сервис работает в рамках собственной среды, а мы, как архитекторы, можем разработать лучший подход к решению конкретного запроса.
В качестве примера, если я должен был бы написать службу обработки изображений в среде Laravel, я использовал бы что-то вроде расширения PHP-GD2, что может быть не самым эффективным способом обработки изображений. Служба C++, которая обрабатывает мои запросы в обработке изображений, может быть намного быстрее и определенно более надежной при масштабировании. И мы могли бы сделать вывод службы обработки изображений и отправить ее в службу DataStore, службу CloudStorage и службу Queue Email.
Решение этой же задачи с кучей скрытых заданий и, возможно, нескольких отдельных приложений MVC и пользовательских сценариев – это то, как разработчики делали это раньше (2 года назад). Время двигаться вперед.
Масштабируемость
Здесь возникают проблемы (или заканчиваются, в зависимости от того, куда вы держите курс). С одной стороны, очень сложно масштабировать Monolith: если вы создадите все больше и больше логики в одном и том же наборе MVC, вы застрянете с хорошо структурированным приложением ужасной сложности. С другой стороны, если вы построите тысячу микросервисов на разных языках, как вы будете управлять этим беспорядком?
Существуют различные инструменты компоновки контейнеров (например, Kubernetes, Swarm, Mesos), услуги по развертыванию контейнеров (GKE и AWS ECS), однако лишь немногие предприятия используют архитектуру Docker. Есть удачные истории в построении инфраструктуры с использованием Docker или других контейнерных технологий (т. е. GKE). Большинство из этих историй исходят от компаний, которые могут позволить себе тратить ресурсы на архитекторов, дефолтов, администраторов баз данных и инженеров. Тем не менее, сейчас идут бесчисленные дискуссии о том, как развернуть хорошо организованный и элегантный MOA.
В любом случае, вы не решите эту проблему самостоятельно, и пока вы не достигнете относительно большого масштаба, эта проблема действительно нуждается в решении. Может быть, сейчас не самое время усердствовать.
Золотая середина на сегодняшний день (даже для тех, кто занимается приложениями меньшей сложности или не такими требованиями к трафику) заключается в том, чтобы разгрузить многие типичные сервисы сторонним провайдерам. Почти все доступно сейчас как сервис. Фоновые задания, обработка изображений, аутентификация, аналитика данных, ведение журнала, отправка электронной почты, системы очереди не обязательно должны строиться в одном стеке MVC, а архитектор должен подумать о том, что может быть выгружено в систему SaaS за небольшую ежемесячную стоимость (т.е. поиск Algolia) или, возможно, специально созданную докерную службу, работающую в облачном пространстве, которая выполняет эту обработку изображений.
Я думаю, важно, чтобы вы не начали перепроектировать весь проект с начала, не сбрасывать все, что у вас уже есть, а выпускать докеры, где это можно сделать. Существуют способы постепенного развертывания вашего проекта/продукта путем разъединения, изучения узких мест в системе (и т.д.) и последующим применением разделения проблем в этих проблемных областях.
Вывод
2017 год принес нам много дискуссий и производственных развертываний, основанных на контейнерах и MOA. Мои размышления о Docker, используя GoLang или Node, не означают, что PHP «умирает» или что-то в этом роде ... Я считаю, что разработчикам нужно оставаться в тренде. Если микросервисы и дальше будут развиваться в том же русле, в котором это происходит сейчас, то почему бы не изучить GoLang? Он идеально подходит (из-за низкой занимаемой площади, скорости и параллельной обработки) для разработки небольших контейнерных приложений. Node и GoLang позволяют создавать небольшие сервисы, которые являются частью более крупного проекта, связывают созданные сервисы и выпускают их как контейнеры Docker, если это необходимо в вашей работе.
Тем не менее, все эти передовые решения и языки не уменьшают значимость и востребованность языка PHP. Разработчикам еще нужны будут стеки MVC и работа с API.
MOA пока не помогает решить архитектурные проблемы на стороне frontend, UI или Views, хотя при этом контейнеры помогают нам избежать работы с Monolith на backend. Мы можем создать чрезвычайно надежное backend-приложение, но оно среагирует на JSON, который каким-то образом должен быть представлен в клиентском приложении. Имеет ли значение, если результирующий объект ответа поступает из РНР кода, URL или от модулей принятия решений и обработки, разделенных интерфейсом обмена сообщениями? Это зависит от Ваших потребностей и требований к вашему приложению.
Мой совет: в этом году учите Laravel, следите за Docker, GoLang и фокусируйтесь на конвейере развертывания. Продвижение от локального небольшого проекта к продакшену должно быть достаточно плавным, особенно при создании приложений MVC.
Оригинал статьи
Які шанси у програміста-початківця знайти роботу?
Автор: Редакція ITVDN
Вопросы, которые беспокоят каждого начинающего разработчика – смогу ли я найти работу после того, как пройду обучение? Какую специальность лучше выбрать, чтобы наверняка быть нужным?
Есть, много субъективных факторов, которые влияют на возможность получить ту работу, о которой вы мечтаете. Это настойчивость, готовность рискнуть, черты характера, навыки представления себя потенциальному работодателю, умение правильно выбрать компанию и вакансию, соответствующие вашему уровню, умение проходить собеседование. При равных знаниях в программировании шансы кандидатов не равны.
Однако, есть и объективные факторы, которые вы можете (и должны!) учитывать. Один из них – конкуренция среди программистов, желающих занять определенную вакансию в IT компании.
Самый простой способ взвесить свои шансы – посмотреть на количество вакансий, опубликованных в течение месяца и количество откликов на эти вакансии. Такая информация всегда в свободном доступе на сайте сообщества программистов Украины DOU.UA.
Мы сделали небольшую выборку по десяти специальностям. Это информация за май 2018 года.
Информация, представленная в этой таблице, говорит о том, сколько специалистов откликнулись на вакансии и какие специальности в нынешние время самые популярные. Из таблицы явно видно, что у начинающего C#/.NET разработчика шансы получить работу намного выше, чем у Java или FrontEnd разработчика. Смотрите, думайте. Желаем Вам стать профессионалом и работать в компании Вашей мечты!
С более подробной информацией Вы можете ознакомиться на сайте DOU.UA.
Як стати тестувальником
Автор: Влад Сверчков
Всем привет!
Вы знаете, как создаются программы и информационные сервисы, которыми все мы пользуемся? Какие специалисты нужны, чтобы появился новый Фейсбук, Вайбер, Инстаграм, новый Windows или какая-то крутая видеоигра?
За разработкой программного обеспечения (ПО) стои́т целая команда профессионалов — и далеко не все из них умеют программировать.
Типичная команда будет включать в себя таких специалистов, как:
бизнес-аналитик — проводит анализ бизнес-проблемы, формирует требования к разрабатываемому продукту;
PM (Project Manager) — управляет всеми, кто вовлечен в работу над проектом;
тимлид (Team Leader) — управляет командой разработчиков;
UX/UI дизайнер — создает приятный дизайн приложения (UI) с хорошим пользовательским опытом (UX);
разработчики/программисты — занимаются написанием кода, являются ядром команды;
QA специалист — тестирует приложение на каждом этапе его разработки для обеспечения высокого качества продукта.
Если ПО не предназначено для использования только внутри компании, а нацелено на внешнюю аудиторию, то еще добавляется маркетинг-команда, которая работает с целевыми потребителями: исследует рынок, определяет клиентуру, привлекает ее внимание, подогревает интерес к продукту и многое другое.
Таким образом, в IT найдется хорошая работа даже для тех, кто не любит программировать. И сегодня речь пойдет о таком специалисте, как QA. Чуть выше вы уже узнали, что это, фактически, тестировщик, следящий за качеством ПО на каждом этапе его разработки. В чём специфика данной профессии, чем занимаются эти специалисты, насколько легко стать QA инженером и какие технологии должен знать потенциальный претендент на данную должность — это мы и раскроем в нашей статье. Устраивайтесь поудобней, мы начинаем!
Тестировщик, QC Engineer, QA Engineer
Очень часто термин “тестировщик” применяется ко всем специалистам, которые так или иначе связаны с проверкой ПО на качество. Тем не менее, в данной сфере существует формальное разделение профессий на три ветви: Tester, QC и QA. Давайте выясним, что означает каждая из них.
Тестировщик — специалист, который фокусируется на проведении непосредственных тестов над уже созданным ПО (составление тест-кейсов и баг-репортов, локализация дефектов и другое). Специалист проверяет, все ли работает согласно заявленным требованиям, производит сбор статистических данных и фиксирует их в соответствующих документах.
Тестировщик внимательно пользуется разработанным ПО, воспроизводит все возможные действия пользователя, работает с приложением на различных операционных системах, в различных браузерах (если это веб-приложение), на различных мобильных платформах (если это мобильное приложение); помимо ошибок он ищет еще и уязвимости.
Что-то вроде техосмотра транспортного средства. Отчеты об ошибках затем направляются разработчикам, которые ответственны за дальнейшее исправление багов.
QC (Quality Control) Engineer — специалист, который обеспечивает не только соответствие разрабатываемого ПО заявленным требованиям, но и его соответствие заранее определенным критериям качества продукта в целом. Также, он ответственен за определение готовности продукта к выпуску в продакшн. Цель Quality Control специалиста — формирование объективной картины состояния качества ПО на различных этапах разработки. Можно сказать, что специальность тестировщика является подмножеством специальности QC Engineer.
QA (Quality Assurance) Engineer — специалист, который обеспечивает контроль качества разрабатываемого ПО на всех этапах его планирования, проектирования и создания. Работа на этой должности является проактивной и носит превентивный характер, поскольку QA инженер уделяет внимание качеству продукта еще до того, как тот будет создан. Здесь на первый план выходят комплексы мероприятий, процессы и средства обеспечения качества ПО на каждом витке разработки. Непосредственно тестирование системы занимает уже второе место. Главное задание QA — выстроить систему так, чтобы она имела как можно меньше зон, где можно допустить ошибку, соответствовала всем показателям качества, а также была легко тестируема.
Специальность QC Engineer является подмножеством специальности QA Engineer.
Чтобы вас не путать, в данной статье мы приравняем понятия “тестировщик” и “QA инженер” в пользу второго. Будем расписывать стек технологий и путь становления именно QA специалиста. Таким образом мы сможем затронуть максимальное количество информации касательно направления тестирования.
Направления QA
Начнем с того, что в QA есть два основных направления — Manual и Automation. Специалисты каждого из них называются мануальный (ручной) тестировщик и тестировщик-автоматизатор, соответственно. Их разница в том, что первый следит за качеством продукта и проводит все тесты вручную, а второй автоматизирует тестирование путем написания скриптов. Automation QA использует определенный язык программирования и фреймворк для того, чтобы создавать программы, которые будут производить тестирование продукта вместо самого специалиста. Такой подход позволяет сократить время на тесты.
В обязанности мануального QA инженера входят:
анализ и выяснение требований у заказчика либо бизнес-аналитиков;
планирование процесса тестирования;
написание сценариев тестирования;
непосредственно тестирование программного продукта;
определение проблемных мест, их документирование;
использование систем отслеживания багов (баг-трекинги);
обсуждение исправлений с разработчиками, активное взаимодействие с ними;
отслеживание жизненного цикла ошибок;
повторный тест исправленных дефектов;
анализ тестирования;
планирование идей по оптимизации качества программного обеспечения;
ведение тестовой документации;
проверка требований к программному обеспечению;
оценка рисков;
участие в стенд-апах и других митингах.
Тем временем на плечи Automation QA помимо прочего возлагаются такие обязанности, как:
написание новых автотестов на основе разработанных вручную;
обновление поломанных/устаревших автотестов;
прогон автотестов;
анализ результатов тестовых прогонов;
настройка тестового окружения;
ревью кода;
оформление автотестовой документации.
На самом деле и мануальное, и автоматизированное направление имеют много общих требований, поскольку их фундамент одинаков. Давайте начнем с рассмотрения Manual QA, а затем плавно дополним его инструментами Automation QA.
Стек технологий Manual QA Engineer
Общая теория по IT
Если лет 15 назад в тестировщики брали чуть ли не “с улицы”, то сейчас к претендентам с каждым годом выдвигают все больше и больше требований. Так что потенциальный претендент на должность прежде всего обязан хорошо понимать IT индустрию.
Итак, в этот пункт предусматривает такие темы, как:
веб-технологии (HTTP, HTTPS, DOM, JSON, cookie, session), клиент-серверная архитектура;
базы данных;
компьютерные сети;
операционные системы (обратить особое внимание на Unix);
мелкие подтемы, как, например, системы счисления и т. д.
Теория тестирования и тестовая документация
Безусловно, любой QA инженер должен знать, с чем он вообще имеет дело. Если на заре разработки тестирование было чем-то интуитивным, то сегодня оно обрело четкие формы, обзавелось своими методиками, инструментарием и специализированным программным обеспечением.
Изучив теорию тестирования, вы сможете ориентироваться в данном направлении, понимать принципы, типы и методы тестирования, тест-дизайна, этапы жизненного цикла ПО; узнаете, как правильно составлять тестовую документацию (тест кейс, баг-репорт, чек-лист и т. д.) и многое другое.
Основные темы:
Тестирование, основные стандарты ISTQB.
SDLC и STLC. Методологии разработки ПО.
Требования. Анализ и составление требований.
Тестовая документация.
Уровни, типы, методы и виды тестирования.
Техники тестирования. Тест-дизайн
Баги и баг-трекинговые системы.
Системы контроля тестов.
Основы программирования + HTML/CSS
Основы программирования мануальному QA нужны не для того, чтобы заниматься непосредственным кодингом, а чтобы уметь читать код разработчика и понимать, что в нем происходит. Здесь важен не сам язык программирования, а банальное понимание того, как создаются программы, что такое переменные, функции, методы, классы, какие есть методологии программирования, как они реализуются и т. д. Для изучения основ отлично подойдет C# либо Java. Возможно, сюда стоило бы включить и Python, но он, пожалуй, слишком легкий для изучения и при работе с другими языками вам придется что-то доучивать. C# с Java же более фундаментальны и зная основы одного из них, вы легко сможете разбираться с кодом любых других популярных языков.
Фактически, владение основами программирования необходимо для чтения чужого кода и выявления возможных багов прямо на месте.
Отдельно выделяем языки верстки HTML и CSS. Если вы будете работать с веб-приложениями (а как показывает практика — проектов много — очередь и до тестирования “веба” рано или поздно дойдет), то вам будет полезно знать, из чего состоит FrontEnd часть веб-приложения. Также, вы будете работать с инструментами разработчика в браузере и там тоже надо будет взаимодействовать с HTML/CSS кодом.
Правила оформления документации. Модель CMMI
Если вспоминать три специальности, о которых мы говорили вначале (QA, QC и тестировщик), то этот пункт для тестировщика как такового является ненужным. Но вот для QA инженера он является неотъемлемым. В процессе проектирования ПО, слежения за его качеством необходимо производить соответствующее документирование. Чтобы делать это правильно, надо знать стандарты оформления подобных документов. Важно уделить внимание серии ISO 9000.
CMM / CMMI — это набор методологий (моделей) совершенствования процессов разработки ПО. Знание CMMI позволяет QA инженеру грамотно оценивать проект и планировать необходимые процессы по обеспечению качества.
SQL
SQL — язык запросов, который используется для взаимодействия с данными в реляционных базах данных. Тестировщику он пригодится для того, чтобы выполнять бэкенд-тестирование для проверки тестовых данных, вставки, удаления, обновления их значений в БД.
Сказать точный уровень владения SQL нелегко, поскольку все зависит от сложности проекта. На каком-то сгодится базовый уровень SQL, а где-то необходимо быть весьма и весьма подкованным. А если тестирование не связано с бэкендом, то знания языка запросов вовсе не пригодятся.
В общем и целом, тестировщик должен обладать следующими знаниями и умениями при работе с БД и SQL:
умение распознавать различные типы БД;
способность реализовать подключение к БД, используя разные клиенты SQL-соединений;
понимание таблиц БД, ключей, индексов, типов отношений между таблицами;
умение создавать простые запросы;
понимание и умение разбирать по полочкам сложные запросы.
Веб-сервисы
Веб-служба (или веб-сервис) — это идентифицируемая веб-адресом программная система со стандартизированными интерфейсами. Данный термин описывает стандартизированный способ интеграции веб-приложений с использованием различных протоколов, например: XML, TCP/IP, SOAP, WSDL и UDDI. Веб-служба представляет собой способ связи между двумя электронными устройствами по сети, такими веб-сервисами можно пользоваться независимо от компьютера, браузера или места доступа в Интернет (поиск, веб-почта, хранение документов, файлов, закладок и т. д.).
К преимуществам веб-сервисов можно отнести:
возможность создания необходимых кондиций для взаимосвязи программных компонентов, которые не будут зависеть от используемых платформ;
веб-сервисы используют открытые стандартные протоколы; благодаря XML обеспечивается легкость в формировании и настройки веб-сервисов;
использование HTTP гарантирует успешную взаимосвязь систем через межсетевой доступ.
Веб-сервисы должны знать разработчики для корректной реализации ПО, а тестировщикам они нужны, чтобы понимать, как работает та или иная веб-система.
Jira
Система баг-трекинга, которая помогает выявлять, регистрировать и контролировать баги, найденные в разрабатываемом ПО, а также отслеживать процесс устранения этих ошибок. Является командным инструментом, что упрощает процесс взаимодействия разработчиков и тестировщиков, а также различную баг-трекинговую деятельность в принципе. Помимо прямого назначения помогает команде эффективнее работать, расставлять приоритеты и выбирать дальнейшие шаги оптимизации ПО.
Postman
Популярный и в то же время мощный набор инструментов для тестирования API (в среде разработчиков произносится как “а́пи”). API — это прикладной программный интерфейс; он указывает, каким образом следует обращаться к программе и какие ответы она обязана предоставлять пользователям.
Postman относительно простой в использовании, имеет богатый интуитивный интерфейс. Он проверяет запросы с клиентской стороны на серверную, а также отклик со стороны бэкенда. Таким образом можно убедится, что на стороне сервера все работает, даже если фронтенд сторона еще не готова.
API можно тестировать и при помощи множества других программных средств (например, JMeter), однако, на сегодняшний день именно Postman является наиболее компромиссным инструментом тестирования запросов, сочетающим в себе простоту и высокую эффективность.
Git
Git — это популярная система контроля версий, позволяющая вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Одним из самых известных антагонистов Git является SVN — централизованная система, в отличие от децентрализованной Git.
Также, в работе вам пригодится и сервис онлайн-хостинга проектов, использующий систему контроля версий. В данном случае это GitHub. В паре с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах.
Git нужен скорее для Automation QA, поскольку позволяет в удобном виде хранить код тестов с возможностью вернуться к рабочей версии тестов. Также, тестировщик сможет:
иметь доступ к коду разработчиков;
организовать список тестов и отслеживать его выполнение;
тестировать код с разных устройств (при этом сам код лежит на удаленном репозитории Git);
хранить различные настройки для приложения;
выполнять другие взаимодействия.
Методологии разработки Agile/Scrum
Методологии разработки — это своеобразные путеводители по процессам эффективной разработки ПО. Их применение помогает организовать максимально продуктивную работу всех участников, которые напрямую или косвенно задействованы в разработке продукта в соответствии с выбранной стратегией.
Agile — семейство гибких методологий разработки программного обеспечения, которое позволяет выпускать продукт небольшими частями, постоянно его дополняя и совершенствуя. При таком подходе технические и бизнес-подразделения работают совместно, ПО постоянно обновляется, обеспечивается быстрое принятие решений и выявление неправильных подходов, приложение проще обслуживать, а качество кода готового продукта более высокое. Agile имеет собственный манифест, который подробно описывает основные принципы, на которых строится гибкая разработка.
Scrum является одной из популярнейших реализаций agile-подхода. Его используют многие команды, поэтому знание особенностей работы со scrum-моделью для QA инженера является не менее важным, чем для любого разработчика.
Английский язык
Знание английского языка — естественное требование для многих профессий в IT, поскольку большинство новых сведений о технологиях, курсы, учебные и справочные материалы появляются в первую очередь на английском. Для работы в команде обычно знаний языка на уровне чтения технической документации, комментирования кода и составления баг-репортов вполне достаточно, однако, если возникнет необходимость вести переговоры и/или переписку с иностранным заказчиком, либо же вы будете в интернациональном коллективе, ваш уровень должен быть выше (тут уже очень желательно иметь уровень не ниже Upper Intermediate).
Soft Skills
Так называемые “гибкие (мягкие) навыки” — это внутренние качества специалиста, которые помогают ему выполнять работу максимально качественно и без лишнего напряжения. К примеру, для следователя-криминалиста прекрасными софт скиллами будут объективность, внимательность, умение чувствовать своего собеседника, прекрасное дедуктивное мышление и неугасающее стремление докапываться до правды. Для работника на ресепшене критически важными мягкими навыками есть коммуникабельность, дисциплинированность, пунктуальность, обходительность, вежливость и другие.
Какие soft skills пригодятся тестировщику? Специалисту, который следит за качеством ПО и проверяет его на прочность, следует обладать следующими навыками:
внимательность, умение концентрироваться на задаче;
инициативность;
усидчивость;
организованность, проактивность, нацеленность на результат;
стрессоустойчивость;
эмпатия к пользователю и вместе с тем понимание бизнес-процессов (умение “переобуваться”);
адаптивность;
коммуникабельность;
умение работать в команде;
обладание логическим, системным, упорядоченным мышлением;
умение правильно осуществлять декомпозицию (по отношению к системам, задачам, проблемам и т. д.);
наличие шестого чувства + немного изобретательности;
стремление учиться и умение передавать свои знания другим;
Пользовательский опыт (не обязательно, но очень удобно)
Было бы неплохо, если б перед тестированием приложения вы уже сталкивались с чем-то подобным в обычной жизни. Если работать предстоит в сфере игростроения, то ваш огромный геймерский опыт будет как нельзя кстати. Работа с проектами из веб-индустрии? Опыт сёрфинга в интернете (соцсети, интернет-магазины, онлайн-сервисы) облегчит понимание логики пользователей, их ожиданий и точек интереса.
Automation QA
Автоматизированный QA технически является надмножеством позиции Manual QA — он должен знать все то же самое, что и мануальный коллега плюс несколько новых инструментов. Эти инструменты мы сейчас и перечислим.
Язык программирования
Если в разделе о Manual QA мы говорили об основах программирования, то автоматизатору понадобится именно уверенное владение конкретным языком. Обычно выбирают среди Java и Python, но это не предел. В тестировании можно применять и такие языки, как JavaScript, C#, Ruby, PHP, SmashTest и другие.
При помощи выбранного языка вы будете писать автотесты, которые будут выполнять тестирование за человека. Программа работает — тестировщик анализирует результаты. Это упрощает работу, повышает скорость проведения тестов и снимает часть задач с человека.
Фреймворк для тестирования
Для создания автотестов зачастую используется специальные программное обеспечение — фреймворки. Одним из популярнейших считается Selenium. Он мультиплатформен, ориентирован на работу с веб-приложениями и поддерживает множество популярных языков программирования. Более того, Selenium является основной технологией для множества других инструментов автоматизации браузеров, API и фреймворков.
Инструменты нагрузочного тестирования
Данный пункт является необязательным, но при этом очень желателен. Нагрузочное тестирование — это вид тестирования, при котором производится тест производительности целевого ПО при различных нагрузках от действий определенного количества пользователей. Наиболее известными инструментами проведения нагрузочного тестирования являются Gatling и JMeter.
Как стать тестировщиком?
Превращаем список приведенных выше технологий в туториал. Начинаем с пути Manual QA.
Вы можете учиться самостоятельно — по книгам или видео курсам, а можете записаться на курсы тестирования для максимально эффективного обучения. В любом случае вначале вам нужно очень хорошо изучить теорию тестирования и базовые темы в IT: веб-технологии, API, клиент-серверная архитектура, базы данных, компьютерные сети, операционные системы (обратить особое внимание на Unix), мелкие подтемы, как, например, системы счисления и т. д. Конкретные темы по тестированию мы расписали в одном из первых наших разделов. Затем вам следует освоить написание тестовой документации (для чистого тестировщика), а QA понадобится еще и знание стандартов по обеспечению качественного ПО (ISO 9000) для дополнительного документирования, модель CMMI.
Чтобы беспроблемно читать код разработчиков и понимать, что в нем происходит, следует владеть основами программирования. Для этого лучше выбрать либо Java, либо C# — документация по данным языкам очень информативна, есть большое комьюнити. Более того, множество программ обучения по данным языкам располагает прекрасным бэкграундом (история программирования, как работают вычислительные системы и как они обрабатывают информацию), который закладывает прочный фундамент программирования. Также, стоит освоить языки верстки HTML и CSS — они очень простые и используются в абсолютно всех веб-приложениях
Для работы с обеспечением, которое использует базы данных, необходимо изучить основы SQL.
Далее приступаем к изучению веб-сервисов, а после — к популярной баг-трекинговой системе Jira и мощному набору инструментов для тестирования API — Postman.
Создание программного продукта обычно ведется в команде, потому знание методологии командной разработки является не менее важным, чем предыдущие технологии. Уделите время изучению принципов Agile/Scrum — с их помощью эффективно разрабатывается современное программное обеспечение. Методология гибкой разработки очень важна для тестировщика, поскольку он участвует в производственном цикле так же, как и разработчики.
Также, не забудьте подтянуть ваш английский как минимум до уровня Intermediate. Он нужен для комфортного поиска нужной информации в интернете, чтения технической документации, работы с иностранными коллегами, а также — для возможного взаимодействия с заказчиком. Все же английский в IT еще никому не мешал и более того — давал новые карьерные возможности.
Чтобы ваша работа приносила вам удовольствие и вы себя не заставляли работать, вам следует обладать следующими софт скиллами:
внимательность, умение концентрироваться на задаче;
инициативность;
усидчивость;
организованность, проактивность, нацеленность на результат;
стрессоустойчивость;
эмпатия к пользователю и вместе с тем понимание бизнес-процессов (умение “переобуваться”);
коммуникабельность;
другие качества, которые мы указали в соответствующем разделе.
С этими навыками и знаниями вы сможете приступать к практике. Изучите Git, начните работать каким-либо проектом: покройте его тестами, напишите тест-документацию. Опубликуйте наработки на GitHub — это даст вам ценный опыт работы с распределенной системой управления версиями и позволит проверить свои навыки в решении реальной задачи. Несколько хороших проектов, и полноценное портфолио готово, а с ним вы можете уверенно подавать резюме на вакансию мануального QA инженера.
Если вас интересует автоматизированное тестирование, дополнительно изучите Python, либо Java + фреймворк для тестирования (Selenium, PyTest, Robot Framework или другой). Это позволит вам создавать скрипты, которые будут автоматически выполнять тестирование, избавляя вас от лишней рутины.
Очень желательно иметь опыт работы с инструментами нагрузочного тестирования. Это может быть JMeter, Gatling или любой другой популярный аналог. Такой опыт даст вам дополнительный вес в глазах работодателя, что сыграет вам на руку, поскольку конкуренция за место тестировщика весьма высока.
Очень желательно, чтобы у вас был наставник, который мог бы следить за вашим прогрессом, отвечать на возникающие вопросы, давать полезные советы и направлять в нужное русло.
Итоги
В данной статье мы постарались сделать максимальный охват темы тестирования. Была рассмотрена не только специальность тестировщик, но и два её надмножества — QC и QA. Сейчас линии разграничения между этими тремя профессиями по большому счёту стёрты и прослеживаются лишь в серьезных компаниях. В более мелких же тестировщик может запросто выполнять функции QA. Тем не менее, в нашей статье высветлены те технологии и области знаний, которые подойдут как тестировщику, так и QA инженеру. Также, мы рассмотрели ответвления Manual QA и Automation QA. Как выяснилось, без знания мануального тестирования вам не стать автоматизированным тестером. Ведь как можно писать автотесты, если ты в принципе не понимаешь, что, где и как исследовать на предмет багов?
Несмотря на высокую конкуренцию за место тестировщика, количество вакансий остается одним из самых больших на рынке труда в IT. Посмотрите популярные ресурсы по трудоустройству в IT и вы сами в этом убедитесь. Поэтому нами и были указаны некоторые необязательные технологии — мы хотим вооружить наших читателей максимально красноречивым стеком, дабы вы были на голову выше конкурентов.
Приведенный в статье стек технологий является прочной основой QA специалиста — как мануального, так и автоматизированного. Если этот материал не дал вам в полной мере ответ на вопрос “как стать тестировщиком и что следует для этого учить?”, делимся с вами ссылкой на вебинар одного из авторов ITVDN — действующего QA Engineer Андрея Шевцова.
Если вас интересует данное направление и вы хотите стать QA инженером, предлагаем вашему вниманию подборку курсов и вебинаров ITVDN, которые вы найдете на странице специальности Quality Assurance.
Желаем успехов в изучении IT технологий!
Оставайтесь с ITVDN!
Як стати тестувальником, QA, QC у 2023 році? Що варто знати та вміти, аби отримати роботу в ІТ-компанії?
Автор: Влад Сверчков
Хто такий тестувальник, QC Engineer, QA Engineer?
Напрямки QA
Стек технологій для Manual QA інженера
Англійська мова та Soft Skills (гнучкі навички)
Стек технологій для Automation QA
Як стати тестувальником у 2023 році? Що потрібно знати тестувальнику?
Кар'єра QA спеціаліста
Зарплати QA
Підсумки
Всім привіт!
Ви знаєте, як створюються програми та інформаційні сервіси, якими всі ми користуємось? Які фахівці потрібні, щоб з'явився новий Фейсбук, Вайбер, Інстаграм, новий Windows чи якась крута гра?
За розробленням програмного забезпечення (ПЗ) стоїть ціла команда професіоналів – і далеко не всі з них вміють програмувати.
Типова команда буде включати наступних фахівців:
бізнес-аналітик – проводить аналіз бізнес-проблеми, формує вимоги до продукту, що розробляється;
PM (Project Manager) – управляє всіма, хто залучений до роботи над проєктом;
тимлід (Team Leader) – управляє командою розробників;
UX/UI дизайнер – створює приємний дизайн застосунку (UI) з гарним користувацьким досвідом (UX);
розробники/програмісти – займаються написанням коду, становлять ядро команди;
QA спеціаліст – тестує застосунок на кожному етапі його розроблення для забезпечення високої якості продукту.
Якщо ПЗ не призначене для використання тільки всередині компанії, а націлене на зовнішню аудиторію, то ще додається маркетинг-команда, яка працює з цільовими споживачами: досліджує ринок, визначає клієнтуру, привертає її увагу, підігріває інтерес до продукту та багато іншого.
Таким чином, в ІТ знайдеться гарна робота навіть для тих, хто не любить програмувати. І сьогодні йтиметься про такого фахівця, як QA. Трохи вище ви вже дізналися, що це фактично тестувальник, який стежить за якістю ПЗ на кожному етапі його розроблення. У чому специфіка даної професії, чим займаються ці фахівці, наскільки легко опанувати спеціальність тестувальник QA і які технології має знати потенційний претендент на цю посаду – це ми і розкриємо в нашій статті. Влаштовуйтесь зручніше, ми починаємо!
Хто такий тестувальник, QC Engineer, QA Engineer
Дуже часто термін "тестувальник" застосовується до всіх фахівців, які так чи інакше пов'язані з перевіркою ПЗ на якість. Тим не менш, у цій сфері існує формальний поділ професій на три гілки: Tester, QC та QA. Давайте з'ясуємо, що означає кожна з них.
Тестувальник – спеціаліст, який фокусується на проведенні безпосередніх тестів над уже створеним ПЗ (складання тест-кейсів та баг-репортів, локалізація дефектів тощо). Фахівець перевіряє, чи все працює згідно із заявленими вимогами, проводить збір статистичних даних та фіксує їх у відповідних документах.
Тестувальник уважно користується розробленим ПЗ, відтворює всі можливі дії користувача, працює із застосунком на різних операційних системах, у різних браузерах (якщо це веб-застосунок), на різних мобільних платформах (якщо це мобільний застосунок); крім помилок він шукає ще й вразливості.
Щось на кшталт техогляду транспортного засобу. Звіти про помилки потім надсилаються розробникам, які відповідальні за подальше виправлення багів.
QC (Quality Control) Engineer — фахівець, який забезпечує не тільки відповідність ПЗ, що розробляється, заявленим вимогам, але і його відповідність заздалегідь визначеним критеріям якості продукту в цілому. Також він відповідальний за визначення готовності продукту до випуску в продакшн. Мета Quality Control спеціаліста – формування об'єктивної картини стану якості ПЗ на різних етапах розроблення. Можна сказати, що спеціальність тестувальника є підмножиною спеціальності QC Engineer.
QA (Quality Assurance) Engineer — спеціаліст, який забезпечує контроль якості ПЗ, що розробляється, на всіх етапах його планування, проєктування та створення. Робота на цій посаді є проактивною і носить превентивний характер, оскільки QA інженер приділяє увагу якості продукту ще до того, як той буде створений. Тут на перший план виходять комплекси заходів, процеси та засоби забезпечення якості ПЗ на кожному витку розроблення. Безпосередньо тестування системи займає вже друге місце. Головне завдання QA — вибудувати систему так, щоб вона мала якнайменше зон, де можна припуститися помилки, відповідала всім показникам якості, а також, щоб її можна було легко тестувати.
Спеціальність QC Engineer є підмножиною спеціальності QA Engineer.
Щоб вас не плутати, у цій статті ми прирівняємо поняття “тестувальник” та “QA інженер” на користь другого. Будемо розписувати стек технологій і шлях становлення саме QA спеціаліста. Таким чином ми зможемо торкнутися максимальної кількості інформації стосовно напряму тестування.
Напрямки QA
Почнемо з того, що QA має два основних напрямки — Manual та Automation. Фахівці кожного з них називаються мануальний (ручний) тестувальник та тестувальник-автоматизатор, відповідно. Їхня різниця в тому, що перший стежить за якістю продукту і проводить усі тести вручну, а другий автоматизує тестування шляхом написання скриптів. Automation QA використовує певну мову програмування та фреймворк для того, щоб створювати програми, які будуть проводити тестування продукту замість самого фахівця. Такий підхід дає змогу скоротити час на тести.
До обов'язків мануального QA інженера входять:
аналіз та з'ясування вимог у замовника чи бізнес-аналітиків;
планування процесу тестування;
написання сценаріїв тестування;
безпосередньо тестування програмного продукту;
визначення проблемних місць, їхнє документування;
використання систем відстеження багів (баг-трекінги);
обговорення виправлень із розробниками, активна взаємодія з ними;
відстеження життєвого циклу помилок;
повторний тест виправлених дефектів;
аналіз тестування;
планування ідей щодо оптимізації якості програмного забезпечення;
ведення тестової документації;
перевірка вимог до програмного забезпечення;
оцінка ризиків;
участь у стендапах та інших мітингах.
Тим часом на плечі Automation QA також покладаються наступні обов'язки:
написання нових автотестів на основі розроблених вручну;
оновлення поламаних/застарілих автотестів;
прогін автотестів;
аналіз результатів тестових прогонів;
налаштування тестового оточення;
рев'ю коду;
оформлення автотестової документації
Насправді і мануальний, і автоматизований напрямки мають багато спільних вимог, оскільки їхній фундамент однаковий. Давайте почнемо з розгляду Manual QA, а потім плавно доповнимо його інструментами Automation QA.
Що має знати тестувальник у 2023 році – стек технологій Manual QA Engineer
Загальна теорія з IT
Якщо років 15 тому в тестувальники брали мало не з вулиці, то зараз до претендентів з кожним роком висувають все більше і більше вимог. Тому потенційний претендент на посаду насамперед зобов'язаний гарно розуміти IТ-індустрію.
Отже, цей пункт передбачає такі теми, як:
веб-технології (HTTP, HTTPS, DOM, JSON, cookie, session), клієнт-серверна архітектура;
бази даних;
комп'ютерні мережі;
операційні системи (звернути особливу увагу на Unix);
дрібні підтеми, як, наприклад, системи числення і т. д.
Теорія тестування та тестова документація
Як стати тестувальником з нуля? Безумовно, будь-який QA інженер першочергово повинен знати, з чим він взагалі має справу. Якщо на зорі розроблення саме тестування було чимось інтуїтивним, то сьогодні воно набуло чітких форм, отримало свої методики, інструментарій та спеціалізоване програмне забезпечення.
Вивчивши теорію тестування, ви зможете орієнтуватися в даному напрямку, розуміти принципи, типи та методи тестування, тест-дизайну, етапи життєвого циклу ПЗ; дізнаєтеся, як правильно складати тестову документацію (тест кейс, баг-репорт, чек-лист тощо) і багато іншого.
Основні теми:
Тестування, основні стандарти ISTQB.
SDLC та STLC. Методології розроблення ПЗ.
Вимоги. Аналіз та складання вимог.
Тестова документація.
Рівні, типи, методи та види тестування.
Техніки тестування. Тест-дизайн.
Баги та баг-трекінгові системи.
Системи контролю тестів.
Основи програмування + HTML/CSS
Основи програмування мануальному QA потрібні не для того, щоб займатися безпосереднім кодингом, а щоб вміти читати код розробника і розуміти, що в ньому відбувається. Тут важлива не сама мова програмування, а банальне розуміння того, як створюються програми, що таке змінні, функції, методи, класи, які є методології програмування, як вони реалізуються і т. д. Для вивчення основ добре підійде C# або Java. Можливо, сюди варто було б включити і Python, але він, мабуть, занадто легкий для вивчення і при роботі з іншими мовами вам доведеться щось доучувати. C# з Java більш фундаментальні, і знаючи основи однієї з них, ви зможете легко розбиратися з кодом будь-яких інших популярних мов.
Фактично, володіння основами програмування необхідне читання чужого коду і виявлення можливих багів прямо на місці.
Окремо виділяємо мови верстання HTML та CSS. Якщо ви працюватимете з веб-застосунками (а як показує практика – проєктів багато, – черга і до тестування "вебу" рано чи пізно дійде), то вам буде корисно знати, з чого складається FrontEnd частина веб-застосунку. Також ви працюватимете з інструментами розробника в браузері і там теж треба буде взаємодіяти з HTML/CSS кодом.
Правила оформлення документації. Модель CMMI
Якщо згадувати три спеціальності, про які ми говорили на початку (QA, QC і тестувальник), то цей пункт для тестувальника як такого є непотрібним. А от для QA інженера він невід'ємний. У процесі проєктування ПЗ та стеження за його якістю необхідно проводити відповідне документування. Щоб робити це правильно, треба знати стандарти оформлення таких документів. Важливо приділити увагу серії ISO 9000.
CMM / CMMI – це набір методологій (моделей) удосконалення процесів розроблення ПЗ. Знання CMMI дозволяє QA інженеру грамотно оцінювати проєкт та планувати необхідні процеси по забезпеченню якості.
SQL
SQL — це мова запитів, яка використовується для взаємодії з даними в реляційних базах даних. Тестувальнику вона стане у нагоді для того, щоб виконувати бекенд-тестування для перевірки тестових даних, вставлення, видалення, оновлення їх значень у БД.
Сказати точний рівень володіння SQL нелегко, оскільки це залежить від складності проєкту. Десь знадобиться базовий рівень SQL, а десь потрібно бути дуже підкованим. А якщо тестування не пов'язане з бекендом, знання мови запитів зовсім не знадобляться.
Загалом, тестувальник QA повинен мати наступні знання та вміння при роботі з БД та SQL:
вміння розпізнавати різні типи БД;
здатність реалізувати підключення до БД, використовуючи різні клієнти SQL-з’єднань;
розуміння таблиць БД, ключів, індексів, типів відношень між таблицями;
вміння створювати прості запити;
розуміння та вміння розбирати по поличках складні запити.
Веб-сервіси
Веб-служба (або веб-сервіс) – це програмна система зі стандартизованими інтерфейсами, яка ідентифікується веб-адресою. Даний термін описує стандартизований спосіб інтеграції веб-застосунків з використанням різних протоколів, наприклад XML, TCP/IP, SOAP, WSDL та UDDI. Веб-служба являє собою спосіб зв'язку між двома електронними пристроями по мережі, такими веб-сервісами можна користуватися незалежно від комп'ютера, браузера або місця доступу до Інтернету (пошук, веб-пошта, зберігання документів, файлів, закладок тощо).
До переваг веб-сервісів можна віднести:
можливість створення необхідних кондицій для взаємозв'язку програмних компонентів, які не будуть залежати від платформ, що використовуються;
веб-сервіси використовують відкриті стандартні протоколи; завдяки XML забезпечується легкість у формуванні та налаштуванні веб-сервісів;
використання HTTP гарантує успішний взаємозв'язок систем через міжмережевий доступ.
Веб-сервіси повинні знати розробники для коректної реалізації ПЗ, а тестувальникам вони потрібні, щоб розуміти, як працює та чи інша веб-система.
Jira
Система баг-трекінгу, яка допомагає виявляти, реєструвати і контролювати баги, знайдені в ПЗ, що розробляється, а також відстежувати процес усунення цих помилок. Є командним інструментом, що спрощує процес взаємодії розробників та тестувальників, а також різну баг-трекінгову діяльність в принципі. Окрім прямого призначення допомагає команді ефективніше працювати, розставляти пріоритети та обирати подальші кроки оптимізації програмного забезпечення.
Postman
Популярний і водночас потужний набір інструментів для тестування API (у середовищі розробників вимовляється як “а́пі”). API – це прикладний програмний інтерфейс; він вказує, як слід звертатися до програми та які відповіді вона зобов’язана надавати користувачам.
Postman відносно простий у використанні, має багатий інтуїтивний інтерфейс. Він перевіряє запити з клієнтської сторони на серверну, а також відгук зі сторони бекенду. Таким чином можна переконатися, що на стороні сервера все працює, навіть якщо фронтенд сторона ще не готова.
API можна тестувати і за допомогою безлічі інших програмних засобів (наприклад JMeter), однак на сьогоднішній день саме Postman є найбільш компромісним інструментом тестування запитів, що поєднує в собі простоту і високу ефективність.
Git
Git – це популярна система контролю версій, яка дозволяє вести історію розроблення проєкту з можливістю доступу до кожної збереженої версії. Одним із найвідоміших антагоністів Git є SVN — централізована система, на відміну від децентралізованої Git.
Також у роботі вам стане в нагоді і сервіс онлайн-хостингу проєктів, що використовує систему контролю версій. У цьому випадку це GitHub. У парі з Git він дозволяє розробникам зберігати свій код онлайн, а потім взаємодіяти з іншими розробниками в різних проєктах.
Git потрібен скоріше Automation QA, оскільки дозволяє у зручному вигляді зберігати код тестів із можливістю повернутися до робочої версії тестів. Також тестувальник зможе:
мати доступ до коду розробників;
організувати список тестів та відстежувати його виконання;
тестувати код із різних пристроїв (при цьому сам код лежить на віддаленому репозиторії Git);
зберігати різні налаштування для застосунку;
виконувати інші взаємодії.
Методологія розроблення Agile/Scrum
Методології розроблення – це своєрідні путівники процесами ефективного розроблення ПЗ. Їх застосування допомагає організувати максимально продуктивну роботу всіх учасників, які безпосередньо чи опосередковано задіяні у розробленні продукту відповідно до обраної стратегії.
Agile – сімейство гнучких методологій розроблення програмного забезпечення, яке дозволяє випускати продукт невеликими частинами, постійно доповнюючи його і вдосконалюючи. При такому підході технічні та бізнес-підрозділи працюють спільно, ПЗ постійно оновлюється, забезпечується швидке прийняття рішень та виявлення неправильних підходів, застосунок простіше обслуговувати, а якість коду готового продукту вища. Agile має власний маніфест, який докладно описує основні принципи, на яких будується гнучке розроблення.
Scrum є однією з найпопулярніших реалізацій agile-підходу. Його використовують багато команд, тому знання особливостей роботи зі scrum-моделлю для QA інженера є не менш важливим, ніж для будь-якого розробника.
Англійська мова
Знання англійської — природна вимога для багатьох професій в IT, оскільки більшість нових відомостей про технології, курси, навчальні та довідкові матеріали з'являються насамперед англійською. Для роботи в команді знань мови на рівні читання технічної документації, коментування коду та складання баг-репортів зазвичай цілком достатньо, проте, якщо виникне необхідність вести переговори та/або листування з іноземним замовником, або ж ви будете в міжнародному колективі, ваш рівень має бути вище (тут вже дуже бажано мати рівень не нижче за Upper Intermediate).
Soft Skills
Так звані “гнучкі (м'які) навички” – це внутрішні якості спеціаліста, які допомагають йому виконувати роботу максимально якісно і без зайвої напруги. Наприклад, для слідчого-криміналіста прекрасними софт скіллами будуть об'єктивність, уважність, вміння відчувати свого співрозмовника, прекрасне дедуктивне мислення і невгамовне прагнення докопуватися до правди. Для працівника на ресепшені критично важливими м'якими навичками є комунікабельність, дисциплінованість, пунктуальність, ввічливість, тактовність та інші.
Які soft skills стануть у нагоді тестувальнику? Спеціалісту, який стежить за якістю ПЗ і перевіряє його на міцність, слід володіти наступними навичками:
уважність, вміння концентруватися на задачі;
ініціативність;
посидючість;
організованість, проактивність, націленість на результат;
стресостійкість;
емпатія до користувача та разом із тим розуміння бізнес-процесів;
адаптивність;
комунікабельність;
вміння працювати в команді;
володіння логічним, системним, упорядкованим мисленням;
вміння правильно здійснювати декомпозицію (по відношенню до систем, завдань, проблем тощо);
наявність шостого чуття + трохи винахідливості;
прагнення вчитися та вміння передавати свої знання іншим;
Користувацький досвід (не обов'язково, але дуже зручно)
Було б непогано, якби перед тестуванням програми ви вже стикалися з чимось подібним у звичайному житті. Якщо працювати належить у сфері ігробудування, то ваш величезний геймерський досвід буде дуже доречним. Робота з проєктами із веб-індустрії? Досвід серфінгу в інтернеті (соцмережі, інтернет-магазини, онлайн-сервіси) полегшить розуміння логіки користувачів, їх очікувань та точок інтересу.
Automation QA
Автоматизований QA технічно є надмножиною позиції Manual QA — він повинен знати все те саме, що й мануальний колега плюс декілька нових інструментів. Ці інструменти ми зараз і перерахуємо.
Мова програмування
Якщо в розділі Manual QA ми говорили про основи програмування, то автоматизатору знадобиться саме впевнене володіння конкретною мовою. Зазвичай вибирають серед Java та Python, але це не межа. У тестуванні можна застосовувати такі мови, як JavaScript, C#, Ruby, PHP, SmashTest тощо.
За допомогою обраної мови ви писатимете автотести, які виконуватимуть тестування за людину. Програма працює – тестувальник аналізує результати. Це спрощує роботу, підвищує швидкість проведення тестів та знімає частину завдань із людини.
Фреймворк для тестування
Для створення автотестів найчастіше використовується спеціальне програмне забезпечення — фреймворки. Одним із найпопулярніших вважається Selenium. Він мультиплатформний, орієнтований на роботу з веб-застосунками і підтримує велику кількість популярних мов програмування. Більше того, Selenium є основною технологією для багатьох інших інструментів автоматизації браузерів, API та фреймворків.
Інструменти навантажувального тестування
Цей пункт є необов'язковим, але дуже бажаним. Навантажувальне тестування – це вид тестування, при якому проводиться тест продуктивності цільового ПЗ при різних навантаженнях від дій певної кількості користувачів. Найбільш відомими інструментами проведення тестування навантаження є Gatling і JMeter.
Як стати тестувальником у 2023 році? Що потрібно знати тестувальнику?
Перетворюємо список наведених вище технологій на туторіал. Починаємо з шляху Manual QA.
Ви можете навчатися самостійно – за книгами або відео курсами, а можете записатися на курси тестування для максимально ефективного навчання. У будь-якому випадку спочатку потрібно дуже добре вивчити теорію тестування і базові теми в IT: веб-технології, API, клієнт-серверна архітектура, бази даних, комп'ютерні мережі, операційні системи (звернути особливу увагу на Unix), дрібні підтеми, як, наприклад, системи числення і т. д. Конкретні теми з тестування ми розписали в одному з перших розділів. Потім вам слід опанувати написання тестової документації (для чистого тестувальника), а для QA знадобиться ще й знання стандартів забезпечення якісного ПЗ (ISO 9000) для додаткового документування, модель CMMI.
Аби безпроблемно читати код розробників і розуміти, що в ньому відбувається, слід володіти основами програмування. Для цього краще вибрати або Java, або C# — документація за даними мовами є дуже інформативною, наявне велике ком'юніті. Більше того, безліч програм навчання за цими мовами має прекрасний бекграунд (історія програмування, як працюють обчислювальні системи і як вони обробляють інформацію), який закладає міцний фундамент програмування. Також варто опанувати мови верстання HTML і CSS – вони дуже прості і використовуються в усіх веб-застосунках.
Для роботи із забезпеченням, яке використовує бази даних, необхідно вивчити основи SQL.
Далі приступаємо до вивчення веб-сервісів, а потім – популярної баг-трекінгової системи Jira і потужного набору інструментів для тестування API – Postman.
Створення програмного продукту зазвичай ведеться у команді, тому знання методології командного розроблення є не менш важливим, ніж попередні технології. Приділіть час вивченню принципів Agile/Scrum — з їх допомогою ефективно розробляється сучасне програмне забезпечення. Методологія гнучкого розроблення є дуже важливою для тестувальника, оскільки він бере участь у виробничому циклі так само, як і розробники.
Також не забудьте підтягнути вашу англійську як мінімум до рівня Intermediate. Вона потрібна для комфортного пошуку потрібної інформації в інтернеті, читання технічної документації, роботи з іноземними колегами, а також для можливої взаємодії із замовником. Все ж таки англійська в IT ще нікому не заважала, ба навіть давала нові кар'єрні можливості та вищу зарплату.
Щоб ваша робота приносила вам задоволення і ви себе не змушували працювати, вам слід володіти наступними софт скілами:
уважність, вміння концентруватися на задачі;
ініціативність;
посидючість;
організованість, проактивність, націленість на результат;
стресостійкість;
емпатія до користувача, разом із тим – розуміння бізнес-процесів;
комунікабельність;
інші якості, які ми зазначили у відповідному розділі.
З цими навичками та знаннями ви зможете приступати до практики. Вивчіть Git, почніть працювати над будь-яким проєктом: покрийте його тестами, напишіть тест-документацію. Опублікуйте напрацювання на GitHub – це дасть вам цінний досвід роботи з розподіленою системою керування версіями та дозволить перевірити свої навички у вирішенні реальної задачі. Декілька гарних проєктів, і повноцінне портфоліо готове, а з ним ви можете впевнено подавати резюме на вакансію мануального QA інженера.
Якщо вас цікавить автоматизоване тестування, додатково вивчіть Python або Java + фреймворк для тестування (Selenium, PyTest, Robot Framework або інший). Це дозволить вам створювати скрипти, які автоматично виконуватимуть тестування, позбавляючи вас зайвої рутини.
Дуже бажано мати досвід роботи з інструментами навантаженого тестування. Це може бути JMeter, Gatling чи будь-який інший популярний аналог. Такий досвід дасть вам додаткову вагу в очах роботодавця, що зіграє вам на руку, оскільки конкуренція за місце тестувальника дуже висока.
Величезною перевагою буде наявність наставника, який міг би стежити за вашим прогресом, відповідати на питання, що виникають, давати корисні поради і направляти в потрібне русло - тоді у вас буде чіткий план того, як стати тестувальником з нуля.
Кар'єра QA спеціаліста
Які перспективи кар'єрного розвитку у тестувальника після отримання першої роботи?
Шлях QA дуже нагадує самурайський шлях розробника: Intern/Trainee, Junior, Middle, Senior, Team/Tech Lead. Найбільш коректний шлях кар'єрного зростання передбачає наступне:
Робота над hard skills. Поглиблення знань та навичок у межах технологічного стеку, який ви використовуєте, а також розширення цього стеку. Дуже перспективним вважається саме автоматизоване тестування, тому на короткій дистанції найбільший успіх чекає на тих тестерів, які рухатимуться у бік програмування.
Прокачування soft skills. Дуже важливо не припиняти роботу над внутрішнім стрижнем. Сюди входить безліч моментів: вміння відстоювати свої позиції, чітко аргументувати свою думку, бути приємним комунікатором, уважно та відповідально ставитися до своєї роботи, займати проактивну, ініціативну позицію в команді, працювати над підвищенням власної продуктивності тощо.
Позаробочі активності. Сюди можна віднести читання технічної літератури та актуальної інформації з вашої спеціалізації, відвідування тренінгів, проходження курсів, застосування нових знань на практиці, наприклад, у створенні pet-проектів або безпосередньо на роботі.
Також важливо працювати в різних компаніях, змінюючи їх приблизно раз на 1,5-3,5 роки. Це дозволяє, з одного боку, не "закостеніти" на поточній роботі, а з іншого – залишатися в тонусі, отримувати цінний досвід роботи з різними командами та проєктами, збагачувати професійний кругозір, опановувати нові та розвивати вже наявні hard та soft навички.
Крім цього, зміна місця роботи раз на 2-3 роки дає відчутний приріст у зарплаті, оскільки грошова оцінка ваших знань та навичок у різних конторах може істотно відрізнятися.
Говорячи про кар'єрні перспективи, ви також можете піти шляхом суттєвого розвитку hard skills і, опанувавши програмування та супутні технології, поповнити ряди розробників. Якщо ж ваша сильна сторона – це soft skills і ви плануєте зробити наголос саме на них, можете розвиватися в напрямку бізнес-аналізу або менеджменту.
Зарплати QA
Скористаємося літньою зарплатною аналітикою за 2023 рік від DOU – спільноти професійних українських розробників, та дізнаємось, скільки заробляють наші тестувальники.
Медіанні зарплати станом на червень 2023 року:
Junior QA Engineer – 800 USD
Middle QA Engineer – 1800 USD
Senior QA Engineer – 3300 USD
QA Team Lead – 3400 USD
QA Tech Lead – 4000 USD
Найвищі медіанні заробітні плати у Automation QA, найнижчі – у Manual QA, причому різниця на рівнях Middle та Senior може сягати більш ніж 1000 USD на користь автоматизованих тестерів.
Найбільш оплачуваними мовами програмування у QA фахівців є:
TypeScript – 3350 USD.
Kotlin – 3300 USD.
Java – 2838 USD.
C# – 2750 USD.
Ruby – 2652 USD.
Python – 2500 USD.
JavaScript – 2220 USD.
SQL – 1661 USD.
Інші мови – 1955 USD.
Вище наведено саме медіанні зарплати.
Англійська також впливає на грошову винагороду як новачків, так і досвідчених фахівців QA. Логіка залишається незмінною – що краще знаєш англійську, то більше отримуєш.
Підсумки
У цій статті ми постаралися зробити максимальне охоплення теми тестування. Була розглянута не лише спеціальність тестувальник, а й дві її надмножини — QC та QA. Зараз лінії розмежування між цими трьома професіями за великим рахунком стерті і простежуються лише у серйозних компаніях. У більш дрібних тестувальник, QA можуть запросто бути синонімами. Тим не менш, у нашій статті висвітлено ті технології та галузі знань, які підійдуть як тестувальнику, так і QA інженеру. Також, ми розглянули відгалуження Manual QA та Automation QA. Як з'ясувалося, без знання мануального тестування вам не стати автоматизованим тестером. Адже як можна писати автотести, якщо ти в принципі не розумієш, що, де і як досліджувати на предмет багів?
Незважаючи на високу конкуренцію за місце тестувальника, кількість вакансій залишається однією з найбільших на ринку праці в IT. Перегляньте популярні ресурси з працевлаштування в IT і ви самі в цьому переконаєтеся. Тому нами й були вказані деякі необов'язкові технології — ми хочемо озброїти наших читачів максимально промовистим стеком, щоб ви були на голову вищими за конкурентів.
Якщо вас цікавить цей напрямок і ви хочете стати QA інженером, пропонуємо до вашої уваги добірку курсів та вебінарів ITVDN, які ви знайдете на сторінці спеціальності Quality Assurance.
Бажаємо успіхів у вивченні IT!
Залишайтеся з ITVDN!