Экспертиза процесса разработки программного обеспечения

Судебная экспертиза исходного кода на JavaScript

Исследуем приложения на JavaScript — React, Vue, Angular, Node.js: соответствует ли сделанное техническому заданию, почему ломается интерфейс и расходятся суммы, что скрыто в собранной сборке.

Ориентир по стоимости экспертизы
от 100 000 ₽
Ориентир по сроку экспертизы
от 10 рабочих дней
  • Судебные экспертизы
  • Внесудебные исследования
  • Рецензирование заключений
  • Консультации и справки
01 Проверим компетенцию

До оплаты определим, относится ли задача к выбранному виду исследования.

02 Поможем подготовиться

Уточним вопросы и перечень материалов — готовый комплект не обязателен.

03 Работаем с регионами

Принимаем задачи из России, Казахстана и Беларуси. До назначения часть материалов можно передать электронно; по назначенной экспертизе порядок определяет назначивший орган.

04 Сопровождаем результат

Разъясняем методику и выводы, отвечаем на вопросы суда в пределах компетенции эксперта.

О направлении

Подробно о задачах, объектах и методиках

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

Содержание страницы
  1. Какие споры разбираем
  2. Чем это отличается от экспертизы сайта
  3. Две среды исполнения — и два разных объекта
  4. Сборка, минификация и карты исходного кода
  5. Что может установить эксперт
  6. Как проверяют соответствие техническому заданию
  7. Если передан только собранный бандл
  8. Какие объекты исследуются
  9. Что сохранить прямо сейчас
  10. Как передать материалы и не раскрыть лишнего
  11. Как проводится исследование
  12. Примеры вопросов на экспертизу
  13. Форматы работы и результат
  14. От чего зависят стоимость и срок

Спор с подрядчиком об интернет-магазине, личном кабинете или портале часто сводится к соответствию результата техническому заданию: что заказали, что передали и можно ли это принять. В проектах на JavaScript один язык может использоваться в двух средах — в браузере посетителя и на сервере под управлением Node.js. Браузер получает доступные ему файлы приложения, поэтому их копию можно сохранить до обращения в суд; исходные тексты при этом могут остаться у разработчика. Серверная часть доступна лишь тому, у кого есть законные полномочия и технический доступ. Экспертиза исходного кода на JavaScript — специализированное направление экспертизы процесса разработки программного обеспечения. Форма результата зависит от процедуры: судебный эксперт готовит заключение по назначению уполномоченного органа, а при внесудебном исследовании заказчик получает документ специалиста, который можно представить суду.

Если спор уже начался, сохраните то, что исчезает первым. Браузерную часть зафиксируйте как можно скорее: она меняется при обновлении сайта, а прежние сборки могут не сохраниться. Как снять копию и оценить её доказательственное значение — ниже, в разделе «Что сохранить прямо сейчас». Не переписывайте историю зафиксированных изменений в репозитории, не удаляйте ветки и метки и не переустанавливайте пакеты на спорной площадке до её фиксации.

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

Какие споры разбираем

С такими спорами приходят, когда разногласия касаются того, что можно проверить, — состояния приложения и зафиксированного хода работ, а не только толкования договора. Определите заранее, о какой версии, площадке и периоде речь: без этого исследование теряет предмет.

Чаще всего это такие ситуации:

  • подрядчик сдал интернет-магазин, личный кабинет или портал на React, Vue или Angular, а вы считаете, что предусмотренное техническим заданием не выполнено;
  • стороны спорят, какие требования реализованы, какие выполнены иначе, а какие не работают в описанных условиях;
  • интерфейс ломается в конкретном браузере или на мобильном устройстве, и это приводится как довод о несоответствии;
  • в корзине, счёте или отчёте расходятся суммы — копейки на позицию, заметные деньги на обороте;
  • серверная часть на Node.js падает под нагрузкой или теряет данные при обмене с платёжной, учётной или партнёрской системой;
  • фоновые задачи не отработали: письма не ушли, заказы не выгрузились, статусы разошлись;
  • подрядчик ушёл, а из переданного комплекта нельзя собрать приложение либо комплект неполон;
  • нужно проверить, не использован ли чужой код и на каких условиях подключены пакеты из открытых хранилищ.

Если ваш вопрос звучит иначе, точнее начать с соседнего исследования: о качестве кода — экспертиза качества исходного кода, о заимствовании — сравнение исходного кода, о деньгах и объёме — экспертиза объёма и стоимости выполненных работ. Если спорная система написана на другом языке, смотрите экспертизу кода на Java или на Python.

Не знаете, на каком языке написана ваша система? Выяснить несложно: язык обычно назван в техническом задании или в актах, его знает подрядчик, а если спор о сайте — браузерная часть почти наверняка на JavaScript, даже когда серверная написана на другом языке. Если ясности нет, позвоните: направление определим сами и без оплаты, по адресу сайта и описанию спора.

Чем это отличается от экспертизы сайта

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

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

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

Две среды исполнения — и два разных объекта

Это и есть главное отличие. Браузерная и серверная части живут по разным правилам, и материалы для них собирают по-разному.

Разница проявляется в трёх вещах:

  • Доступность кода. Сайт отдаёт браузеру клиентские файлы: их можно сохранить вместе с адресом, датой и контрольной суммой. Серверную часть на Node.js исследуют только при законном основании и предоставленном доступе.
  • Воспроизводимость. Серверное приложение проверяют на контролируемом стенде с зафиксированным окружением. Поведение в браузере зависит от устройства, версии браузера, расширений и настроек посетителя, поэтому сообщение «не работает» проверяют в названных условиях и фиксируют их.
  • Следы. Серверные журналы существуют лишь при настроенном протоколировании и могут быть неполными. В браузере остаются текущие данные консоли и сети, а исторические сведения доступны, если заранее была подключена служба сбора ошибок вроде Sentry. Поэтому выводы о клиентской части сопоставляют с кодом, воспроизведением и сохранившимися записями.

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

