Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Методика и способы тестирования программных компонент и комплексов. Понятие фикстуры, и инструментов для тестирования

Лекция



Привет, Вы узнаете о том , что такое методика тестирования программных компонент, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое методика тестирования программных компонент, фикстуры , настоятельно рекомендую прочитать все из категории Надёжность программного обеспечения.

Данная методика устанавливает основные методы, технологии и документы, обеспечивающие тестирование и отладку программных модулей и программных компонент, состоящих из нескольких модулей. Исходные данные для тестирования, которые нужно фиксировать и документировать до начала работы являются:
1) Документация на разработанную программную компоненту. Сюда входят техническое задание и/или спецификация требований на разработку программы, описание программы в виде печатного документа, руководство пользователя, исходный текст программы в виде печатного документа, на магнитных др. носителях.
2) Правила построения и описания программ на разных уровнях и языках. Правила структурного построения и интерфейсов компонент между собой и внешней средой.
3) Конкретные методы тестирования программ: статические и динамические, детерминированные и стохастические и др., применяются в зависимости от конкретных объектов.
4) Критерий качества тестирования и отладки программ.
5) Эталонные значения и распределение исходных данных и результатов, отражающие требования функций и показатели качества создаваемой программной компоненты.
6) Допуски на отклонение результатов функционирования и показатели качества от эталонных значений.


7) Реальные ресурсы тестирования.

Перед началом тестирования конкретных программных модулей и компонент необходимо составить план тестирования. Он должен включать следующие этапы:
1. Выбор метода тестирования, соответсвий основной цели.
2. Планирование проведения тестирования в соответствии с выбранным методом с учетом ограничений ресурсов.
3. Составление заданий на тестирование с указание контролируемых параметров, исходных данных и эталонов.
4. Реализация процесса тестирования и получение результатов.
5. Сравнение результатов с эталонами.
6. Диагностика, локализация и исправление ошибок и дефектов.
7. Оценка полноты проведения тестирования и необходимости применения других методов тестирования.
8. Определение достигнутого качества программ.


Реализация процеса тестирования тоже выполняется в несколько этапов:
1) Тестируется идентичность исходного текста программ, представленного на носителе данных с исходным текстом, представленным в программном документе.
2) Производится комплексирование статики программных и информационных модулей, входящих в них компонент, при этом проверяются все интерфейсы между модулями и выявляются их нестыковки с описанием спецификации.
3) Производится анализ потоков управления в тексте программы, выделяющий основные подпрограммы, модули, процедуры и функции и анализируются операторы управления вычислительным процессом. Для всех уровней иерархии программы строятся потоковые графы, которые используются для выделения маршрутов выполнения программ.
4) Выполняется анализ потоков данных, производится тестирование корректности обработки данных без использования программы. Цель этого этапа – установление соответствия между областями определения наборов данных и маршрутами их обработки в программе.
5) Устранения неувязок между программными и информационными модулями, входящими в компоненту.
6) Обработка результатов тестирования и оценка качества и коррекции в статике. Детерминированные и стохастические результаты использования тестов, сравниваются ч эталонными значениями.
7) Производится проверка полноты наборов тестов. Процесс тестирования считается завершенным, если были обработаны все наборы тестовых значений входных данных, и при этом не произошло отказов программы, остановок или искажений результатов.

Факт соответствия программной компоненты заданной спецификации формальным требованиям считается установленным, если получены следующие результаты:
1.программа имеет корректную структуру;

2.каждый из маршрутов завершается за конечное число шагов;

3.для каждой функции существует не пустое множество маршрутов;

4.нет соответствия маршрутов и данных;

5.нет нереализованных и тупиковых маршрутов;

6.программная спецификация соответствует требованиям стандартов и реализованным функциям;

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

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

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


7. Документирование результатов тестирования программных компонент


При тестировании программ создается и тестируется документация 2х видов:

1.Документация, отражающая состояние объектов тестирования.

2.Документация, реализующая процессы и результаты тестирования.
Каждый документ должен иметь сформированные: назначения, область его действия, категории специалистов, для которых его нужно применять, содержательную часть в соответствии с его назначением.


