2. Что такое техническое задание? Что такое список спецификаций? Как должны
формулироваться спецификации?
ТЗ составляет менеджер проекта.
Техническое задание – документ, описывающий требования к разрабатываемой системе:
функциональные, системные, требования к производительности и т.д. Важными
разделами технического задания являются назначение проекта, целевая аудитория /
контекст использования. Может содержать перечень функциональных требований, а
может содержать точные макеты интерфейсов или описание требуемой архитектуры
проекта, если приложение будет встраиваться как часть другой инфраструктуры.
Список спецификаций - точное описание функций, структура входных и выходных
данных, методы и средства их размещения. Определяются алгоритмы обработки данных.
В общем случае, спецификации определяют те функции, которые должна выполнять
система, не указывая, каким образом это достигается.
4. Что такое смета проекта? Как она выглядит? Как на основе календарного плана
составить смету проекта?
Смета – документ, описывающий стоимость отдельных этапов.
8. Что такое система версионного контроля? Что такое ветка в репозитории? Как
создать ветку в репозитории? Что такое слияние веток? Что такое конфликт
версионного контроля? Как устраняются конфликты версионного контроля?
Ветка в Git'е — это просто «скользящий» указатель на один из коммитов. Для создания
ветки нажмите кнопку Branch-> new (через консоль нинаю)
Слияние веток (кнопка Merge)– это перенос изменений с одной ветки на другую. При
этом слияние не затрагивает сливаемую ветку, то есть она остается в том же состоянии,
что позволяет нам потом продолжить работу с ней.
Ситуация, когда при слиянии нескольких версий сделанные в них изменения
пересекаются между собой, называют конфликтом. При конфликте изменений система
управления версиями не может автоматически создать объединённый проект, и
вынуждена обращаться к разработчику. Для разрешения конфликта система, в общем
случае, предлагает разработчику три варианта конфликтующих файлов: базовый,
локальный и серверный.
Если несколько человек изменили один и тот же участок кода, то, автоматически,
объединить такие изменения невозможно. Обычно, системы контроля версий
предоставляют собой инструменты, позволяющие вручную внести необходимые правки
в тест программ, чтобы объединить конфликтующие части кода.
9. Что такое система версионного контроля? Что такое gitflow? Какие ветки
должны создаваться согласно gitflow? Какие ограничения на доступ и к каким
веткам репозитория описаны в gitflow? Что такое pull request и чем он отличается
от коммита?
Git-flow — это методология ветвления и слияния. У нас есть две основные ветки: master
и develop.
В ветке master содержится код продукта. А вся работа делается в ветке develop.
Во время работы на основе develop создаются так называемые feature-ветки. Их может
быть неограниченное количество. Далее, у нас есть ветка release, которая используется
для подготовки к новому релизу проекта. Наконец, есть ветка hotfix, которая служит для
срочного исправления багов.
Вот как в теории, происходит рабочий процесс в Gitflow:
1. Создается репозиторий
2. Репозиторий инициализируется
3. Начинается работа на ветке develop
4. Возникает необходимость опробовать новую штуку – создается feature-ветка и
делаются коммиты
5. Закончив работу на feature-ветке, вы сливаете ее с develop
6. Если вы довольны текущей версией, но хотите продолжить работу, создается ветка
release, куда перемещается текущая версия. Правка багов будет происходить на этой же
ветке.
7. Когда с веткой release покончено, время слить ее в master и продолжить работу с
develop
8. Кроме того, этот момент можно отметить на master-ветке
pull request — предложение изменения кода в чужом репозитории.
1. Крутой программер создал репозиторий.
2. Вы сделали форк его репозитория (т.е. скопировали к себе).
3. Вы сделали какие-то крутые изменения в своём репозитории.
Теперь если вы хотите, чтобы крутой дядя внёс ваши крутые изменения в свой крутой
код. И вы просите, чтобы он взял ваши изменения, т.е. сделал git pull. Это и
называется pull request
10. UML-диаграммы пакетов: что показывают данные диаграммы? Как они
составляются? Как рисуются пакеты на диаграммах пакетов? Какие связи между
пакетами могут быть? Чем связи отличаются друг от друга? Нарисуйте диаграмму
пакетов для примера.
В качестве связей между пакетами используется импортирование, т. е. когда элементы
одного пакета обращаются к доступным элементам другого пакета. Зависимость со
стереотипом «import» позволяет при обращении сущности из одного пакета к сущности
другого пакета указывать только ее имя, а не полную спецификацию.
Семантика зависимости со стереотипом «merge» (Слияние пакетов) - это "направленная
связь между двумя пакетами, которая указывает, что содержимое двух пакетов должно
быть объединено. Это очень похоже на обобщение в том смысле, что исходный элемент
концептуально добавляет характеристики целевой элемент к его собственным
характеристикам, что приводит к элементу, который сочетает в себе характеристики
обоих ". В этом отношении, если элемент существует как в исходном пакете, так и в
целевом пакете, тогда определение исходного элемента будет расширено, чтобы
включить определение целевого элемента.
class Car
{
string model = "Porshe";
Engine engine;
public Car()
{
this.engine = new Engine(360);
}
}
Агрегация – это когда экземпляр создается где-то в другом месте кода, и передается
в конструктор автомобиля в качестве параметра.
class Engine
{
int power;
public Engine(int p)
{
power = p;
}
}
class Car
{
string model = "Porshe";
Engine engine;
public Car(Engine someEngine)
{
this.engine = someEngine;
}
}
Engine goodEngine = new Engine(360);
Car porshe = new Car(goodEngine);
14. Дайте определение понятию наследования. Напишите пример наследуемых
классов. Создайте экземпляры классов, обратитесь к их полям и методам. Пример
на языке Си++ или C#. Нарисуйте UML-диаграмму вашего примера.
Наследование – это свойство системы, позволяющее описать новый класс на основе
уже существующего с частично или полностью заимствующейся
функциональностью. Класс, от которого производится наследование, называется
базовым или родительским. Новый класс – потомком, наследником или производным
классом. С помощью наследования можно создавать новые классы, а также выделять
общую реализацию нескольких классов в один базовый класс для уменьшения
дублирования кода.
namespace ConsoleApp1
{
// Класс Book - базовый класс
class Book
{
// 1. Внутренние поля класса
string title; // название (заголовок) книги
string author; // фамилия и имя автора
double price; // стоимость книги
// 2. Конструктор с 3 параметрами
public Book(string _title, string _author, double _price)
{
title = _title;
author = _author;
// 3. Свойства типа get/set для доступа к полям класса
public string Title
{
get { return title; }
set { title = value; }
}
// 2. Конструктор с 4 параметрами.
// Вызывает конструктор базового класса с помощью base(...).
public BookGenre(string _title, string _author, double _price, string _genre) :
base(_title, _author, _price)
{
genre = _genre;
}
class Program
{
static void Main(string[] args)
{
// 1. Объявить экземпляр класса Book
Book b1 = new Book("Title - 01", "Author - 01", 122.25);
Инструкция try-catch состоит из блока try. Блок try содержит защищаемый код, в
котором могут происходить исключения. Этот блок выполняется до момента
возникновения исключения или до своего успешного завершения. После следует одно
или несколько предложений catch, в которых определяются обработчики для различных
исключений.
При возникновении исключения среда CLR ищет оператор catch, который обрабатывает
это исключение. Если выполняющийся в данный момент метод не содержит такого блока
catch, то среда CLR рассматривает метод, который вызвал текущий метод, и т. д. по стеку
вызовов. Если блок catch не найден, то среда CLR отображает пользователю сообщение о
необработанном исключении и останавливает выполнение программы.
тип объекта ошибки может передаваться оператору throw в языке C#?
if (value.Year < 1900 || value.Date > nowDate || value == null)
{
throw new ArgumentException("Ошибка. Некорректная дата ");
}
Типы исключений:
22. Что такое цикломатическая сложность метода? Как её рассчитать? Что такое
цикломатическая сложность класса? Для чего нужно рассчитывать
цикломатическую сложность?
Цикломатическая сложность алгоритма (функции, метода) служит для определения
количества тестов — это количество линейно независимых маршрутов через
программный код.
Например, если исходный код не содержит никаких точек ветвления или циклов, то
сложность равна единице, поскольку есть только единственный маршрут через код. Если
код имеет единственный оператор if, содержащий простое условие, то существует два
пути через код: один если условие оператора if имеет значение true и один — если false
Цикломатическая сложность цикла = 1;
Цикломатическая сложность класса в свою очередь определяется суммой
цикломатических сложностей всех открытых методов класса.
23. Что такое юнит-тест? Что он проверяет? Какую структуру имеет юнит-тест?
Что такое Setup и Teardown? Что такое степень покрытия кода тестами? Как она
определяется?
Юнит-тестирование – тестирование минимальных модулей архитектуры, максимально
изолированных друг от друга. Минимальными модулями архитектуры как правило
являются классы. Условие изоляции тестируемого модуля от других необходимо для
того, чтобы в случае обнаружения ошибки быть уверенным, что ошибка возникла именно
в тестируемом модуле. В противном случае найти место возникновении ошибки будет
гораздо сложнее. Юнит-тестированию подлежит поведение класса, находящееся под
модификаторами доступа public или protected. Закрытая реализация класса (private)
напрямую тестированию не подвергается, только опосредованно через вызов открытых
методов класса.
Юнит-тестирование — тестирование одного выбранного блока/компонента в изоляции от
других компонентов системы. Как правило, подобными компонентами являются классы
или методы.
1. Создаются входные параметры — тестовые данные.
2. Подают тестовые данные на вход общедоступного метода тестируемого класса.
3. Сравнивают возвращаемое тестируемым методом значение с некоторым эталоном —
заранее известным результатом, который должен получиться при правильной работе
данного метода. Данный эталон определяется в ТЗ, спецификациях или другой проектной
документации. Если результат работы метода совпадает с эталоном — тест пройден. В
любом другом случае тест считается провальным.
Чтобы метод выполнялся перед запуском каждого теста в текущем тест, то данный
метод следует пометить атрибутом
[SetUp] – подготовка тестируемых объектов (создание объекта,присвоение ему
значения..)
Также есть атрибут, который позволяет запускать метод после каждого теста — это
[TearDown] - действия после теста (отключение от БД, удаление созданных в тесте
файлов и т.д.)
24. Что такое юнит-тест? Приведите пример позитивного юнит-теста? Пример на
языке Си++ или C#.
Юнит-тестирование – тестирование минимальных модулей архитектуры, максимально
изолированных друг от друга.
Позитивный тест – тест, в котором проверяется работа метода при корректных исходных
данных.
25. Что такое юнит-тест? Приведите пример негативного юнит-теста? Пример на
языке Си++ или C#.
Негативный тест – тест, в котором проверяется обработка методом заведомо
некорректных исходных данных.
26. Что такое сервер непрерывной интеграции? Какие задачи он выполняет?
Системы непрерывной интеграции позволяют выполнять автоматическую сборку
программы, её тестирование, а также сборку установочных пакетов или размещение веб-
сервиса на удаленном рабочем сервере.
Непрерывная интеграция — это методология разработки и набор практик, при которых
в код вносятся небольшие изменения с частыми коммитами. И поскольку большинство
современных приложений разрабатываются с использованием различных платформ и
инструментов, то появляется необходимость в механизме интеграции и тестировании
вносимых изменений.
С технической точки зрения, цель CI — обеспечить последовательный и
автоматизированный способ сборки, упаковки и тестирования приложений.
Типичные задачи CI:
28. Методология Scrum: что такое резерв проекта (project backlog)? Как он
выглядит? Кто его составляет?
Scrum – гибкая методология разработки с акцентом на качество процессов. Суть
методологии сводится к тому, что создание продукта делится на определенные части.
Product Backlog (продакт бэклог) – или Backlog требования к продукту, пожелания
заказчика по функционалу и дизайну, все «хотелки»; они расставляются по степени
важности и ценности для заказчика.
Резерв проекта (Product Backlog) – это список требований к функциональности
продукта (ПО), упорядоченный по степени важности и редактируемый всеми
участниками скрам-процесса.
Бэклог продукта (Product backlog) представляет собой упорядоченный по степени
важности список требований, предъявляемых к разрабатываемому продукту. Элементы
этого списка называются Пользовательскими историями (User story). Каждой истории
соответствует уникальный ID
29. Методология Scrum: что такое спринт? Что такое резерв спринта? Что такое
story points?
Sprint (спринт) – временной промежуток от 1 до 4 недель, за который команда создает
часть продукта, готовую к демонстрации и ценную для заказчика. Оптимальная
продолжительность спринта – 1-2 недели.
Спринт (Sprint) – это итерация в скрам, в ходе которой создается функциональный рост
программного обеспечения.
В конце каждого такого спринта необходимо проводить демонстрацию завершенного
куска.
Резерв Проекта (Project Backlog) — это список требований к функциональности
разрабатываемой системы, упорядоченный по степени их важности.
Резерв Спринта (Spring Backlog) — содержит функциональность, выбранную
владельцем проекта из резерва проекта.
Story Points (стори поинтc) – единица оценки сложности выполнения задачи.
(применяется, если проект состоит из 3+ спринтов).
30. Методология Scrum: что такое планировочный покер? Для чего проводится
планировочный покер? Когда он проводится?
Scrum Poker (скрам покэ) – быстрый и точная техника оценки при помощи колоды карт
с числами Фибоначчи (1,2,3,5,8,13). Задачи с оценкой 13 необходимо дробить на более
мелкие.
31. Методология Scrum: что такое Scrum-доска? Как с ней работать? Для чего
проводятся ежедневные митинги?
Scrum-доска — это инструмент открытой демонстрации состояния текущей работы
Scrum-доска состоит из трех колонок: «сделать» (to-do), «в процессе» (in progress),
«сделано» (done).
На Scrum-доске размещается весь объём Sprint Backlog, который команда выбрала на
Sprint Planning для реализации в текущем спринте. Обычно карточки бизнес-задач
располагаются на доске сверху вниз в порядке убывания приоритета (сверху — самые
важные, внизу — наименее важные).
Sprint Planning Meeting (спринт плэнин митин) – планирование Sprint, скрам-собрание,
где участвует Scrum Team. Выбираются задания из Бэклога, которые возможно
выполнить за спринт.
1. Проводится в одно и то же время;
2. Длится строго не более 15 минут. Решение проблем выносится за рамки
митинга и в составе лиц, непосредственно затронутых данным препятствием;
3. Все отвечают только на три вопроса, отвечают друг другу:
32. Методология Scrum: что такое Burndown Chart? Как он выглядит? Как и кем
он заполняется? Как анализировать Burndown Chart и какие выводы по нему
можно сделать для улучшения процесса разработки?