Сборка, минификация и карты исходного кода

В рабочей версии браузер обычно получает не те файлы, которые редактировал разработчик. Исходные тексты проходят через Webpack, Vite, esbuild или другой инструмент: он собирает модули, преобразует код, а при включённой минификации сокращает имена и удаляет лишние пробелы. Результат называют бандлом. Он должен сохранять предусмотренное поведение программы, но ошибки и различия настроек сборки могут его изменить.

Часть проектов пишут на TypeScript — надстройке над JavaScript с проверкой типов, — и тогда браузеру передают результат компиляции. Договорной комплект при этом должен содержать исходные тексты, если это предусмотрено условиями передачи. Сопоставляя переданное с опубликованным, учитывают этап сборки между ними.

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

Ссылку на карту ищут рядом со сборкой, в служебной пометке самого файла и в HTTP-заголовке ответа. Представленную карту не принимают на веру: её сопоставляют со сборкой по отображению позиций и объявленным именам файлов, а для обоих объектов фиксируют адрес, дату получения и контрольные суммы. Минификация делает файл компактнее; карта не обращает это преобразование, а связывает полученный код с указанными исходниками. Обфускация намеренно затрудняет чтение: строки могут кодироваться, поток управления — усложняться, а имена — заменяться. Степень такого преобразования фиксируют как обстоятельство, влияющее на определённость выводов. Если карты нет, исследуют сам бандл: в зависимости от способа сборки в нём можно выявить модули, признаки библиотек и исполняемую логику, но нельзя автоматически восстановить авторское оформление и имена. Наличие, вид и происхождение карты указывают отдельно.

Что может установить эксперт

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

При достаточных материалах вы получите ответ о следующем:

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

Есть и то, чего ждать не стоит. «Сайт работает медленно» или «интерфейс сломан» — не проверяемые утверждения, пока не названы критерий и условия: операция, браузер, устройство и пункт требований. Эксперт отделяет собственное воспроизведение от представленных записей и оценивает последние с учётом их происхождения и условий получения. Отсутствие записи в журнале не означает, что события не было: сначала выясняют, что именно протоколировала система; браузер же обычно не сохраняет долговременный журнал прошлых сеансов.

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

Как проверяют соответствие техническому заданию

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

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

  • Не реализовано — в полном исследованном контуре не выявлен механизм, который обеспечивает выполнение требования в коде, настройках, зависимостях или связанных компонентах, а проверка не подтверждает требуемого поведения. Такой вывод делают только после оценки полноты объекта; одной браузерной копии для этого недостаточно. Приложение может подгружать части по мере надобности, а у каркасов вроде Next.js и Nuxt часть логики исполняется на сервере. Пока эти части системы не проверены, результат относят к четвёртому исходу.
  • Реализовано иначе — механизм есть, но работает не так: другой сценарий, другой состав полей, другое поведение при ошибке.
  • Реализовано, но не работает в описанных условиях — для браузерной части это один из распространённых исходов: функция работает в одном браузере и отказывает в другом, на телефоне или при медленной сети; значение имеет то, были ли эти условия заданы.
  • Проверить на представленных объектах невозможно — критерий есть, а объекта нет: не передана серверная часть, не сохранена сборка спорного периода, утрачены журналы за нужные даты. Это самостоятельный исход, а не разновидность первого: отсутствие материала не равно отсутствию кода, и эксперт называет, чего именно не хватило для ответа.

Отдельно устанавливают, как менялся объём работ: сведения из дополнительных соглашений, переписки, задач и макетов сопоставляют с версиями приложения и выполненными изменениями. Эксперт описывает технические обстоятельства, а содержание договорённостей и юридическую силу документов определяет суд. Если спор касается сайта как опубликованного ресурса, а не работ по его созданию, проводят экспертизу сайта на соответствие техническому заданию.

Если передан только собранный бандл

Обычная ситуация в спорах с ушедшим подрядчиком: доступ к сайту есть, а исходных текстов нет. Исследование возможно, просто круг вопросов другой.

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

Восстановленный из бандла текст — реконструкция, а не исходный код автора; переименованные переменные без карты обычно не получают исходных имён. Сохранение комментариев зависит от инструмента и настроек минификации: могут остаться лицензионные уведомления или иные специально выделенные блоки. Поэтому отсутствие авторского комментария в бандле не доказывает, что его не было в исходных текстах. Эти ограничения указывают в заключении.

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

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

Какие объекты исследуются

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

Код, сборка и опубликованное приложение

Эти материалы собирают вместе: по отдельности они отвечают на меньшее число вопросов, а сопоставление исходных текстов с тем, что отдаётся посетителю, и есть основная проверка.

В группу входят:

  • зеркальная копия каждого репозитория со всеми доступными ветками, метками и достижимой историей изменений, а при споре о переписывании истории — дополнительные серверные журналы или согласованный снимок хранилища;
  • исходные тексты на JavaScript или TypeScript, файлы сборщика и настройки компиляции;
  • описание зависимостей package.json и файл блокировки — package-lock.json, yarn.lock или pnpm-lock.yaml, — описывающий разрешённое дерево пакетов; фактически установленный состав проверяют отдельно;
  • сохранённая браузерная сборка спорного периода вместе с картами исходного кода, если они публиковались;
  • версия Node.js, образы контейнеров, установочные комплекты и их контрольные суммы.

Настройки, данные и следы работы

Вторая группа помогает установить, почему одна и та же версия ведёт себя по-разному и что происходило с данными.

В неё входят:

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

Отчёты и измерения другой стороны рассматривают как объекты с проверяемым происхождением. Текущие показатели по возможности получают повторно на переданной копии и описывают условия измерения; результаты нового опыта не подменяют исторические данные о спорном периоде.

