Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Анализ программных реализаций. Практикум
.pdf
41
5 Лабораторная работа №4 Статический анализ программ с
помощью ReSharper
Цель
Провести анализ готового программного продукта на наличие ошибок
визуально, с помощью стандартных функций Visual Studio и ReSharper.
Задачи
1. Проверить, возможно ли переполнение буфера.
2. Посмотреть, как можно защитить графический интерфейс.
3. Узнать, контролируется ли тип переменных в тексте программы.
4. Посмотреть, как происходит регистрация ошибок.
5. Указать, как хранятся пароли.
6. Узнать, как передается конфиденциальная информация, если она есть.
7. Проверить, какие средства программно-аппаратной защиты
предусмотрены.
8. Сравнить результаты анализа в VS c анализом в программе ReSharper.
Теория
ReSharper – это популярное интегрированное средство разработки (IDE)
для платформы .NET, разработанное компанией JetBrains. Оно предоставляет
широкий спектр функций и инструментов для улучшения процесса разработки,
повышения производительности и качества кода. Вот некоторые из основных
возможностей ReSharper:
– Автозавершение кода и IntelliSense: ReSharper предлагает
автоматическое завершение кода, анализируя контекст и предоставляя
соответствующие варианты завершения. Он также предоставляет улучшенный
IntelliSense для быстрого доступа к свойствам, методам и типам.

42
– Анализ кода и рефакторинг: ReSharper выполняет статический анализ
кода и предлагает рекомендации по улучшению кода, обнаруживая
потенциальные проблемы и ошибки. Он также поддерживает множество
автоматических рефакторингов, таких как переименование, извлечение метода,
выделение переменной и многое другое.
– Навигация по коду: ReSharper облегчает навигацию по большим
проектам, позволяя быстро переходить к определениям классов, методов,
свойств и других элементов кода.
– Поддержка языков: ReSharper обеспечивает поддержку различных
языков программирования, таких как C#, VB.NET, JavaScript, TypeScript, HTML,
CSS и др.
– Интеграция с Visual Studio: ReSharper полностью интегрируется с Visual
Studio, предоставляя дополнительные функции и возможности в рамках среды
разработки.
– Тестирование и отладка: ReSharper предоставляет инструменты для
написания, запуска и отладки модульных тестов прямо из IDE.
– Поддержка плагинов: ReSharper поддерживает расширение
функциональности с помощью плагинов, что позволяет пользователям
настраивать и адаптировать среду разработки под свои потребности.
В целом, ReSharper является мощным инструментом для повышения
производительности и качества разработки .NET-приложений.
Ход работы
Первичный анализ
Напишите в отчете ответы на следующие вопросы:
1. Возможно ли переполнение буфера? Проверьте, какие данные могут
сохраняться или вводиться пользователем. Стоят ли какие-то ограничения на
размер данных?
2. Контролируется ли тип переменных в тексте программы? Все ли данные
заданы правильно, есть ли проверка на вводимые значения, присутствует ли
конвертация данных?

43
3. Как происходит регистрация ошибок? Есть ли в программе обработчики
исключений? Условия, проверки? Что происходит при отлове ошибок?
4. Есть ли конфиденциальная информация? Если "да", то как передается?
5. Какие средства программно-аппаратной защиты предусмотрены?
Проведем анализ приложений с помощью встроенных функция Visual
Studio. Для этого «Анализ» –> «Выполнить Code Analysis» –> «В решении».
После этого появится окно «Список ошибок», в котором будут представлены
ошибки и предупреждения и пояснения к ним.
Рисунок 24 – Результат работы Visual Studio

44
Серьезных ошибок нет, только предупреждения как можно упростить код.
Например, использовать оператор Switch.
Теперь проведем анализ с помощью ReSharper. Для этого, также в Visual
Studio, «Расширения» –> «ReSharper» –> «Inspect» –> «Inspect This» –> «Code
Issues». После этого появится окно «Inspection Results», в котором будут
представлены ошибки и предупреждения и пояснения к ним.
Рисунок 25 – Результат работы ReSharper
Серьезных ошибок также нет, есть предупреждения, что переменная не
используется, и орфографические ошибки в названии переменных.
Далее с помощью стандартных функций Visual Studio были выведены
метрики. Анализирую результаты, полученных метрик можно судить о том, что,

45
приложения по сложности поддержки находятся на совершенно разном уровне.
Ярким отличием можно выделить лишь сложность организации, она у
XamlVectorGraphicEditor-master намного выше так как сама программа намного
функциональнее и сложнее.
Рисунок 26 – Метрики
Программа содержит метрики для трех различных сборок проекта "Chess"
в отладочном режиме (Debug): Chess.View, Chess.ViewModel и Chess.Model.
Метрики включают различные показатели, которые могут быть полезны для
анализа кода. Рассмотрим эти метрики более подробно:
1. Индекс удобства поддержки
Индекс удобства поддержки показывает, насколько легко или сложно будет
поддерживать и модифицировать программный код в будущем. Этот показатель
учитывает такие аспекты, как сложность кода, его читаемость, количество
комментариев и структурированность.
Высокий индекс удобства поддержки свидетельствует о том, что код легче
читать и понимать, что облегчает его поддержку и внесение изменений. Это
особенно важно для больших и долгосрочных проектов. В данной программе
высокие индексы удобства поддержки.
2. Сложность организации
Сложность организации отражает структурную сложность программы,
оценивая количество и глубину зависимостей между компонентами, сложность
взаимодействий и иерархию классов.

