Правильные файлы о тестировании
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"
|
||||
Reference in New Issue
Block a user