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

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

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

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

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

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

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

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

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

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

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

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

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

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

Содержание страницы

    Спорите с подрядчиком об интернет-магазине, личном кабинете или портале: в суде такой спор почти всегда сводится к соответствию сделанного техническому заданию — что заказали, что сдали и можно ли считать это принятым. У JavaScript ответ на этот вопрос имеет особенность, которой нет у других языков. Один и тот же язык работает в двух средах: в браузере посетителя и на сервере под управлением Node.js. Браузерная часть при этом публична — её код отдаётся каждому, кто открыл страницу, и снять копию можно, не дожидаясь суда. Серверная часть, наоборот, доступна только владельцу. Экспертиза исходного кода на JavaScript — специализированное направление экспертизы процесса разработки программного обеспечения. На выходе вы получаете заключение с описанием объектов, методов и ограничений, пригодное для суда и для переговоров.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • полная зеркальная копия каждого репозитория со всеми ветками, метками и историей изменений;
    • исходные тексты на 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;
    • договор, техническое задание, макеты, требования к браузерам, акты и переписку о согласованных изменениях;
    • настройки площадок, схему базы, сценарии её изменения и резервные копии;
    • журналы сервера, сведения о задачах и данные службы сбора ошибок за период;
    • входные данные и результаты спорного расчёта;
    • процессуальный документ, если экспертиза уже назначена.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    По договору

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

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

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

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

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

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

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

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

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

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

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

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

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

    Получить предварительную оценку
    Организация исследования

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

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

    1. 01 Предварительный разбор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Аннотация

    Судебная компьютерно-техническая экспертиза программного обеспечения, разработанного по договору авторского заказа. Экспертами проводился анализ исходного кода веб-приложения на React.js и мобильного приложения на React Native, исследование технической документации и попытка развертывания программного комплекса в тестовой среде. Применялись методы аналитического исследования документации и практического тестирования программных компонентов в соответствии с требованиями ГОСТ Р 57429-2017 и Федерального закона о судебно-экспертной деятельности.

    Открыть описание
    Опубликованный пример
    Завершена в декабре 2023 года

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

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

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

    Аннотация

    Судебная компьютерно-техническая экспертиза программного обеспечения, проведенная с целью выявления недостатков и ошибок в разработанном продукте, а также оценки стоимости их устранения. В рамках исследования было осуществлено развертывание предоставленного программного обеспечения в изолированной виртуальной среде, включающей операционную систему Linux Ubuntu и необходимую программную инфраструктуру. Эксперты провели анализ структуры файлов, исходного кода и попытки запуска системы, столкнувшись с необходимостью устранения выявленных ошибок развертывания и настройки базы данных. В связи с критическими недочетами, препятствующими полноценному доступу к функционалу, дополнительно были изучены видеоматериалы тестового обследования, предоставленные сторонами, для формирования комплексного заключения о состоянии программного обеспечения.
    Открыть описание
    Опубликованный пример
    Завершена в мае 2023 года

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

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

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

    Аннотация

    Судебная компьютерно-техническая экспертиза по установлению фактов воспроизведения, переработки и использования компонентов программного обеспечения. В рамках исследования были проанализированы различные версии программных продуктов «Pronto!» и «CommuniGate Pro», их исходные и объектные коды, а также сопутствующая техническая документация и цифровые носители. Работа включала сравнительный анализ кодовых баз с использованием специализированных инструментов для поиска дублирующихся фрагментов, побайтовое сравнение файлов, идентификацию открытого исходного кода и определение хронологии создания версий программ. Частью экспертизы стал также выезд на осмотр SVN-репозитория в г. Москва для получения архивной копии данных. Цель экспертизы заключалась в разрешении вопросов, связанных с авторскими правами и взаимосвязями между сложными программными комплексами.

    Открыть описание
    Опубликованный пример
    Завершена в августе 2023 года

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

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

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

    Аннотация

    Судебная компьютерно-техническая экспертиза программного обеспечения, направленная на установление соответствия разработанного продукта условиям договора и техническому заданию, а также на оценку фактически выполненных работ. Эксперты провели анализ исходного кода, написанного на языках PHP и JavaScript, а также сопутствующей документации и электронной переписки сторон. Целью было определить наличие недостатков и рассчитать стоимость их устранения, используя методы комплексного анализа предоставленной цифровой информации и договорных обязательств.
    Открыть описание
    Опубликованный пример
    Завершена в ноябре 2022 года

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

    Судебная компьютерно-техническая экспертиза программного обеспечения, проведенная по определению Гагаринского районного суда г. Москвы, имела целью комплексный анализ исходных и объектных кодов различных версий программных продуктов "Pronto!

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

    Аннотация

    Судебная компьютерно-техническая экспертиза программного обеспечения, проведенная по определению Гагаринского районного суда г. Москвы, имела целью комплексный анализ исходных и объектных кодов различных версий программных продуктов "Pronto!" и "CommuniGate Pro". В рамках исследования были выявлены факты воспроизведения, переработки и использования частей одной программы при создании другой, а также исследованы вопросы функциональной автономности и протоколов взаимодействия. Применены методологии глубокого анализа исходного кода, специализированные программные инструменты для выявления дубликатов и побайтовое сравнение файлов. Экспертиза проведена в строгом соответствии с положениями Федерального закона «О государственной судебно-экспертной деятельности в Российской Федерации», предоставляя технические данные для гражданского дела, связанного с вопросами интеллектуальной собственности.

    Открыть описание
    Опубликованный пример
    Завершена в сентябре 2019 года

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

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

    Арбитражный суд Республики ТатарстанДело №А65-11649/2019
    Участники: ООО "ВДН 1", г. Казань, ООО "Технократия", г. Казань

    Аннотация

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

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

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

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

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

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

    Все вопросы по направлению
    Когда нужна экспертиза исходного кода на 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?
    Обращение в организацию

    Отправьте материалы на предварительную оценку

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

    Отправить материалы