Система документирования процессов и результатов тестирования описана в стандарте ANSI / IEEE 829. Этот стандарт необходимо использовать как основу при реальных разработках. Система документирования охватывает планирование тестирования, отчеты о результатах тестирования.
На 1 этапе: тестируются идентичность исходного текста программ представленных на носителе данных с исходным текстом представленном в программном документе.
На 2 этапе: производится комплексирование в статики программ и информационных модулей …..
При этом проверяются все интерфейсы м/у модулями и выявляются их нестыковки с описаниями в спецификациях.
На 3 этапе проводится анализ потоков управления. В тексте проги выделяются основ. подпрограммные модули; процедуры и функции. И анализируются операторы управления вычислительным процессом.
Для всех уровней иерархии программы строятся потоковые графы, которые используются для выделения маршрутов выполнения проги.
На 4 этапе выполняется анализ потоков данных, произв. тестирование корректности обработанных данных без ипольз. проги. Цель этого этапа – установление соответствия между ОО наборов данных и маршрутов их обработки в прге.
На 5 этапе устраняются неувязки между прогами и информац-ми модулями, входящими в компоненту.
На 6 этапе производятся обработка результатов тестирования и оценка качества, и корректность компоненты в статике. Детерминированные и стохастические результаты исполнения тестов сравниваются с эталонными значениями.
На 7 этапе производятся проверка полноты наборов тестов. Процесс тестирования считается завершенным, если были обработаны все наборы тестовых значений входных данных (фикстур), и при этом не произошло отказов, остановов или искажение результатов.

Факт соответствия программ. компоненты заданным в спецификации функциональными требованиями считается установленным, если получены следующие результаты:

1.программа имеет корректную структуру;

2.для каждой функции существует непустое множество маршрутов;

3.каждый из маршрутов завершается за конечное число шагов;

4. нет несоответствия маршрутов и данных;

5. нет нереализованных и тупиковых маршрутов;

6. программная документация соответствует требованиям стандартов и реализуемым функциям.


На 8 этапе производится комплексирование взаимодействия функциональной компоненты с другими группами программ. При этом проверяется взаимодействие отлаживаемой компоненты с другими компоненентами и с моделью БД всего ПС.
На 9 этапе подключение компоненты к ОС реализующего ПК. После того, как устранены основные проблемы взаимодействия компоненты с другими группами программ, она может быть подключена к ОС в виде загрузочного модуля.
На 10 этапе. Обработка результатов отладки, оценка качества и корректность функц. компоненты во взаимодействии с другими компонентами в статике. Сопоставляется результаты анализа технического задания(или спецификации), описания применения проги с представленными наборами тестов и делается вывод о способности данного набора тестов полностью проверять декламированные функциональные возможности.

8. Об этом говорит сайт https://intellect.icu . Документирование результатов тестирования прог. компонент


При тестировании проги создается и используется документация двух видов: 1. документация, отражающая состояние объектов тестирования; 2. документация, характеризующая процессы и результаты тестирования.
Каждый документ должен иметь сформулированное назначение, область его действия, категории специалистов, для кот. он предназначен и кем он разрабатывается; этапы работы, на который его нужно применять; содержательную часть с соотстующим его назначением. Система документирования процессов и результатов тестирования представляется в стандарте ANSI/IEEE829. Этот стандарт необх-мо использовать как основу при реальных разработках.
Система документирования охватывает: планирование тестирования, специф. тестов и отчеты о результатах тестирования.

9 Способы тестирования программного обеспечения

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

Во время аттестации система должна корректно работать со всеми заданными тестовыми данными. При тестировании дефектов запускается такой тест, который вызывает некорректную работу программы и, следовательно, выявляет дефект. Обратите внимание на эту важную особенность: тестирование дефектов демонстрирует наличие, а не отсутствие дефектов в программе [2].

Общая модель процесса тестирования дефектов показана на рисунке 1. Тестовые сценарии — это спецификации входных тестовых данных и ожидаемых выходных данных плюс описание процедуры тестирования. Тестовые данные иногда генерируются автоматически. Автоматическая генерация тестовых сценариев невозможна, поскольку результаты проведения теста не всегда можно предсказать заранее.

Методика и способы  тестирования программных компонент и комплексов. Понятие фикстуры, и инструментов для тестирования

Рисунок 1. Процесс тестирования дефектов

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

