Кто такой qa engineer, qc engineer и software engineer in test
Содержание:
Уровни квалификации тестировщиков
Trainee
Начинающий тестировщик без практического опыта. Как правило, это студент, который проходит обучение в IT-компаниях. После обучения его могут трудоустроить, в зависимости от показанных результатов.
Junior QA Engineer
Младший специалист с опытом работы от 1 до 8 месяцев. Он примерно понимает, что такое тест-план, тест-кейс, тест-сьют, тест-степ, тест-дизайн, Definition of Done. Junior QA Engineer имеет представление о дефектах Severity и Priority, также обладает базовыми навыками работы с SQL.
Middle QA Engineer
Уверенный среднячок с опытом работы до 3-4 лет. Мидл тестировщик умеет работать самостоятельно, может обучать Trainee и Junior.
Senior QA Engineer
Профессиональный и скилованный тестировщик, который выполняет сложнейшие задачи широкого спектра. В работе использует различные виды тестирования.
QA Team Lead
Ведущий QA-тестер, который отлично разбирается в технической стороне тестирования и умеет работать с командой. Он принимает участие в написании технической документации, набирает людей в команду проекта, координирует и контролирует её.
QA Functional Manager
Функциональный менеджер управляет тестированием конкретного проекта и командой тестировщиков.
Если сильнее углубиться в профессию QA Engineer, можно выделить у тестировщиков несколько разновидностей:
- Automation QA Engineer. QA-автоматизатор делает тесты по скриптам для автоматизации тестирования.
- Manual QA Engineer. Выполняет тестирование вручную. Он не пользуется программами, а самостоятельно воспроизводит все действия, которые будет делать пользователь в приложении.
- Quality Control Specialist. QC-специалист проводит анализ результатов тестов и следит за выявлением и удалением багов в приложении.
дальнейшее чтение
- Руководство к своду знаний по программной инженерии (SWEBOK Guide): Версия 3.0 . Пьер Бурк, Ричард Э. Фэрли (ред.). Компьютерное общество IEEE. 2014. ISBN. 978-0-7695-5166-1.
- Прессман, Роджер S (2009). Программная инженерия: подход практикующего (7-е изд.). Бостон, Массачусетс: Макгроу-Хилл. ISBN 978-0-07-337597-7.
- Брюгге, Бернд ; Дютуа, Аллен (2009). (3-е изд.). Прентис Холл. ISBN 978-0-13-606125-0.
- Ошана, Роберт (21.06.2019). Программная инженерия для встроенных систем: методы, практические приемы и приложения (второе изд.). Кидлингтон, Оксфорд, Великобритания. ISBN 978-0-12-809433-4.
Задачи в масштабных проектах
Требования к программному обеспечению
Разработка требований — это выявление, анализ, спецификация и проверка требований к программному обеспечению . Требования к программному обеспечению могут быть трех разных типов. Существуют функциональные требования , нефункциональные требования и требования домена. Работа программного обеспечения должна выполняться, и следует ожидать, что пользователь сможет ее использовать. Нефункциональные требования касаются таких вопросов, как переносимость, безопасность, ремонтопригодность, надежность, масштабируемость, производительность, возможность повторного использования и гибкость. Они подразделяются на следующие типы: ограничения помех, ограничения производительности (такие как время отклика, безопасность, пространство для хранения и т. Д.), Эксплуатационные ограничения, ограничения жизненного цикла (ремонтопригодность, переносимость и т. Д.) И экономические ограничения. Когда дело доходит до определения нефункциональных требований, необходимо знать, как работает система или программное обеспечение . Требования к домену связаны с характеристиками определенной категории или домена проектов.
Разработка программного обеспечения
Проектирование программного обеспечения — это процесс определения архитектуры, компонентов, интерфейсов и других характеристик системы или компонента. Это также называется программной архитектурой . Дизайн программного обеспечения делится на три различных уровня дизайна . Три уровня — это дизайн интерфейса , архитектурный дизайн и детальный дизайн . Дизайн интерфейса — это взаимодействие между системой и ее средой. Это происходит на высоком уровне абстракции вместе с внутренней работой системы. Архитектурный дизайн имеет отношение к основным компонентам системы и их обязанностям, свойствам, интерфейсам, а также их отношениям и взаимодействиям, которые происходят между ними. Детальный проект — это внутренние элементы всех основных компонентов системы, их свойства, взаимосвязи, обработка и, как правило, их алгоритмы и структуры данных .
Разработка программного обеспечения
Построение программного обеспечения, основной вид деятельности при разработке программного обеспечения, представляет собой сочетание программирования , модульного тестирования , интеграционного тестирования и отладки . Тестирование на этом этапе обычно выполняется программистом, пока программное обеспечение находится в стадии разработки, чтобы проверить, что было только что написано, и решить, когда код готов к отправке на следующий этап.
Тестирование программного обеспечения
Тестирование программного обеспечения — это эмпирическое техническое исследование, проводимое для предоставления заинтересованным сторонам информации о качестве тестируемого продукта или услуги с использованием различных подходов, таких как модульное тестирование и интеграционное тестирование . Это один из аспектов качества программного обеспечения . Как отдельный этап разработки программного обеспечения, он обычно выполняется сотрудниками отдела контроля качества или разработчиком, отличным от того, кто написал код.
Сопровождение программного обеспечения
Сопровождение программного обеспечения относится к действиям, необходимым для оказания экономичной поддержки после поставки программного продукта. Сопровождение программного обеспечения — это модификация и обновление программных приложений после распространения для исправления ошибок и повышения его производительности. Программное обеспечение имеет много общего с реальным миром, и когда реальный мир меняется, требуется обслуживание программного обеспечения. Обслуживание программного обеспечения включает в себя: исправление ошибок , оптимизацию, удаление неиспользуемых и отброшенных функций и улучшение уже существующих функций. Обычно на техническое обслуживание уходит от 40% до 80% стоимости проекта, поэтому сосредоточение внимания на техническом обслуживании снижает затраты.
Гражданское строительство
Гражданское строительство включает в себя проектирование, строительство и обслуживание физической и естественной застроенной среды.
Субдисциплина | Сфера | Основные специальности | |
---|---|---|---|
Инженерия окружающей среды | Применение инженерии для улучшения и защиты окружающей среды. |
|
|
Геотехническая инженерия | Обеспокоен поведением грунтовых материалов и механики грунта и горных пород на строительной площадке. | ||
Строительная инженерия | Проектирование конструкций, которые поддерживают или противостоят структурным нагрузкам . |
|
|
Транспортное машиностроение | Использование техники для обеспечения безопасной и эффективной перевозки людей и грузов. |
|
|
Коммунальная техника | Отрасль гражданского строительства, которая фокусируется на планировании, проектировании, строительстве, эксплуатации, техническом обслуживании и управлении активами любых инженерных систем, а также взаимодействии между коммунальной инфраструктурой и другой гражданской инфраструктурой. | ||
Инженерия водных ресурсов | Прогнозирование, планирование, освоение и управление водными ресурсами. |
|
И все-таки, что выбрать, чтобы быть инженером-программистом?
Исходя из набора предметов и курсов в этом университете следует, что лучшим выбором будет “Вычислительна техника”, если вы хотите стать инженером-программистом.
Для простоты предположим, что вы надеетесь получить одну из самых высокооплачиваемых работ (~ 100 000 долларов США в год) в качестве инженера-программиста в Северной Америке. Эти рабочие места обычно находятся в крупных компаниях-разработчиках программного обеспечения (например, Microsoft, Google, Amazon и т. д.). Или в компаниях среднего бизнеса с высокими темпами роста (Dropbox, Lyft, Snapchat, Pinterest и т. д.).
Как правило, они ищут в кандидате на программиста возможность писать хороший код и создавать интересные проекты, а также знание основ компьютерных наук, структур данных и алгоритмов.
Лучший способ активизировать этот набор навыков – быстро изучить основы и тратить свое время на решение проблем и написание кода.
Основываясь на учебной программе для софт-инженера и на занятости инженеров-программистов, это будет сложно сделать на курсе “Программной инженерии”, чем на “Вычислительной технике”.
Еще одно преимущество курса “Вычислительной техники” заключается в том, что она дает больше факультативов. Это здорово, потому что в зависимости от того, что востребовано на рынке труда, вы сможете корректировать свое обучение. Например, если разработка мобильных приложений востребована, вы можете начать ее изучать и т. д.
Быстрый осмотр пациента
- Вычислительная техника изучают, как устроен компьютер, как он работает, в основном с теоретической и математической стороны.
- Вы должны выбрать это направление, если вы любите математику и логику или если вы хотите работать в сфере компьютерных наук, искусственного интеллекта, машинного обучения, безопасности или графики.
- Программная инженерия изучает, как устроена операционные и программные системы, такое как, управление проектами, обеспечение качества и тестирование.
- Вы должны выбрать разработку программного обеспечения, если вас интересует практический подход, жизненный цикл и как поддерживается и разрабатывается ПО.
- Как вычислительная техника, так и программная инженерия учат основам программирования и информатики, что полезно, если вы хотите стать программным разработчиком.
Чтобы понять разницу между специалистами в области вычислительной техники и программной инженерии, давайте взглянем на их соответствующую учебную программу в Университете Ватерлоо в Канаде.
Специализация и обязанности Software Engineer
Теперь рассмотрим основные обязанности инженера ПО на разных уровнях.
Два состояния каждого программиста: «я — бог» и «я не имею представления, что делаю»
Начальный уровень
Когда вы делаете первые шаги в инжиниринге ПО, вам предложат тестирование, чтобы оценить ваши умения. А дальше, в зависимости от результатов, вас нанимают и определяют конкретные обязанности.
Ваши задачи могут быть какими угодно, но все они будут направлены на то, чтобы вы могли учиться и приобретать опыт. Очень часто придется работать с более опытными сотрудниками, которые будут следить за вашим прогрессом и делиться с вами знаниями. Имейте в виду: чем лучше будете выполнять задания, тем больше возможностей у вас появится в будущем!
Джуниор и мидл
Обычно при найме Junior Software Engineer главное требование — опыт. Для этого уровня наличие опыта — не столько бонус, сколько обязательное условие. На собеседовании вас первым делом спросят о том, есть ли у вас опыт работы на аналогичной должности или в этой сфере.
Тем не менее работа — не единственный способ набраться опыта. У вас могут быть и личные, и групповые проекты. Не лишними окажутся и семинары или курсы. Закончили школу инжиниринга ПО — тоже хорошо.
Помимо опыта, джуниор должен уметь работать автономно, без постоянного надзора более продвинутых специалистов.
Работодатель предполагает, что у вас есть базовые знания в сфере разработки ПО. У вас должно быть достаточно навыков, чтобы свободно работать со всеми инструментами, которые используются в программном инжиниринге.
То же самое касается и мидл-уровня, но с одним нюансом. На Middle Software Engineer возлагают больше обязанностей, и навыков у него должно быть больше (как технических, так и коммуникационных). Такой эксперт уже может выступать ментором для разработчиков начального и младшего уровней.
Сеньор
Как и большинство опытных специалистов, Senior Software Engineer должен выполнять свои непосредственные обязанности, а также вести и поддерживать команду. Здесь потребуются еще и коммуникационные, и управленческие навыки. Плюс умение активно слушать, хотя с этим связана не каждая должность в этой сфере. С другой стороны, вам доверят самые важные и сложные задания, поэтому и уровень ответственности значительно возрастет. Если вы доросли до сеньора, значит карьера в этой сфере у вас вполне сложилась.
«Все — вот здесь»
Архитектор
Архитектор платформ должен сделать так, чтобы платформа выглядела простой и понятной для внешних пользователей. А чтобы этого добиться, можно воспользоваться, к примеру, интерфейсом прикладного программирования (API). В таком случае помимо организации процесса, вы будете участвовать еще и в проектировании API.
В основном ваша задача — выбор и реализация архитектуры, а остальное время вы будете тратить на анализ рынка и совместную работу с продакт-менеджерами.
Честно говоря, с такими навыками уже можно запросто открывать свой стартап.
Иногда времени на участие в разработке продукта не остается. Но архитектор все равно будет тесно сотрудничать со многими командами инженеров и разработчиков. К обязанностям могут добавить контроль разработки приложений и сервисов. Придется заниматься масштабированием, подбирать подходящие технологии и обеспечивать надежность и бесперебойность процессов. В этом случае Software Architect должен обладать творческим мышлением, иначе он не сможет решать сложные задачи.
Практики
Вторая важная часть обучения — практики. С первого же курса студент делает какие-нибудь практически полезные задачи под руководством опытного коллеги. Например, очередное приложение для управления календарём или заметками. Или новая функциональность в существующем приложении. Или изучает сложность вычислимости какого-нибудь семейства формул, если его занесло в направление Computer Science.
На первых курсах мы не требуем новизны или практичности (всё-таки цель — дать поиграться), однако к диплому требования к качеству проектов и защиты повышаются
На последних курсах помимо вопроса «что сделано?» студентам важно рассказывать, зачем сделано и почему именно так. При этом «так хочется конкретно этой компании, в которой работает мой научный руководитель» само по себе ответом не является
А вот «там жёсткие диски умирают каждую секунду, поэтому вот такой open-source не подходит, вот эта статья чисто теоретическая, а вот у Google решение есть, но закрытое» — вполне. Защитить ненужное упражнение со второго курса в качестве диплома не выйдет — на защите (и некоторых предзащитах) сидят любопытные разработчики с ноутбуками и гуглом наготове. «Такого ещё никто не делал» — практически самое опасное, что можно произнести. Кстати, защищаем не только дипломы, но и практики, регулярно с первого курса.
Вот несколько фотографий с типичной защиты. Фотограф: Дима Дроздов.
Практики позволяют научиться работать «в долгую» с большими проектами, иногда частично написанными другими разработчиками. Не всегда можно угадать с темой проекта: скажем, попробовав низкоуровневую разработку студент может заречься заниматься ей в будущем. В этом и смысл практик: понять, что нравится, а что нет, не на работе, а в условиях со ставками поменьше. Хотя последняя практика должна перерасти в содержательный бакалаврский диплом. «Содержательный» — это когда по диплому можно как минимум написать статью на Хабр и не уйти в минуса. Или, если работа совсем хороша, опубликоваться в научном журнале, выступить на конференции или хотя бы собрать плюсов.
В чём различие?
Итак, мы рассказали про каждую из профессий и следующим шагом станет проведение сравнения и ответ на вопрос, чем же отличается программный инженер от разработчика программного обеспечения? Давайте попробуем ответить на этот вопрос как можно более понятно и лаконично.
Для проведения черты между этими двумя профессиями существует “золотое правило”. И звучит оно так: программный инженер может быть разработчиком программного обеспечения, но разработчик программного обеспечения не может быть программным инженером. Почему так? Что же, разработчик этот тот, кто работает с программой, тогда как программный инженер (или инженер-программист) работает с базой для этой программы. Улавливаете смысл?
По сути, программный инженер разрабатывает и обслуживает платформы, на которых разработчик создаёт саму программу. Эти две профессии очень близко связаны друг с другом, но сильно отличаются друг от друга в определённых аспектах.
Итак – теперь у вас есть базовое представление о двух профессиях и их различии. Давайте копнём немного глубже и постараемся провести сравнение по нескольким критериям.
История
Начиная с 1960-х годов инженерия программного обеспечения рассматривалась как отдельный вид инженерии . Кроме того, разработка программного обеспечения рассматривалась как борьба. Было сложно угнаться за оборудованием, что доставляло много проблем разработчикам программного обеспечения. Проблемы включали в себя программное обеспечение, которое превышало бюджет, превышало сроки, требовало обширного устранения ошибок и обслуживания, а также безуспешно отвечало потребностям потребителей или даже не было завершено. В 1968 году НАТО провела первую конференцию по программной инженерии, на которой были рассмотрены вопросы, связанные с программным обеспечением: были установлены руководящие принципы и передовой опыт разработки программного обеспечения.
В 1984 году Институт инженерии программного обеспечения (SEI) был основан как финансируемый из федерального бюджета центр исследований и разработок со штаб-квартирой в кампусе Университета Карнеги-Меллона в Питтсбурге, штат Пенсильвания, США. Уоттс Хамфри основал программу SEI Software Process Program, направленную на понимание и управление процессом разработки программного обеспечения. Введенные уровни зрелости процессов станут интеграцией модели зрелости возможностей для разработки (CMMI-DEV), которая определяет, как правительство США оценивает способности группы разработчиков программного обеспечения.
Подкомитет ISO / IEC JTC 1 / SC 7 собрал современные, общепринятые передовые практики в области разработки программного обеспечения и опубликовал их как свод знаний по программной инженерии (SWEBOK). Программная инженерия считается одной из основных компьютерных дисциплин.
Примеры должностей
Давайте посмотрим, какие должности могут быть востребованы в этой сфере:
- Chief Technical Officer (CTO);
- VP of Engineering или Director of Engineering;
- Delivery Manager;
- Chief Architect;
- Software Architect;
- Engineering Project Manager или Engineering Manager;
- Technical Lead или Engineering Lead;
- Principal Software Engineer;
- Senior Software Engineer;
- Software Engineer;
- Software Developer;
- Junior Software Developer;
- Intern Software Developer.
Теперь у вас есть полная картина, и вы будете знать, с чем доведется столкнуться в мире разработки ПО, если вы решите двигаться в этом направлении.
Образование
Знание компьютерного программирования — необходимое условие для того, чтобы стать инженером-программистом. В 2004 году компьютерное общество IEEE разработало SWEBOK , который был опубликован как Технический отчет ISO / IEC 1979: 2005, в котором описывается совокупность знаний, которые они рекомендуют освоить дипломированному инженеру-программисту с четырехлетним опытом работы. Многие инженеры-программисты начинают свою профессию, получив высшее образование или обучаясь в профессионально-техническом училище. Одна стандартная международная учебная программа для получения степени бакалавра программной инженерии была определена Объединенной целевой группой по компьютерным программам компьютерного общества IEEE и Ассоциации вычислительной техники и обновлена в 2014 году. В ряде университетов есть программы на получение степени в области программной инженерии; по состоянию на 2010 год в Соединенных Штатах насчитывалось 244 программы бакалавриата по программной инженерии в кампусе , 70 онлайн-программ, 230 программ уровня магистра, 41 программа уровня докторантуры и 69 программ уровня сертификата.
Помимо университетского образования, многие компании спонсируют стажировки для студентов, желающих продолжить карьеру в области информационных технологий. Эти стажировки могут познакомить студентов с интересными реальными задачами, с которыми типичные инженеры-программисты сталкиваются каждый день. Аналогичный опыт можно получить во время военной службы в области разработки программного обеспечения.
Программы обучения программной инженерии
Половина всех практикующих сегодня имеет ученые степени в области компьютерных наук , информационных систем или информационных технологий . Небольшое, но постоянно растущее число практикующих специалистов имеют ученые степени в области разработки программного обеспечения. В 1987 году кафедра вычислительной техники в Имперском колледже Лондона представила первые три года разработки программного обеспечения степень бакалавра в Великобритании и мире; в следующем году Университет Шеффилда учредил аналогичную программу. В 1996 году Рочестерский технологический институт установил степень программы первого по разработке программного обеспечения бакалавра в Соединенных Штатах, однако, она не не получила ABET аккредитацию до 2003 года, в то же время , как Rice University , Университета Кларксона , Милуоки школа инженерии и Университета штата Миссисипи получил их. В 1997 году технологический колледж PSG в Коимбаторе, Индия, первым начал пятилетнюю интегрированную степень магистра наук в области разработки программного обеспечения.
С тех пор во многих университетах были учреждены степени бакалавра программной инженерии. Стандартная международная программа обучения программной инженерии SE2004 была определена руководящим комитетом в период с 2001 по 2004 год при финансовой поддержке Ассоциации вычислительной техники и Компьютерного общества IEEE . По состоянию на 2004 год в США около 50 университетов предлагали степени в области разработки программного обеспечения, в которых преподаются как компьютерные науки, так и инженерные принципы и методы. Первая степень магистра программной инженерии была учреждена в Сиэтлском университете в 1979 году. С тех пор дипломы по программной инженерии стали доступны во многих других университетах. Точно так же в Канаде Совет по аккредитации инженеров Канады (CEAB) Канадского совета профессиональных инженеров признал несколько программ инженерии программного обеспечения.
В 1998 году Высшая военно-морская школа США (NPS) учредила первую в мире докторскую программу по программной инженерии. Кроме того, появилось множество онлайн-ученых степеней в области программной инженерии, таких как степень магистра наук в области программной инженерии (MSE), предлагаемая на факультете компьютерных наук и инженерии Калифорнийского государственного университета в Фуллертоне . Стив МакКоннелл считает, что, поскольку большинство университетов преподают информатику, а не разработку программного обеспечения, настоящих инженеров-программистов не хватает. IEEE поручил университету ETS (École de technologie supérieure) и UQAM (Université du Québec à Montréal) разработать свод знаний по программной инженерии ( SWEBOK ), который стал стандартом ISO, описывающим совокупность знаний, охватываемых инженером-программистом.