46
Высокая сложность организации может усложнять понимание и
модификацию кода, увеличивать вероятность ошибок и затруднять тестирование.
Низкая сложность указывает на более простую и понятную структуру.
Данная программа имеет достаточно высокую сложность организации.
3. Глубина наследования
Глубина наследования показывает максимальное количество уровней
наследования классов в программе.
Глубокие иерархии наследования могут усложнять понимание и
сопровождение кода, поскольку изменения в базовых классах могут оказывать
значительное влияние на производные классы.
У сборки Chess.View глубокая иерархия глубины наследования, что
усложняет понимание кода.
4. Взаимозависимость
Взаимозависимость измеряет количество связей и зависимостей между
различными модулями или компонентами программы.
Высокая степень взаимозависимости указывает на плотное сплетение
компонентов, что затрудняет внесение изменений и повышает риск появления
ошибок при модификации кода. Низкая взаимозависимость улучшает
модульность и тестируемость кода.
5. Строки исходного кода (SLOC)
Строки исходного кода (SLOC) измеряют общее количество строк,
содержащих исходный код программы, включая комментарии и пустые строки.
SLOC является грубым показателем размера программы. Большое
количество строк может указывать на сложность программы, но также может
быть результатом хорошего документирования и форматирования кода.
6. Строки исполняемого кода
Строки исполняемого кода измеряют количество строк, содержащих
непосредственно исполняемые инструкции, исключая комментарии и пустые
строки.

47
Это показатель реальной сложности программы, так как отражает объем
логики, реализованной в коде. Большое количество строк исполняемого кода
указывает на функционально насыщенную программу.
Chess.Model имеет наибольшую сложность организации и количество
строк кода, но также лучший индекс удобства поддержки. Это может указывать
на то, что несмотря на объем и сложность, код хорошо документирован или
структурирован для облегчения поддержки.
Chess.ViewModel показывает наименьшую сложность и глубину
наследования, что делает его самым простым модулем в плане структуры и
поддержки.
Chess.View имеет значительную глубину наследования и высокую
взаимозависимость, что может усложнять его поддержку и модификацию.
Контрольные работы
1. Зачем нужен ReSharper?
2. Какие виды ошибок могут возникать в программах?
3. Чем отличается VS от ReSharper?
4. Какие функции есть у анализатора ReSharper?
5. Какие метрики качества кода есть в Visual Studio?

48
6 Лабораторная работа №5 Анализ программ для просмотра
паролей
Цель
Провести анализ существующих программ, позволяющих просматривать
пароли.
Задачи
1. Выбор нескольких программ, позволяющих просматривать пароли.
2. Установка и просмотр функций выбранных программ.
3. Сравнение и анализ программ.
Теория
Существуют программы для просмотра паролей, охраненных в браузерах,
роутерах, и различных программах.
Многие подобные программы служат для восстановления паролей,
сохраненных в браузерах. Принцип работы такой программы состоит в
расшифровке базы паролей, которые были сохранены пользователем. Если вы
забыли свой пароль, но знаете, что он сохранен в браузере, то вы можете
прибегнуть к такому методу, нужно всего лишь запустить программу. Программа
отобразит все найденные данные, которые затем можно сохранить в файл.
Есть программы для восстановления паролей из почтовых клиентов, из
файлов роутера и из сетевых файлов. Работают эти программы также в
автоматическом режиме. Пользователю нужно лишь надеяться, что программа
что-то найдет. Некоторые программы позволяют видеть пароли, скрытые за
звездочками.

49
Ход работы
Рассмотрим программу SniffPass. Данная программа работает в режиме
реального времени, ей нужно передать адрес потока, который она будет
отслеживать и запустить, после чего все введенные пароли будут отображаться.
Рисунок 28 – Интерфейс программы
Теперь выберем метод захвата и сеть, чтобы начать прослушивание:
Рисунок 29 – Опции захвата

50
На рисунке ниже видно перехваченные данные.
Рисунок 30 – Перехваченные по сети пароли
Таким же образом, проанализируйте несколько программ и просмотрите их
основные функции.
Контрольные вопросы
1. Какие бывают программы для просмотра паролей?
2. Каковы принцип работы рассмотренных вами программ?
3. Какие бывают методы перехвата/раскрытия паролей?
4. В чем минусы и плюсы рассмотренных вами программ?
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