Из опыта тестирования (и эксплуатации) больших программных продуктов, таких как текстовые процессоры или электронные таблицы, вытекает, что необычные комбинации функций иногда могут вызывать ошибки, но наиболее часто используемые функции всегда работают правильно [2,3].

Тестирование методом черного ящика
Тестирование методом черного ящика базируется на том, что все тесты основываются на спецификации системы или ее компонентов. Система представляется как «черный ящик», поведение которого можно определить только посредством изучения ее входных и соответствующих выходных данных. Другое название этого метода — функциональное тестирование, связано с тем, что испытатель проверяет не реализацию ПО медиаобразовательного портала, а только его выполняемые функции [2,3].

На рисунке 2 показана модель системы, тестируемая методом черного ящика. Этот метод также применим к системам, организованным в виде набора функций или объектов. Испытатель подставляет в компонент или систему входные данные и исследует соответствующие выходные данные. Если выходные данные не совпадают с предсказанными, значит, во время тестирования ПО успешно обнаружена ошибка (дефект).

Основная задача испытателя — подобрать такие входные данные, чтобы среди них с высокой вероятностью присутствовали элементы множества 1е. Во многих случаях выбор тестовых данных основывается на предварительном опыте испытателя. Однако дополнительно к этим эвристическим знаниям можно также использовать систематический метод выбора входных данных, обсуждаемый в следующем разделе [2,3].

Методика и способы  тестирования программных компонент и комплексов. Понятие фикстуры, и инструментов для тестирования

Рисунок 2. Тестирование методом черного ящика

Структурное тестирование
Метод структурного тестирования (рисунок 3) предполагает создание тестов на основе структуры системы и ее реализации. Такой подход иногда называют тестированием методом «белого ящика», «стеклянного ящика» или «прозрачного ящика», чтобы отличать его от тестирования методом «черного ящика» [3].

Методика и способы  тестирования программных компонент и комплексов. Понятие фикстуры, и инструментов для тестирования

Рисунок 3. Структурное тестирование

Как правило, структурное тестирование применяется к относительно небольшим программным элементам, например, к подпрограммам или методам, ассоциированным с объектами. При таком подходе испытатель анализирует программный код и для получения тестовых данных использует знания о структуре компонента. Например, из анализа кода можно определить, сколько контрольных тестов нужно выполнить для того, чтобы в процессе тестирования все операторы выполнились, по крайней мере, один раз [2-4].

Тестирование ветвей
Метод структурного тестирования, при котором проверяются все независимо выполняемые ветви компонента или программы. Если выполняются все независимые ветви, то и все операторы должны выполняться, по крайней мере, один раз. Более того, все условные операторы тестируются как с истинными, так и с ложными значениями условий. В объектно-ориентированных системах тестирование ветвей используется для тестирования методов, ассоциированных с объектами.

Количество ветвей в программе обычно пропорционально ее размеру. После интеграции программных модулей в систему методы структурного тестирования оказываются невыполнимыми. Поэтому методы тестирования ветвей, как правило, используются при тестировании отдельных программных элементов и модулей [2,3].

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

Метод тестирования ветвей основывается на графе потоков управления программы. Этот граф представляет собой скелетную модель всех ветвей программы. Граф потоков управления состоит из узлов, соответствующих ветвлениям решений, и дуг, показывающих поток управления. Если в программе нет операторов безусловного перехода, то создание графа — достаточно простой процесс. При построении графа потоков все последовательные операторы (операторы присвоения, вызова процедур и ввода-вывода) можно проигнорировать. Каждое ветвление операторов условного перехода (if-then-else или case) представлено отдельной ветвью, а циклы обозначаются стрелками, концы которых замкнуты на узле с условием цикла. На рисунке 4 показаны циклы и ветвления в графе потоков управления программы бинарного поиска [3].

Методика и способы  тестирования программных компонент и комплексов. Понятие фикстуры, и инструментов для тестирования

Рисунок 4. Граф потоков управления бинарного поиска

Цель структурного тестирования — удостовериться, что каждая независимая ветвь программы выполняется хотя бы один раз. Независимая ветвь программы — это ветвь, которая проходит, по крайней мере, по одной новой дуге графа потоков. В терминах программы это означает ее выполнение при новых условиях. С помощью трассировки в графе потоков управления программы бинарного поиска можно выделить следующие независимые ветви [3]:
• 1, 2, 3, 8, 9
• 1, 2, 3, 4, 6, 7, 2
• 1, 2, 3, 4, 5, 7, 2
• 1, 2, 3, 4, 6, 7, 2, 8, 9

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