Что сохранить прямо сейчас

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

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

Порядок такой:

  • на согласованной копии пройдите спорные сценарии — каталог, корзину, шаги оформления заказа до подтверждения, свой личный кабинет. На рабочей системе ограничьтесь разрешёнными действиями и учитывайте, что даже корзина или вход могут создать серверные записи. Настоящий заказ не оформляйте;
  • сохраните страницы, сетевой журнал с ответами и заголовками, снимки экрана, загруженные файлы сборки и карты исходного кода; способ фиксации и состав полученных объектов опишите;
  • для каждого файла запишите адрес, дату и время с часовым поясом и посчитайте контрольную сумму — строку, по которой позднее проверяют соответствие файла записанному значению. Сама по себе она не удостоверяет дату и источник получения. В Windows используют команду Get-FileHash в PowerShell, на macOS и Linux — shasum -a 256 в терминале; результат сохраните рядом с файлом;
  • сложите всё в один архив, сохраните его без изменений, а для просмотра используйте рабочую копию.

Самостоятельно снятая копия требует проверки происхождения: вторая сторона может оспорить способ и время получения или заявить об изменении файлов. Это не делает копию бесполезной, но снижает определённость выводов. Если спорная сборка — ключевой объект, фиксацию поручают специалисту, который описывает порядок, время и условия получения, — это фиксация содержимого интернет-страниц. Возможность нотариального обеспечения доказательств зависит от обстоятельств и процедуры; после возбуждения дела доступно также обеспечение доказательств судом. Браузерную часть мы можем зафиксировать по вашему поручению до назначения судебной экспертизы; после назначения объекты предоставляют через назначивший орган.

Остальное требует доступа и полномочий, а часть действий сама меняет спорную систему:

  • снимите образ или полную копию серверной площадки вместе со списком установленных пакетов — но только имея на это полномочия и согласованный план: копирование, остановка и перезапуск работающей системы сами меняют часть наблюдаемых данных;
  • выгрузите журналы сервера, сведения о фоновых задачах и данные службы сбора ошибок за исследуемый период — с реплики или из готовой копии и в согласованное окно, а не с нагруженного контура в час пик;
  • сохраните резервные копии базы на нужные даты: без состояния «до» объём утраты обычно установить нельзя;
  • сохраните входные данные и полученный результат, о которых идёт спор, вместе с датой и версией приложения;
  • сделайте зеркальную копию доступных ссылок каждого репозитория, а не только выгрузку рабочего каталога;
  • запишите, кто, когда и от кого получал материалы и что с ними делали.

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

Как передать материалы и не раскрыть лишнего

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

К передаче подготовьте:

  • цель исследования, проект вопросов, точный период и часовой пояс;
  • исходные тексты или зеркальные копии репозиториев, а если их нет — сохранённую браузерную сборку и сведения о том, откуда и когда она получена;
  • описание зависимостей и файл блокировки версий, версию Node.js;
  • договор, техническое задание, макеты, требования к браузерам, акты и переписку о согласованных изменениях;
  • настройки площадок, схему базы, сценарии её изменения и резервные копии;
  • журналы сервера, сведения о задачах и данные службы сбора ошибок за период;
  • входные данные и результаты спорного расчёта;
  • процессуальный документ, если экспертиза уже назначена.

Почти в каждой группе есть сведения, требующие отдельной защиты. Ключи к платёжным и почтовым сервисам могут находиться в настройках, а по ошибке — и в браузерной сборке. Исходную копию сохраняют неизменной; для передачи готовят производную копию с задокументированной заменой секретов, если это не уничтожает исследуемый признак. Компрометированные ключи отзывают и перевыпускают без неоправданной задержки; спорную конфигурацию по возможности фиксируют заранее либо документируют вынужденное изменение. Историю репозитория ради удаления секретов не переписывают: это уничтожает следы и не отменяет необходимость сменить ключ. В журналах могут оказаться токены, заголовки авторизации и пароли из текстов ошибок; ненужные для исследования поля в производной выгрузке маскируют. Резервные копии базы, заказы и веб-аналитика содержат персональные данные. Для передачи требуется правовое основание, а её состав и период ограничивают целью исследования. Обезличивание выполняют на копии и согласуют с экспертом, чтобы не удалить значимый признак; одной замены имени может быть недостаточно, поскольку человека позволяют узнать адрес, телефон и состав корзины. Платёжные реквизиты без необходимости и надлежащего основания не передают.

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

Как проводится исследование

Исследование начинается с фиксации: описывают полученные объекты, считают контрольные суммы, проверяют целостность и полноту, отмечают недостающее. Если текст восстановлен из сборки, в заключении называют средство, его версию и выполненные действия. Для браузерной части фиксируют адреса и время получения файлов. Затем на отдельном стенде воспроизводят существенные параметры окружения: версию Node.js и пакетного менеджера, дерево зависимостей, настройки сборки, операционную систему и внешние службы — и проверяют спорное поведение.

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

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

Кодовые базы сравнивают в несколько проходов. Библиотеки, сгенерированные файлы, обязательные конструкции каркаса и результат автоформатирования выделяют отдельно и оценивают их происхождение и значение. Затем программы сопоставляют по последовательностям лексем — элементарных единиц текста — и по структуре с учётом переименований; бандлы предварительно приводят к сопоставимому виду. Каждое значимое совпадение проверяют вручную и объясняют. Независимые проекты того же назначения можно использовать для оценки фонового уровня сходства, если их выбор и сопоставимость обоснованы.

Примеры вопросов на экспертизу

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

