Мы на Workspace
Наверх
Gendalf Gendalf

О разработке без стереотипов: курс молодого бойца

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

Если вы решили покорять нелегкую профессию разработчика сегодня, то вначале стоит как можно яснее представить себе, чем вы будете заниматься. Побеседовали об этом с главным специалистом отдела внедрения Департамента проектов внедрения и консалтинга ГЭНДАЛЬФ Вячеславом Лыжовым.

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

1. Постановка задачи

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

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

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

2. Разработка архитектуры решения

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

Достаточно часто пользователи больших информационных систем просят сделать им таблицу, в которой «сразу все видно». Например, это может быть файл 6000 строк на 200 колонок, где содержится буквально вся информация о продажах – от ИНН покупателя, даты и номера накладной до состояния взаиморасчетов и наличия остатков товаров на складе для отгрузки. Конечно, ни о каком эффективном анализе данных в таком виде не может быть и речи. Когда вы начинаете выяснять, что заказчик собирается с этой таблицей делать – оказывается, что ее необходимо загрузить в какую-то другую систему (и на той стороне ждет ваш собрат по несчастью J). В итоге гораздо лучше сделать несколько простых выгрузок, чем пытаться создать «монстра» в виде одной таблицы, предназначенной для отображения чуть не половины базы данных.

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

3. Программирование

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

4. Внутреннее тестирование

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

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

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

5. Опытная эксплуатация

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

Зашоренность программиста при проверке своего решения может быть анекдотичной. Мне как-то довелось принимать достаточно простую задачу – пользователь должен быть установить план продаж, а корректировки к нему регистрировать отдельным документом. Исполнитель – вполне себе опытный специалист – разработал задание в строгом соответствии с ТЗ: пользователь мог ввести в систему основной план, создать к нему корректировку, все работало и корректно отражалось в выходных формах. Вот только при попытке удаления такой корректировки возникала ошибка и ничего сделать с данными уже было нельзя. Устранение проблемы заняло всего несколько минут. Попади код в таком виде в продакшн – он мог бы испортить несколько дней реальному пользователю, которому срочно нужно сдать актуализированный план продаж.

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

6. Промышленная эксплуатация / поддержка

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

Резюме

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

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

Источники: vc.ru.

Поделиться