Количество независимых ветвей в программе можно определить, вычислив цикломатическое число графа потоков управления программы [1-4]. Дипломатическое число С любого связанного графа G вычисляется по формуле:

С (G) = количество дуг – количество узлов + 2

Для программ, не содержащих операторов безусловного перехода, значение цикломатического числа всегда больше количества проверяемых условий. В составных условиях, содержащих более одного логического оператора, следует учитывать каждый логический оператор. Например, если в программе шесть операторов if и один цикл while, то цикломатическое число равно 8. Если одно условное выражение является составным выражением с двумя логическими операторами (объединенными операторами and или or), то цикломатическое число будет равно 10. Цикломатическое число программы бинарного поиска равно 4.

После определения количества независимых ветвей в программе путем вычисления цикломатического числа разрабатываются контрольные тесты для проверки каждой ветви. Минимальное количество тестов, требующееся для проверки всех ветвей программы, равно цикломатическому числу [3,4].

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

Динамические анализаторы программ — это инструментальные средства, которые работают совместно с компиляторами. Во время компилирования в сгенерированный код добавляются дополнительные инструкции, подсчитывающие, сколько раз выполняется каждый оператор программы. Чтобы при выполнении отдельных контрольных тестов увидеть, какие ветви в программе выполнялись, а какие нет, распечатывается рабочий профиль программы, где видны непроверенные участки [3].

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

Во время тестирования сборки возникает проблема локализации выявленных ошибок. Между компонентами системы существуют сложные взаимоотношения, и при обнаружении аномальных выходных данных бывает трудно установить источник ошибки. Чтобы облегчить локализацию ошибок, следует использовать пошаговый метод сборки и тестирования системы. Сначала следует создать минимальную конфигурацию системы и ее протестировать. Затем в минимальную конфигурацию нужно добавить новые компоненты и снова протестировать, и так далее до полной сборки системы [2,3,4].

В примере на рисунке 5 последовательность тестов T1, Т2 и ТЗ сначала выполняется в системе, состоящей из модулей А и В (минимальная конфигурация системы). Если во время тестирования обнаружены дефекты, они исправляются. Затем в систему добавляется модуль С. Тесты T1, T2 и ТЗ повторяются, чтобы убедиться, что в новой системе нет никаких неожиданных взаимодействий между модулями А и В. Если в ходе тестирования появились какие-то проблемы, то, вероятно, они возникли во взаимодействиях с новым модулем С. Источник проблемы локализован, таким образом упрощается определение дефекта и его исправление. Затем система запускается с тестами Т4. На последнем шаге добавляется модуль D и система тестируется еще раз выполняемыми ранее тестами, а затем новыми тестами Т5 [3,4].

Методика и способы  тестирования программных компонент и комплексов. Понятие фикстуры, и инструментов для тестирования

Рисунок 5. Тестирование сборки

Конечно, на практике редко встречаются такие простые модели. Функции системы могут быть реализованы в нескольких компонентах. Тестирование новой функции, таким образом, требует интеграции сразу нескольких компонентов. В этом случае тестирование может выявить ошибки во взаимодействиях между этими компонентами и другими частями системы. Исправление ошибок может оказаться сложным, так как в данном случае ошибки влияют на целую группу компонентов, реализующих конкретную функцию. Более того, при интеграции нового компонента может измениться структура взаимосвязей между уже протестированными компонентами. Вследствие этого могут выявиться ошибки, которые не были выявлены при тестировании более простой конфигурации [2-4].

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

На рисунке 6 показаны возможные инструментальные средства тестирования и отношения между ними.