До назначения экспертизы вы вправе предложить свои формулировки. Назовите объект точно: репозиторий и ветку либо конкретную запись истории, версию приложения, адрес и дату снятия браузерной сборки, площадку, период и часовой пояс, а для ошибки интерфейса — браузер, устройство и сценарий. Разные задачи формулируйте отдельными вопросами. Ниже приведены примеры:

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

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

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

Форматы работы и результат

В документе по коду на JavaScript одного названия репозитория недостаточно. Указывают адрес, дату и время получения каждой браузерной сборки, её контрольную сумму, наличие и вид карт исходного кода, версии сборщика и Node.js, а для ошибки интерфейса — браузер, устройство и сценарий проверки. Затем описывают методы, выполненные действия, полученные данные, проверенные версии причин, ограничения и ответы на вопросы. Таблицы сравнения и снимки экранов приводят так, чтобы другой специалист мог повторить проверку. Заранее установленной силы у документа нет: суд оценивает его вместе с другими доказательствами.

Формат выбирают по стадии спора:

  • Консультация или справка — письменный ответ специалиста по существу вопроса. В отличие от предварительного разбора, это платная работа. В ответе указывают, что можно установить по имеющимся материалам, каких источников не хватает и насколько определённым может быть вывод.
  • Внесудебное исследование проводится по договору со стороной по согласованным техническим вопросам.
  • Судебная экспертиза выполняется по определению суда либо постановлению следователя, дознавателя или иного уполномоченного законом лица.
  • Рецензия проверяет уже готовое заключение — объекты, методы, ограничения и связь результатов с выводами; подробнее на странице рецензирования экспертизы разработки ПО.

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

От чего зависят стоимость и срок

Стоимость и срок зависят прежде всего от трёх обстоятельств. Первое — сколько сред исполнения входит в спор: исследование только браузерной части отличается от исследования связки «браузер плюс Node.js», где сопоставляют данные клиентской и серверной частей. Второе — в каком виде сохранился код: бандл без карт требует отдельного разбора, а обфускация увеличивает объём работы. Третье — сколько условий нужно воспроизвести: каждый указанный браузер, устройство и сценарий проверяют отдельно, поэтому десять сочетаний требуют больше времени, чем одно. Учитываются также зафиксированные версии пакетов, сохранность журналов, число вопросов и необходимость смежных специалистов. Ориентировочная стоимость судебной экспертизы — от 100 000 ₽, срок — от 10 рабочих дней; точные условия определяются после просмотра материалов.

При первом обращении опишите спор, наметьте вопросы и перечислите, что у вас есть. Небольшие доступные копии можно приложить сразу, если вы вправе передать их через форму. Позвоните по номеру 8 (800) 333-24-09 или оставьте заявку — мы проверим, относится ли задача к нашей компетенции, предложим безопасный порядок передачи материалов и скажем, каких данных не хватает для расчёта.

Проведение экспертизы по уголовному делу

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

Согласно постановлению Пленума Верховного Суда Российской Федерации от 21 декабря 2010 г. № 28 «О судебной экспертизе по уголовным делам», негосударственными судебно-экспертными учреждениями признаются некоммерческие организации, созданные на основании Гражданского кодекса Российской Федерации и Федерального закона «О некоммерческих организациях» и ведущие судебно-экспертную деятельность согласно своим уставам.

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

В случаях, перечисленных пунктом 5 постановления № 28, когда экспертизу по уголовному делу назначает суд, ему следует мотивировать в определении или постановлении поручение исследования учреждению либо конкретному лицу. Пункт 5 постановления № 28 связывает выбор негосударственного учреждения с невозможностью провести исследование в государственном учреждении, обслуживающем соответствующую территорию: например, из-за отсутствия нужного специалиста, материально-технической базы или специальных условий, либо с отводом компетентных государственных учреждений. Дополнительно учитываются квалификация эксперта, основания для отвода и действующий перечень экспертиз, выполняемых только государственными судебно-экспертными организациями.

Актуализировано
Форматы работы

Стоимость и сроки

Указан предварительный ориентир. Точный расчёт зависит от вопросов, объёма материалов, количества объектов и необходимости выезда. Срок рассчитываем после получения и проверки необходимого комплекта.

По договору

Внесудебное исследование

от 100 000 ₽
от 10 рабочих дней
точная стоимость будет определена после ознакомления с объектом исследования

Итог — письменный документ с результатами внесудебного исследования. Название документа, порядок его представления и оценка зависят от вида процесса.

Заказать исследование
Проверка готового заключения

Рецензирование

от 80 000 ₽
10 рабочих дней
точная стоимость будет определена после ознакомления с заключением и приложениями

Итог — письменная рецензия на готовое заключение. Она проверяет исходные данные, методы и выводы, но не отменяет заключение и не заменяет новое исследование объекта.

Передать заключение на проверку
Письменный ответ эксперта

Консультация и справка

от 20 000 ₽
2–3 рабочих дня
точная стоимость будет определена после ознакомления с объектом исследования

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

Описать вопрос
Разбор задачи — без оплаты

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

Получить организационный разбор
Организация исследования

Как строится работа над экспертизой

До начала исследования уточним предмет задачи, состав материалов и формат итогового документа.

  1. 01 Организационный разбор

    Проверяем компетенцию и сообщаем, можно ли провести исследование по поставленной задаче.

  2. 02 Вопросы и материалы

    Уточняем вопросы и сообщаем, каких документов или объектов не хватает.

  3. 03 Экспертное исследование

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

  4. 04 Заключение и пояснения

    Передаём результат и при необходимости разъясняем суду применённую методику и выводы.

Выполненные исследования

Практика по этому направлению

Краткие описания выполненных исследований показывают задачи и объекты. В конкретном деле круг вопросов определяет назначивший орган, а вопросы о виновности, принадлежности прав и обоснованности требований разрешает суд.

Все примеры по направлению
Опубликованный пример
Завершена в январе 2025 года

