Правильные файлы о тестировании
This commit is contained in:
46
Report/includes/testing-export/ch05-export-labels.typ
Normal file
46
Report/includes/testing-export/ch05-export-labels.typ
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
// Метки приложения В: микро-figure в нулевом блоке (без разрыва страницы) + фиксированный текст ссылок.
|
||||||
|
#box(width: 0pt, height: 0pt, clip: true)[
|
||||||
|
#figure(
|
||||||
|
box(width: 0pt, height: 0pt)[
|
||||||
|
#image("../../images/fig_05_local_vaults.jpg", width: 1pt, height: 1pt)
|
||||||
|
],
|
||||||
|
caption: none,
|
||||||
|
) <fig-05>
|
||||||
|
#figure(
|
||||||
|
box(width: 0pt, height: 0pt)[
|
||||||
|
#image("../../images/fig_06_encrypt_dialog.jpg", width: 1pt, height: 1pt)
|
||||||
|
],
|
||||||
|
caption: none,
|
||||||
|
) <fig-06>
|
||||||
|
#figure(
|
||||||
|
box(width: 0pt, height: 0pt)[
|
||||||
|
#image("../../images/fig_07_open_close_dialog.jpg", width: 1pt, height: 1pt)
|
||||||
|
],
|
||||||
|
caption: none,
|
||||||
|
) <fig-07>
|
||||||
|
#figure(
|
||||||
|
box(width: 0pt, height: 0pt)[
|
||||||
|
#image("../../images/fig_10_yandex_oauth.jpg", width: 1pt, height: 1pt)
|
||||||
|
],
|
||||||
|
caption: none,
|
||||||
|
) <fig-10>
|
||||||
|
#figure(
|
||||||
|
box(width: 0pt, height: 0pt)[
|
||||||
|
#image("../../images/fig_33_storage_secrets_2fa.jpg", width: 1pt, height: 1pt)
|
||||||
|
],
|
||||||
|
caption: none,
|
||||||
|
) <fig-33>
|
||||||
|
#figure(
|
||||||
|
box(width: 0pt, height: 0pt)[
|
||||||
|
#image("../../images/fig_34_2fa_single_token.jpg", width: 1pt, height: 1pt)
|
||||||
|
],
|
||||||
|
caption: none,
|
||||||
|
) <fig-34>
|
||||||
|
]
|
||||||
|
|
||||||
|
#show ref.where(target: label("fig-05")): [рис. 5]
|
||||||
|
#show ref.where(target: label("fig-06")): [рис. 6]
|
||||||
|
#show ref.where(target: label("fig-07")): [рис. 7]
|
||||||
|
#show ref.where(target: label("fig-10")): [рис. 10]
|
||||||
|
#show ref.where(target: label("fig-33")): [рис. 33]
|
||||||
|
#show ref.where(target: label("fig-34")): [рис. 34]
|
||||||
78
Report/includes/testing-export/requirements.typ
Normal file
78
Report/includes/testing-export/requirements.typ
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
// Файл 3 для загрузки: требования (предметная область + сравнение аналогов → ФР/НФР).
|
||||||
|
#import "../common.typ": pz-fig, pz-table
|
||||||
|
|
||||||
|
= Требования к приложению Wallenc
|
||||||
|
|
||||||
|
== Анализ предметной области (выдержка)
|
||||||
|
|
||||||
|
В рамках анализа предметной области рассмотрены подходы к хранению чувствительных данных в мобильных приложениях и облачных хранилищах. Выделены требования: конфиденциальность при хранении и передаче; отсутствие необходимости доверять инфраструктуре хранилища; устойчивость к компрометации удалённого провайдера; разделение логики хранения и криптографической защиты; удобные сценарии создания хранилища, шифрования, открытия и работы с содержимым.
|
||||||
|
|
||||||
|
Сформирован вывод о приоритете клиентских криптографических механизмов, унифицированного доступа к разным типам хранилищ и архитектуры с чётким разделением слоёв.
|
||||||
|
|
||||||
|
== Разработка требований к программному продукту
|
||||||
|
|
||||||
|
=== Назначение и цели создания системы
|
||||||
|
|
||||||
|
*Назначение* системы Wallenc — предоставление пользователю мобильного клиента для работы с иерархией *VaultsManager → vault → storage → файлы*: один `LocalVault` на устройстве, удалённые vault по OAuth; внутри vault пользователь создаёт и управляет *storage*; шифрование (`StorageEncryptionInfo`, `Encryptor`) применяется к storage, а не к vault.
|
||||||
|
|
||||||
|
*Цели создания*: обеспечить единую модель vault и storage; минимизировать доверие к провайдеру; поддержать расширение списка провайдеров через адаптеры; сохранить служебные метаданные в локальной БД без хранения пользовательского контента в открытом виде.
|
||||||
|
|
||||||
|
=== Функциональные требования
|
||||||
|
|
||||||
|
Функциональные требования сведены в таблице @tbl-req-export.
|
||||||
|
|
||||||
|
#pz-table(
|
||||||
|
[Свод функциональных требований],
|
||||||
|
2,
|
||||||
|
table.header([Код], [Требование]),
|
||||||
|
[ФР-1], [Создание, просмотр, переименование и удаление storage в локальном vault (LocalVault — один на устройстве)],
|
||||||
|
[ФР-2], [Включение шифрования storage, проверка ключа, открытие и закрытие зашифрованного представления],
|
||||||
|
[ФР-3], [Просмотр и операции с файлами внутри storage; текстовые секреты и 2FA],
|
||||||
|
[ФР-4], [OAuth-авторизация (Яндекс), регистрация удалённых vault и листинг их storage],
|
||||||
|
[ФР-5], [Синхронизация: группы хранилищ, журнал коммитов, фоновый Worker без передачи ключей],
|
||||||
|
[ФР-6], [Очередь фоновых задач: шифрование, синхронизация, отображение прогресса],
|
||||||
|
) <tbl-req-export>
|
||||||
|
|
||||||
|
==== Управление storage в локальном vault
|
||||||
|
|
||||||
|
Пользователь создаёт storage, просматривает список, переименовывает и удаляет их в единственном `LocalVault`. Служебные каталоги и системные пути не отображаются в пользовательском представлении.
|
||||||
|
|
||||||
|
==== Шифрование и открытие storage
|
||||||
|
|
||||||
|
При включении шифрования формируются параметры `StorageEncryptionInfo`; открытие выполняется только после успешной проверки ключа. Повторное шифрование одного storage до завершения предыдущей операции блокируется.
|
||||||
|
|
||||||
|
==== Работа с содержимым storage
|
||||||
|
|
||||||
|
Операции чтения и записи выполняются через единый интерфейс файлового доступа независимо от типа хранилища. Внутри открытого storage доступны текстовые секреты и генерация TOTP для 2FA.
|
||||||
|
|
||||||
|
==== Удалённые хранилища и авторизация во внешних провайдерах
|
||||||
|
|
||||||
|
Реализован поток OAuth 2.0 для Яндекса.
|
||||||
|
|
||||||
|
==== Синхронизация зашифрованных данных
|
||||||
|
|
||||||
|
Спроектирован механизм фоновой синхронизации: в Room хранятся записи с UUID хранилищ; по таймеру запускается сервис, сравнивающий истории коммитов локального и удалённого представления без передачи ключей на сервер провайдера.
|
||||||
|
|
||||||
|
=== Нефункциональные требования
|
||||||
|
|
||||||
|
К системе предъявляются требования по производительности (асинхронные операции на Coroutines), безопасности (AES на клиенте, минимизация утечек через имена путей), расширяемости (модульная структура Gradle) и устойчивости к гонкам при длительных операциях шифрования.
|
||||||
|
|
||||||
|
=== Требования к программно-аппаратной платформе
|
||||||
|
|
||||||
|
Минимальная платформа — Android с поддержкой Jetpack Compose; для OAuth и удалённых операций требуется сетевое подключение. Объём оперативной памяти должен быть достаточен для фоновых задач шифрования и Room.
|
||||||
|
|
||||||
|
== Сравнение аналогов (обоснование требований)
|
||||||
|
|
||||||
|
#pz-table(
|
||||||
|
[Сравнительная оценка аналогов],
|
||||||
|
6,
|
||||||
|
table.header([Критерий], [Secure Folder], [Proton], [Bitwarden], [Cryptomator], [Wallenc]),
|
||||||
|
[Собственный backend приложения], [—], [+], [+/−], [—], [—],
|
||||||
|
[E2E / клиентское шифрование], [+/−], [+], [+], [+], [+],
|
||||||
|
[Файловый vault], [+], [+], [−], [+], [+],
|
||||||
|
[OAuth внешнего провайдера], [−], [+/−], [+/−], [+/−], [+],
|
||||||
|
[Переносимость провайдеров], [−], [−], [+/−], [+], [+],
|
||||||
|
[Unit-тесты без сервера], [н/д], [н/д], [+/−], [+/−], [+ (68)],
|
||||||
|
) <tbl-analog-export>
|
||||||
|
|
||||||
|
По итогам сравнения аналогов сформированы функциональные требования ФР-1…ФР-6 и нефункциональные ограничения, отражённые в таблице @tbl-req-export.
|
||||||
8
Report/includes/testing-export/unit-tests.typ
Normal file
8
Report/includes/testing-export/unit-tests.typ
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
// Файл 4 для загрузки: наборы тестов, реестр и листинги src/test, src/androidTest.
|
||||||
|
#import "../common.typ": pz-fig, pz-table
|
||||||
|
|
||||||
|
= Код модулей автоматизированного тестирования и наборы тестов
|
||||||
|
|
||||||
|
#include "../testing/02-test-sets.typ"
|
||||||
|
|
||||||
|
#include "../testing/03-automation.typ"
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#import "_document.typ": testing-export-doc
|
|
||||||
#show: testing-export-doc.with(
|
|
||||||
title: [План тестирования],
|
|
||||||
criterion: [Критерий 1.1 — наличие плана тестирования],
|
|
||||||
)
|
|
||||||
|
|
||||||
= Тестирование программного обеспечения
|
|
||||||
|
|
||||||
#include "../includes/testing/_intro.typ"
|
|
||||||
|
|
||||||
#include "../includes/testing/01-plan.typ"
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#import "_document.typ": testing-export-doc
|
|
||||||
#show: testing-export-doc.with(
|
|
||||||
title: [Наборы тестов],
|
|
||||||
criterion: [Критерий 1.2 — наличие наборов тестов],
|
|
||||||
)
|
|
||||||
|
|
||||||
= Тестирование программного обеспечения
|
|
||||||
|
|
||||||
#include "../includes/testing/_intro.typ"
|
|
||||||
|
|
||||||
#include "../includes/testing/02-test-sets.typ"
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#import "_document.typ": testing-export-doc
|
|
||||||
#show: testing-export-doc.with(
|
|
||||||
title: [Автоматизированное тестирование],
|
|
||||||
criterion: [Критерий 1.3 — код модулей автоматизированного тестирования],
|
|
||||||
)
|
|
||||||
|
|
||||||
= Тестирование программного обеспечения
|
|
||||||
|
|
||||||
#include "../includes/testing/_intro.typ"
|
|
||||||
|
|
||||||
#include "../includes/testing/03-automation.typ"
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#import "_document.typ": testing-export-doc
|
|
||||||
#show: testing-export-doc.with(
|
|
||||||
title: [Отчёт о проведении тестирования],
|
|
||||||
criterion: [Критерий 1.4 — отчёт о проведении тестирования],
|
|
||||||
)
|
|
||||||
|
|
||||||
= Тестирование программного обеспечения
|
|
||||||
|
|
||||||
#include "../includes/testing/_intro.typ"
|
|
||||||
|
|
||||||
#include "../includes/testing/04-report.typ"
|
|
||||||
@@ -1,15 +1,13 @@
|
|||||||
# Экспорт раздела «Тестирование» (ПЗ ВКР Wallenc)
|
# Экспорт материалов по тестированию (ПЗ ВКР Wallenc)
|
||||||
|
|
||||||
Каталог содержит **4 автономных документа** для загрузки в систему оценивания (критерии 1.1–1.4). Исходники — фрагменты Typst из гл. 5 пояснительной записки (`Report/includes/testing/`).
|
Каталог содержит **3 PDF** для загрузки в систему оценивания. **ТЗ на ПО (п. 2)** оформляется и загружается отдельно (производственная практика).
|
||||||
|
|
||||||
## Файлы для загрузки
|
| Пункт задания | PDF для загрузки | Исходник | Содержание |
|
||||||
|
|---------------|------------------|----------|------------|
|
||||||
| Исходник (.typ) | PDF для загрузки | Критерий | Содержание |
|
| **1** — раздел ПЗ по тестированию ПО | `КТбо4-9_ПытковРЕ_1_Раздел_ПЗ_Тестирование_ПО.pdf` | `export_01_testing_section.typ` | Глава 5 пояснительной записки (`includes/ch05.typ`) |
|
||||||
|-----------------|------------------|----------|------------|
|
| **2** — ТЗ на разрабатываемое ПО | *(не в этом каталоге)* | — | Документ практики, загрузить свой PDF |
|
||||||
| `01_plan_testing.typ` | `КТбо4-9_ПытковРЕ_1.1_План_тестирования.pdf` | **1.1** | Цели, уровни, матрица T-1…T-12, критерии начала/окончания, среда |
|
| **3** — требования к приложению | `КТбо4-9_ПытковРЕ_3_Требования_к_приложению.pdf` | `export_03_requirements.typ` | ФР/НФР, выдержка из гл. 1, таблица сравнения аналогов |
|
||||||
| `02_test_sets.typ` | `КТбо4-9_ПытковРЕ_1.2_Наборы_тестов.pdf` | **1.2** | ФР-1…ФР-6, матрица сценариев, трассировка ФР→тесты, реестр 68 unit-тестов, androidTest |
|
| **4** — код unit-тестов, наборы тестов | `КТбо4-9_ПытковРЕ_4_Код_и_наборы_тестов.pdf` | `export_04_unit_tests.typ` | Матрица T-1…T-12, трассировка ФР→тесты, реестр 68 тестов, листинги `src/test` и `src/androidTest` |
|
||||||
| `03_automation_code.typ` | `КТбо4-9_ПытковРЕ_1.3_Автоматизированное_тестирование.pdf` | **1.3** | Описание модулей, **листинги** `src/test` и `src/androidTest` (как в прил. А), скриншоты Gradle |
|
|
||||||
| `04_test_report.typ` | `КТбо4-9_ПытковРЕ_1.4_Отчёт_о_проведении_тестирования.pdf` | **1.4** | Протокол ручных T-7…T-12, сводка PASSED, трассировка, вывод |
|
|
||||||
|
|
||||||
## Сборка
|
## Сборка
|
||||||
|
|
||||||
@@ -18,22 +16,14 @@ cd Report/testing-export/scripts
|
|||||||
./build.sh
|
./build.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Скрипт вызывает `gen_test_listings.py` (листинги в `listings/generated-tests/`) и собирает четыре PDF.
|
Скрипт вызывает `gen_test_listings.py` (листинги в `listings/generated-tests/`) и собирает три PDF.
|
||||||
|
|
||||||
Листинги автотестов генерируются отдельно от приложения А:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd Report
|
|
||||||
python3 scripts/gen_test_listings.py
|
|
||||||
```
|
|
||||||
|
|
||||||
Отдельно:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd Report
|
|
||||||
typst compile --root .. testing-export/01_plan_testing.typ
|
|
||||||
```
|
|
||||||
|
|
||||||
## Связь с полной ПЗ
|
## Связь с полной ПЗ
|
||||||
|
|
||||||
Полная глава 5 подключает те же фрагменты через `Report/includes/ch05.typ`. При правке тестирования меняйте файлы в `includes/testing/`, затем пересоберите ПЗ и экспорт.
|
- Глава 5: `Report/includes/ch05.typ` и фрагменты `Report/includes/testing/`.
|
||||||
|
- Требования: `Report/includes/ch01.typ` (экспорт — `includes/testing-export/requirements.typ`).
|
||||||
|
- При правке тестирования меняйте `includes/testing/` и `ch05.typ`, затем пересоберите ПЗ и `./build.sh`.
|
||||||
|
|
||||||
|
## Устаревшие файлы
|
||||||
|
|
||||||
|
Ранее собирались четыре PDF по критериям 1.1–1.4 (`01_plan_testing` … `04_test_report`) — это **не** соответствует формулировке задания на загрузку; исходники удалены.
|
||||||
|
|||||||
9
Report/testing-export/export_01_testing_section.typ
Normal file
9
Report/testing-export/export_01_testing_section.typ
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#import "_document.typ": testing-export-doc
|
||||||
|
|
||||||
|
#show: testing-export-doc.with(
|
||||||
|
title: [Тестирование программного обеспечения],
|
||||||
|
criterion: [Файл 1 — раздел пояснительной записки по тестированию ПО],
|
||||||
|
)
|
||||||
|
|
||||||
|
#include "../includes/testing-export/ch05-export-labels.typ"
|
||||||
|
#include "../includes/ch05.typ"
|
||||||
8
Report/testing-export/export_03_requirements.typ
Normal file
8
Report/testing-export/export_03_requirements.typ
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#import "_document.typ": testing-export-doc
|
||||||
|
|
||||||
|
#show: testing-export-doc.with(
|
||||||
|
title: [Требования к приложению],
|
||||||
|
criterion: [Файл 3 — требования к приложению (анализ предметной области и аналогов)],
|
||||||
|
)
|
||||||
|
|
||||||
|
#include "../includes/testing-export/requirements.typ"
|
||||||
8
Report/testing-export/export_04_unit_tests.typ
Normal file
8
Report/testing-export/export_04_unit_tests.typ
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#import "_document.typ": testing-export-doc
|
||||||
|
|
||||||
|
#show: testing-export-doc.with(
|
||||||
|
title: [Модульное тестирование и наборы тестов],
|
||||||
|
criterion: [Файл 4 — код модулей unit-тестирования, наборы тестов],
|
||||||
|
)
|
||||||
|
|
||||||
|
#include "../includes/testing-export/unit-tests.typ"
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Сборка четырёх PDF для загрузки по критериям тестирования.
|
# Три PDF для загрузки по заданию (п. 1, 3, 4). ТЗ (п. 2) — отдельно у студента.
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
REPORT="$(cd "$(dirname "$0")/../.." && pwd)"
|
REPORT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||||
@@ -9,16 +9,14 @@ cd "$REPORT"
|
|||||||
python3 scripts/gen_test_listings.py
|
python3 scripts/gen_test_listings.py
|
||||||
|
|
||||||
stems=(
|
stems=(
|
||||||
01_plan_testing
|
export_01_testing_section
|
||||||
02_test_sets
|
export_03_requirements
|
||||||
03_automation_code
|
export_04_unit_tests
|
||||||
04_test_report
|
|
||||||
)
|
)
|
||||||
pdfs=(
|
pdfs=(
|
||||||
"КТбо4-9_ПытковРЕ_1.1_План_тестирования.pdf"
|
"КТбо4-9_ПытковРЕ_1_Раздел_ПЗ_Тестирование_ПО.pdf"
|
||||||
"КТбо4-9_ПытковРЕ_1.2_Наборы_тестов.pdf"
|
"КТбо4-9_ПытковРЕ_3_Требования_к_приложению.pdf"
|
||||||
"КТбо4-9_ПытковРЕ_1.3_Автоматизированное_тестирование.pdf"
|
"КТбо4-9_ПытковРЕ_4_Код_и_наборы_тестов.pdf"
|
||||||
"КТбо4-9_ПытковРЕ_1.4_Отчёт_о_проведении_тестирования.pdf"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
for i in "${!stems[@]}"; do
|
for i in "${!stems[@]}"; do
|
||||||
@@ -28,5 +26,5 @@ for i in "${!stems[@]}"; do
|
|||||||
typst compile --root .. "$EXPORT/$stem.typ" "$EXPORT/$pdf"
|
typst compile --root .. "$EXPORT/$stem.typ" "$EXPORT/$pdf"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Done:"
|
echo "Done (ТЗ — п. 2 — загружается отдельно):"
|
||||||
printf ' %s\n' "${pdfs[@]}"
|
printf ' %s\n' "${pdfs[@]}"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
20606
Report/testing-export/КТбо4-9_ПытковРЕ_1_Раздел_ПЗ_Тестирование_ПО.pdf
Normal file
20606
Report/testing-export/КТбо4-9_ПытковРЕ_1_Раздел_ПЗ_Тестирование_ПО.pdf
Normal file
File diff suppressed because one or more lines are too long
3689
Report/testing-export/КТбо4-9_ПытковРЕ_3_Требования_к_приложению.pdf
Normal file
3689
Report/testing-export/КТбо4-9_ПытковРЕ_3_Требования_к_приложению.pdf
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user