1. Организатор тестов. Управляет выполнением тестов. Он отслеживает тестовые данные, ожидаемые результаты и тестируемые функции программы.
2. Генератор тестовых данных(фикстур). Генерирует тестовые данные для тестируемой программы. Он может выбирать тестовые данные из базы данных или использовать специальные шаблоны для генерации случайных данных необходимого вида.
3. Оракул. Генерирует ожидаемые результаты тестов. В качестве оракулов могут выступать предыдущие версии программы или исследуемого объекта. При тестировании параллельно запускаются оракул и тестируемая программа и сравниваются результаты их выполнения.
4. Компаратор файлов. Сравнивает результаты тестирования с результатами предыдущего тестирования и составляет отчет об обнаруженных различиях. Компараторы особенно важны при сравнении различных версий программы. Различия в результатах указывают на возможные проблемы, существующие в новой версии системы.
5. Генератор отчетов. Формирует отчеты по результатам проведения тестов.
6. Динамический анализатор. Добавляет в программу код, который подсчитывает, сколько раз выполняется каждый оператор. После запуска теста создает исполняемый профиль, в котором показано, сколько раз в программе выполняется каждый оператор.
7. Имитатор. Существует несколько типов имитаторов. Целевые имитаторы моделируют машину, на которой будет выполняться программа. Имитатор пользовательского интерфейса — это программа, управляемая сценариями, которая моделирует взаимодействия с интерфейсом пользователя. Имитатор ввода/вывода генерирует последовательности повторяющихся транзакций [4,5].

Методика и способы  тестирования программных компонент и комплексов. Понятие фикстуры, и инструментов для тестирования

Рисунок 6. Инструментальные средства тестирования

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

Для создания полного комплекса инструментального средства тестирования, как правило, требуется много сил и времени. Весь набор инструментальных средств, показанных на рис. 6, используется только при тестировании больших систем. Для таких систем полная стоимость тестирования может достигать 50% от всей стоимости разработки системы. Вот почему выгодно инвестировать разработку высококачественных и производительных CASE-средств тестирования [4, 5, 6]

Примечание

фикстуры (англ. fixtures) - это важная составляющая тестирования. Их основная задача заключается в подготовке окружения с заранее фиксированным/известным состоянием для гарантии повторяемости процесса тестирования. Одной из наиболее трудозатратных частей при написании тестов является написание кода для настройки тестового окружения в известное состояние, а затем возврат его в исходное состояние, когда тест будет завершен. Это известное состояние называется фикстурой теста. Есть несколько веских причин для совместного использования фикстур между тестами, но в большинстве случаев эта необходимость связана с неразрешенной проблемой проектирования. Фикстуры - это по сути тестовые данные. Они нужны для unit- или поведенеского тестирования. Это могут быть как данные в базе, так и обычные файлы (обычно 2 варианта, до и после обработки так скажем). Каждый раз когда запускаются тесты, эти данные используются для установления начального состояния системы, что бы тесты всегда выполнялись предсказуемо. Для функционального тестирования (тестрирование контроллеров, интаграционных тестов) фикстуры не применяются, хотя суть там так же сходна. Однако, тут мнение расходится. Одни говорят что при функциональных тестах нельзя использовать даже моки, то есть система в процессе выполнения тестов полностью создает то состояние которое необходимо для других тестов. Например последовательное выполнение тестов на добавление статьи и ее просмотр. Другие же предпочитают для каждого тесткейса выставлять состояние с нуля. По сути это схоже с использованием фикстур, но реализация различается. У вас есть некое api для заполнения данными (скажем метод добавляющий пользователя), и перед выполнением тест-кейса происходит ресет данных и заполнение их новыми. Плюсы так же есть - можно распаралелить выполнение тестов.

Литература:
1. Соммервилл И. Инженерия программного обеспечения / пер. с англ. Минько А. А., Момотюк А. А.,Сингаевская Г. И. — М.: ВИЛЬЯМС, 2002. — 624 с., ил.
2. Тестирование программ /Липаев В. В. — М.: Радио и связь, 1986. — 437 с.
3. Брауде Э., Технология разработки программного обеспечения / пер. с англ. — Спб.: ПИТЕР, 2004. — 655 с., ил.
4. Орлов С., Технологии разработки программного обеспечения /Орлов С. А. — Спб.: ПИТЕР, 2002. —464 с., ил.
5. Липаев В., Надежность программных средств. — М.: СИНТЕГ, 1998. — 358 с.
6. Вигерс К., Разработка требований к программному обеспечению / пер. с англ.. — М.: «Русская Редакция», 2004. — 576 с., ил.

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

создано: 2018-02-02
обновлено: 2021-03-13
132265



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


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

Надёжность программного обеспечения

Термины: Надёжность программного обеспечения