Экспертиза качества поставленной офисной мебели в Москве №165315

Заказчик оспаривал качество офисной мебели по государственному контракту: судебная товароведческая экспертиза проверяла её характеристики, безопасность и износ.

Октябрьский районный суд города Улан-Удэ Республики БурятияДело №2-424/2024
Участники: ,
Открыть описание
Опубликованный пример
Завершена в декабре 2023 года

Компьютерно-техническая экспертиза качества веб-приложения №146684

Заказчик и разработчик спорили о качестве веб-приложения и цене исправлений: компьютерно-техническая экспертиза проверяла работу программы и рассчитывала затраты.

Арбитражный суд Архангельской областиДело №А05-12316/2022
Участники: ООО "Компания ЭКСПЕРТ",
Открыть описание
Опубликованный пример
Завершена в мае 2023 года

Экспертиза исходного кода программ в споре об авторских правах №133852

Разработчики спорили о происхождении клиентской и серверной программ: судебная компьютерно-техническая экспертиза проверяла связь исходного кода и редакций.

Гагаринский районный суд города МосквыДело №02-0033/2023
Участники: АО "СталкерСофт", КоммьюниГейт Инк, КоммьюниГейт Системс САС
Открыть описание
Опубликованный пример
Завершена в августе 2023 года

Экспертиза качества и стоимости разработки программы №133626

Заказчик и разработчик спорили о качестве и стоимости программного продукта: компьютерно-техническая экспертиза устанавливала объём работ, соответствие требованиям и наличие ошибок.

Арбитражный суд Архангельской областиДело №А05-12316/2022
Участники: ООО "Компания ЭКСПЕРТ", ИП Антипин А.В.
Открыть описание
Опубликованный пример
Завершена в ноябре 2022 года

Экспертиза исходного кода коммуникационных программ в Москве №116890

Спор об авторских правах касался происхождения коммуникационного приложения: судебная компьютерно-техническая экспертиза проверяла состав и взаимосвязь программ.

Гагаринский районный суд города МосквыДело №02-0033/2023
Участники: АО "СталкерСофт", КоммьюниГейт Инк
Открыть описание
Опубликованный пример
Завершена в сентябре 2019 года

Экспертиза №74551

Судебная компьютерно-техническая экспертиза разработанного веб-сайта и связанного программного обеспечения.

Открыть описание
В открытом доступе представлена часть выполненных исследований по разным объектам и судебным делам. Сведения, защищённые законом или условиями конфиденциальности, не раскрываются. Чтобы проверить возможность исследования по вашей ситуации, опишите задачу.

Документы организации

Ответы специалистов

Частые вопросы

Практические пояснения о назначении, материалах и использовании экспертного заключения.

Все вопросы по направлению
Когда нужна экспертиза исходного кода на JavaScript?

Исследование нужно, когда спор упирается в проверяемое состояние приложения, а не только в толкование договора. Типичные поводы: подрядчик сдал интернет-магазин или личный кабинет на React, Vue или Angular, а заказчик не согласен с объёмом; интерфейс ломается в конкретном браузере; в корзине или счёте расходятся суммы; серверная часть на Node.js падает или теряет данные при обмене с платёжной системой; переданный комплект не собирается; нужно проверить, не использован ли чужой код.

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

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

Отдельная страница: Когда нужна экспертиза исходного кода на JavaScript?
Какие технологии охватывает экспертиза кода на JavaScript?

Исследование охватывает обе среды, в которых работает JavaScript. Браузерная часть — это каркасы React, Vue или Angular, надстройки вроде Next.js и Nuxt, сборщики Webpack, Vite или esbuild, а также TypeScript, если проект написан на нём. Серверная часть — Node.js с Express, NestJS или Fastify, работа с базой через Prisma, TypeORM или Sequelize, очереди задач вроде BullMQ поверх Redis, обмен с платёжными и учётными системами.

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

Поэтому в первом разговоре полезно назвать каркас, версию Node.js и способ развёртывания: от этого зависит, какие материалы понадобятся и на какие вопросы вообще можно ответить.

Отдельная страница: Какие технологии охватывает экспертиза кода на JavaScript?
Чем экспертиза кода на JavaScript отличается от экспертизы сайта?

Разница в объекте. Экспертиза сайта смотрит на ресурс как на целое: что было опубликовано, доступен ли он, работает ли для посетителя, кому принадлежит домен. Экспертиза исходного кода на JavaScript исследует другое — сам код и работы по его созданию: что написано, что попало в поставку, соответствует ли это техническому заданию, чем объясняется ошибка и не заимствованы ли фрагменты.

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

Подробнее об исследовании ресурса целиком рассказано на странице экспертизы веб-сайтов. Если сомневаетесь, к какой задаче относится ваш случай, опишите ситуацию — разберём без оплаты.

Отдельная страница: Чем экспертиза кода на JavaScript отличается от экспертизы сайта?
Передан только собранный бандл — можно ли исследовать код?

Да. Бандл — это собранный файл, в который сборщик склеил модули приложения, переименовал переменные и убрал пробелы. Читается он плохо, но сохраняет всё существенное: состав модулей, применённые каркасы и библиотеки с версиями, отдельные функции и обработчики, строковые константы, адреса, к которым обращается приложение. По нему описывают реализованные возможности, сравнивают с другой кодовой базой и во многих случаях объясняют наблюдаемую ошибку.

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

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

Отдельная страница: Передан только собранный бандл — можно ли исследовать код?
Что дают карты исходного кода и что делать, если их нет?

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

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

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

Отдельная страница: Что дают карты исходного кода и что делать, если их нет?
Исходники на TypeScript, а поставка на JavaScript — что исследуют?

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

Для спора важны две вещи. Первая: сравнивать переданное с опубликованным нужно с учётом того, что между ними стоит компиляция и сборка, — прямое сопоставление файлов ничего не даст. Вторая: настройки строгости проверки типов и то, отключались ли предупреждения, сами по себе предмет исследования. Проект может объявлять типы формально и подавлять ошибки, и тогда заявленная надёжность не подтверждается — это наблюдаемый факт, который фиксируют.

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

Отдельная страница: Исходники на TypeScript, а поставка на JavaScript — что исследуют?
Подрядчик передал код на JavaScript, но проект не собирается — что установят?

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

Результат — перечень недостающего с объяснением, что именно из-за него невозможно. Это отделяет неполноту передачи от ошибок в самом коде и от того, чего не хватало на стороне исследователя, например доступа к закрытому хранилищу пакетов подрядчика. Частый случай в проектах на JavaScript: комплект формально полон, но версии пакетов не зафиксированы, и установленное сегодня окружение ведёт себя не так, как рабочее.

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

Отдельная страница: Подрядчик передал код на JavaScript, но проект не собирается — что установят?
Интерфейс не работает в конкретном браузере — можно ли это зафиксировать?

Да, если названы условия. «Не работает» само по себе не техническое утверждение: поведение браузерной части зависит от браузера и его версии, от устройства и размера экрана, от установленных расширений и настроек посетителя. Поэтому вопрос ставят так: воспроизводится ли описанный сценарий в таком-то браузере такой-то версии на таком-то устройстве. Эксперт воспроизводит его сам, фиксирует условия и результат, а не полагается на чужие рассказы и снимки экрана.

Дальше отделяют дефект кода от особенностей среды. Одно дело, когда приложение обращается к возможности, которой в этом браузере нет, и совсем другое — когда мешает расширение посетителя или устаревшая версия, не оговорённая в задании. Здесь важен документ: если требования к браузерам и устройствам в задании названы, проверка идёт по ним; если не названы, эксперт описывает фактическое поведение, а вывод о нарушении обязательств делает суд.

Перед обращением запишите точные версии и шаги воспроизведения — это заметно сократит работу.

Отдельная страница: Интерфейс не работает в конкретном браузере — можно ли это зафиксировать?
В корзине и счёте расходятся суммы — почему и можно ли это доказать?

Можно, и это частая задача. Обычные числа в JavaScript — двоичные с плавающей точкой, поэтому сложение и умножение сумм дают мелкие погрешности, зависящие от порядка операций. Отдельного десятичного типа для денег нет, хотя с 2020 года есть целочисленный тип произвольной точности BigInt: обычное число остаётся точным для целых лишь до предела Number.MAX_SAFE_INTEGER, а применять его или нет — решает разработчик. Эксперт не объявляет один способ правильным, а устанавливает, какой выбран у вас и к чему привёл.

Проверка идёт двумя разными сравнениями, и путать их нельзя. Первое: расчёт повторяют на ваших данных и сверяют с вашим же документом — это проверка происхождения цифры, ответ на вопрос «эта ли программа её посчитала». Второе: полученный результат сверяют с эталоном из договора или задания — это проверка правильности. Ловушка в том, что при ошибке в коде первое сравнение как раз совпадёт: программа воспроизведёт собственную ошибку, и подтверждение происхождения примут за подтверждение верности.

Смотрят и типовые места: момент и знак округления, совпадение расчётов на клиенте и на сервере, скидки, налоги и возвраты. Сохраните входные данные и спорные документы: без них перезапуск ничего не докажет.

Отдельная страница: В корзине и счёте расходятся суммы — почему и можно ли это доказать?
Сайт на JavaScript тормозит: дело в коде или в инфраструктуре?

Установить причину обычно можно, но начинают не с кода, а с разделения: где именно теряется время — в браузере посетителя, в сети или на сервере. Для браузерной части смотрят размер и состав сборки, число обращений к серверу, работу с разметкой страницы; для серверной — журналы Node.js, записи об ошибках со стеком вызовов, измеряемые показатели и поведение базы данных: планы выполнения запросов и блокировки.

Дальше проверяют альтернативные объяснения: код, настройки площадки, выросший объём данных, смежная система, ограничения канала у посетителя. Для JavaScript добавляется своя проверка — не изменилось ли поведение из-за обновления пакета или версии Node.js, поэтому эксперт разворачивает стенд с теми же версиями.

Учтите, что «медленно» — не техническая категория, пока не назван измеримый критерий: какая операция, при каком объёме данных, в каком браузере, за какое время и по какому пункту требований. Если такого критерия в договоре нет, эксперт описывает фактические показатели и их причины, а вывод о нарушении обязательств делает суд.

Отдельная страница: Сайт на JavaScript тормозит: дело в коде или в инфраструктуре?
Фоновые задачи Node.js не отработали — можно ли установить причину?

Если следы сохранились — да. Отложенную работу в проектах на Node.js — рассылки, выгрузки заказов, ночные пересчёты — чаще всего выполняет очередь задач вроде BullMQ поверх Redis. По её состоянию, журналам обработчика и хранилищу результатов эксперт устанавливает, была ли задача поставлена, взята ли в работу, завершилась ли ошибкой и запускалась ли повторно.

Две оговорки важны для выводов. Первая: повторный запуск — ещё не дефект — очереди обычно гарантируют доставку «не менее одного раза», и дефектом становится отсутствие защиты от повторов там, где она требовалась; именно так возникают задвоенные письма и заказы. Вторая: с Node.js 15 необработанная ошибка в асинхронной операции по умолчанию роняет процесс со стеком вызовов, а вот перехваченная и подавленная пустым обработчиком исчезает бесследно.

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

Отдельная страница: Фоновые задачи Node.js не отработали — можно ли установить причину?
Приложение теряет данные при обмене с платёжной или учётной системой — где искать?

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

Выгружайте следы обмена аккуратно и только со своей стороны. Журналы платёжных запросов несут заголовки авторизации, ключи в адресах и токены — такие поля при выгрузке усекают или заменяют, а действующие ключи после этого перевыпускают. Образцы запросов и ответов содержат персональные данные покупателей: имя, адрес доставки, телефон, состав корзины, — их состав ограничивают тем, что нужно для ответа. Саму выгрузку делают в согласованное окно или с реплики, а не с нагруженного контура в час пик.

Журналы обмена ротируются быстрее прочих, поэтому за спорный период их сохраняют в первую очередь. Данные второй стороны запрашивают через суд или орган расследования, а не собирают самостоятельно.

Отдельная страница: Приложение теряет данные при обмене с платёжной или учётной системой — где искать?
Как установить состав пакетов npm и условия их использования?

Состав определяют по двум источникам: описанию зависимостей package.json, где перечислено, что просили поставить, и файлу блокировки версий — package-lock.json, yarn.lock или pnpm-lock.yaml, — который закрепляет точный набор, включая пакеты, подтянутые не напрямую, а через другие. В проектах на JavaScript таких косвенных зависимостей обычно в разы больше, чем прямых, поэтому без файла блокировки достоверного перечня не получится.

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

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

Отдельная страница: Как установить состав пакетов npm и условия их использования?
Как отличить заимствование кода на JavaScript от совпадений из-за каркасов?

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

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

Итог — описание характера и объёма совпадений. Вывод о нарушении прав из этого автоматически не следует; такую оценку даёт суд. Подробнее о задаче — на странице сравнения исходного кода.

Отдельная страница: Как отличить заимствование кода на JavaScript от совпадений из-за каркасов?
По каким критериям оценивают качество кода на JavaScript?

Универсального «качества кода» не существует, поэтому исследование опирается на названный критерий: требования технического задания, согласованный стандарт оформления, условия договора о приёмке. Внутри этих рамок проверяют измеримые характеристики: соответствие принятым в проекте правилам оформления, замечания анализаторов ESLint и средств проверки типов, охват кода автоматическими тестами и результаты их прогона, структуру модулей, обработку ошибок, документированность.

У JavaScript есть особенность, которую приходится учитывать: объявлять типы не обязательно, а поведение объекта складывается во время выполнения, поэтому статический анализ видит меньше, чем в языках со строгой проверкой на этапе компиляции. Значимая часть выводов опирается на прогон тестов и на поведение приложения на стенде и в браузере. Срабатывание правила анализатора остаётся поводом проверить фрагмент вручную, а не готовым дефектом. Отдельно смотрят, подключалась ли проверка в сборку и не подавлялись ли предупреждения.

Если требований к качеству в договоре нет, эксперт описывает фактическое состояние кода и отклонения от общепринятой практики. Подробнее — на странице экспертизы качества исходного кода.

Отдельная страница: По каким критериям оценивают качество кода на JavaScript?
Можно ли по истории репозитория установить, когда написан код на JavaScript?

Только совокупностью источников. Отметки времени в записях истории разработчик задаёт произвольно, а имя и адрес почты указывает сам, поэтому одна запись периода не подтверждает. Сопоставляют историю с внешними следами: задачами в системе учёта, перепиской, актами, датами выпусков и записями о развёртывании.

У браузерной части есть источник, которого нет у других языков: опубликованные сборки. Каждое обновление сайта отдаёт новый файл, и если сборка спорного периода сохранилась — у вас, у второй стороны или в стороннем сетевом архиве, — её содержимое прямо показывает, что было опубликовано на ту дату. Здесь же помогают версии в описании зависимостей: пакет, вышедший позже заявленной даты разработки, датирует код не хуже документа.

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

Отдельная страница: Можно ли по истории репозитория установить, когда написан код на JavaScript?
Какие материалы нужны для экспертизы кода на JavaScript?

Состав зависит от вопроса, но обычно нужны пять групп. Первая — код: зеркальные копии репозиториев, то есть хранилищ исходных текстов вместе со всей историей правок, либо, если их нет, сохранённая браузерная сборка со сведениями о том, откуда и когда она снята. Вторая — окружение: описание зависимостей, файл блокировки версий, версия Node.js, настройки сборщика. Третья — площадки и база: конфигурация, схема, сценарии изменения структуры, резервные копии. Четвёртая — следы работы: журналы сервера, сведения о задачах, данные службы сбора клиентских ошибок, а для споров о расчётах — входные данные и полученный документ. Пятая — документы: договор, техническое задание, макеты, требования к браузерам, акты, переписка.

Добавьте цель исследования, проект вопросов, точный период и часовой пояс. Чем точнее назван объект — версия, адрес, площадка, браузер, — тем определённее будет ответ.

Для первого разговора всего этого не требуется. Действующие пароли, ключи и токены не передавайте вообще; файлы настроек присылайте с заменёнными значениями. Если экспертиза уже назначена, материалы направляют через суд или орган расследования, а не напрямую эксперту.

Отдельная страница: Какие материалы нужны для экспертизы кода на JavaScript?
Как передать репозиторий проекта на JavaScript?

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

До копирования важно ничего не «прибирать»: принудительная перезапись веток, перебазирование, удаление веток и меток уничтожают именно те следы, которые предстоит исследовать. Это относится и к секретам: ключи к платёжным и почтовым сервисам нередко попадают в историю вместе с файлами настроек, но вычищать их не нужно — ключи перевыпускают. Делают это в согласованное окно: сначала выпускают новый, переводят на него площадки и только потом отзывают старый, иначе отзыв сам остановит приём платежей.

Каталог установленных пакетов в зеркальную копию не входит и отдельно не нужен — он восстанавливается по файлу блокировки версий. Снимок серверной площадки это не отменяет: если спор о том, что было развёрнуто фактически, — это другой объект. Передайте контрольные суммы и сведения о том, откуда, когда и кем выгружена копия.

Отдельная страница: Как передать репозиторий проекта на JavaScript?
Можно ли заранее оценить перспективу экспертизы кода на JavaScript?

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

Оценка бывает неблагоприятной, и для JavaScript чаще всего по одной причине: спорная браузерная сборка уже заменена новой, карты исходного кода не публиковались, версии пакетов нигде не зафиксированы. Узнать об этом честнее до заключения договора. Бывает и обратное — разбор показывает, что положение лучше, чем казалось: карты остались доступны по соседним адресам, а сборку спорного периода сохранил сторонний архив.

Если судебная экспертиза уже назначена, порядок другой: назначенный эксперт не даёт одной стороне частный прогноз и не принимает от неё материалы напрямую. Поэтому за оценкой обращайтесь до назначения.

Отдельная страница: Можно ли заранее оценить перспективу экспертизы кода на JavaScript?
Какие вопросы ставят эксперту по коду на JavaScript?

Окончательный круг вопросов определяет суд, а в иных предусмотренных законом процедурах — орган или лицо, назначившие экспертизу. До назначения стороны вправе предложить формулировки, и в спорах о JavaScript от их точности здесь зависит особенно многое: если вопрос не называет адрес и дату снятия браузерной сборки, эксперт получит объект, которого на сайте уже нет.

Хороший технический вопрос называет объект и критерий. Объект — это репозиторий и ветка либо конкретная запись истории, версия приложения, адрес и дата снятия сборки, площадка, период и часовой пояс; для ошибки интерфейса добавляют браузер, устройство и сценарий, для спора о расчёте — файл входных данных и документ с эталоном. Критерий обычно берут из пункта технического задания.

Разные задачи разводите по отдельным вопросам. Формулировки вроде «нарушены ли авторские права» эксперту не адресуют — это правовой вопрос; «оценить качество кода» без названного критерия проверяемого ответа тоже не имеет. Помочь с формулировками можно до назначения экспертизы.

Отдельная страница: Какие вопросы ставят эксперту по коду на JavaScript?
Чем судебная экспертиза кода на JavaScript отличается от внесудебного исследования?

Различаются основание, порядок и статус эксперта. Судебная экспертиза проводится по определению суда либо постановлению следователя, дознавателя или иного уполномоченного законом лица: этот же орган определяет круг вопросов и направляет объекты. Внесудебное исследование выполняется по договору со стороной — обычно до обращения в суд.

Ключевое различие — предупреждение эксперта об уголовной ответственности за заведомо ложное заключение: при судебной экспертизе оно обязательно, во внесудебном исследовании его нет вовсе, и это учитывают при оценке документа. Есть и причина выбирать внесудебное исследование, характерная именно для JavaScript: браузерная сборка живёт до ближайшего обновления сайта, и внесудебное исследование нередко проводят просто потому, что объект исчезнет раньше, чем дело дойдёт до назначения экспертизы.

Содержание работы по коду в обоих случаях совпадает: те же объекты, методы и требования к проверяемости. Учтите: специалиста, работавшего на сторону, при последующем назначении раскрывают, и вопрос о его кандидатуре и об отводе решает суд.

Отдельная страница: Чем судебная экспертиза кода на JavaScript отличается от внесудебного исследования?
Можно ли провести экспертизу кода на JavaScript дистанционно?

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

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

У соглашения о конфиденциальности есть граница: оно связывает эксперта, но не участников дела. Материалы, поступившие в суд, и само заключение становятся доступны другой стороне — а в споре о разработке это нередко конкурент.

Отдельная страница: Можно ли провести экспертизу кода на JavaScript дистанционно?
От чего зависят стоимость и срок экспертизы кода на JavaScript?

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

Отдельно считают работу, которой могло бы не быть: разбор собранного приложения без карт исходного кода, подбор окружения, когда версии не зафиксированы, проверку сценария в нескольких браузерах и на разных устройствах, воспроизведение сбоя. Сроки складываются похожим образом: быстрее выполняются задачи с точно названным объектом и одним техническим вопросом, дольше — разбор бандла и проверка большого числа требований задания. Ориентир для судебной экспертизы — от 100 000 ₽, ориентировочный срок — от 10 рабочих дней.

Точные условия называют после просмотра материалов. Разбор задачи и перечня материалов проводится без оплаты и не требует передавать код, журналы и доступы.

Отдельная страница: От чего зависят стоимость и срок экспертизы кода на JavaScript?
Как проверить или оспорить заключение по коду на JavaScript?

Готовое заключение проверяют по тем же признакам, что и любое техническое исследование. Смотрят, что было объектом: исходные тексты, восстановленные по картам исходного кода или разобранная сборка; полный контур или отдельные файлы; откуда получены материалы и зафиксированы ли контрольные суммы. Для браузерной части отдельно проверяют, назван ли адрес и дата снятия сборки — без них наблюдения повторить нельзя, потому что сайт с тех пор обновился.

Затем смотрят, исключил ли автор из сравнения пакеты, сгенерированный каркасом код и результат автоформатирования; названы ли версии Node.js и пакетов; проверялась ли ошибка интерфейса в конкретных браузерах с указанием версий; разобраны ли альтернативные причины. Отдельно оценивают связь результатов с выводами и наличие оговорок об ограничениях. Частая ошибка — выводы за пределами специальных знаний: о нарушении прав, о вине, о надлежащем исполнении договора.

Результат проверки — рецензия: она описывает методические дефекты, но не отменяет заключение и не решает за суд вопрос о его доказательственном значении. Подробнее — на странице рецензирования экспертизы разработки ПО.

Отдельная страница: Как проверить или оспорить заключение по коду на JavaScript?
Обращение в организацию

Сначала опишите задачу и имеющиеся материалы

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

Описать задачу