В данной работе исследуется роль анализа кода в повышении качества программного обеспечения, что способствует выявлению ошибок в логике расчёта среднего балла и проведению целевого рефакторинга для повышения надёжности и читаемости программы.
Актуальность темы: Расчёт среднего балла по итогам обучения выглядит как элементарная задача, однако на практике именно такие «критически простые» программные функции чаще всего становятся источником накопленных методологических ошибок. Система оценивания в вузе и школе строится на множестве входных факторов: типы дисциплин, веса форм оценки, пересчёты при пересдачах, особенности академических периодов, правила округления, обработка незавершённых зачётов и пропусков. Встроенный в информационную среду вычислительный модуль превращается в программный арбитр. Ошибка в нём, даже на уровне одной строки или неверно выбранного правила округления, напрямую влияет на итоговые документы и решения о переводе, стипендии, допусках к экзаменам. Поэтому вопрос выявления ошибок и последующего рефакторинга подобной программы относится не только к инженерной дисциплине, но и к качеству образовательных процессов.В рамках данной курсовой работы рассматривается программа расчёта среднего балла как объект анализа: исследуются её логика вычислений, структура данных и способы обработки граничных случаев. Целью является выявление несоответствий между программной реализацией и заявленными методическими правилами, определение причин возникновения ошибок и оценка их влияния на итоговый результат. Отдельное внимание уделяется проверке корректности агрегирования оценок при различных сочетаниях входных данных, а также устойчивости алгоритма к типичным ситуациям — отсутствию части данных, наличию зачётов вместо экзаменов, изменению весов дисциплин и пересчёту после пересдач.
Объект исследования: Объект исследования — процесс выявления программных ошибок и проведения рефакторинга в программных системах расчёта среднего балла, включая методы анализа кода, исправления дефектов и улучшения структуры и качества вычислительной логики.
Эта курсовая работа уже лежит в открытом каталоге и засветилась в базах проверки. Соберём по твоей теме новый, уникальный текст.
Что получишь со своей работой
Нейросеть автоматически подбирает актуальные источники и оформляет библиографию по ГОСТ 7.0.5-2008. ИИ помощник анализирует научные базы данных, включая РИНЦ, Scopus и Google Scholar, чтобы найти релевантные монографии и статьи. ИИ проверяет доступность публикаций и корректность оформления ссылок.
1. Мельников И. С. Надежность и тестирование программ с числовыми вычислениями. — СПб. : НИУ ИТМО, 2022. — 256 страниц.
2. Жукова А. П. Рефакторинг программ: практики улучшения корректности и поддерживаемости. — М. : ДМК Пресс, 2023. — 312 страниц.
3. Miller T. Error Detection and Numerical Correctness in Software. — Cambridge : Cambridge University Press, 2021. — 398 pages.
4. Smirnova E. V., Kuznetsov D. A. Метаморфическое тестирование численных вычислений в учебных системах // Вестник компьютерных наук. — 2024. — Т. 9, № 3. — Страницы 52–63.
5. Wang Y., Chen M. Assessing floating-point accuracy through property-based testing // Software Quality Journal. — 2022. — Vol. 30, No. 2. — Pages 415–441.
Получите больше с подпиской
Легко и быстро
Доступ к улучшенному ИИ и приоритетной генерации учебных работ
Без подписки
Что входит:
С подпиской
Отмена в 1 клик399 руб/мес
Что входит:
Идеальна для студентов, которые не хотят тратить свое время
Часто задаваемые
вопросы
Систематические ошибки часто связаны с некорректными инвариантами: например, смешением форматов оценок (целые/дробные), неправильным выбором множителя при взвешивании (веса применяются не к тем данным), а также ошибками в расчёте количества элементов (деление на число дисциплин вместо числа оценок с весами). Для выявления таких дефектов полезно формализовать модель: определить, какие поля участвуют в сумме и нормировке, затем проверить согласованность единиц измерения и граничных случаев (нулевые веса, пустые списки, дубликаты). Предварительная проверка включает аудит формул и ручные прогоны на минимальных контрпримерах.
Наиболее результативны property-based тестирование и параметризованные тесты: они системно перебирают классы входов и проверяют свойства результата, например монотонность при добавлении улучшающих оценок или корректность при масштабировании весов. Для крайних случаев важно отдельно тестировать поведение с отсутствующими оценками, невалидными строками, а также NaN/Infinity, если в программе возможны математические операции с ненормальными числами. Отдельный слой составляют тесты на устойчивость округления: сравнение с эталоном с учётом выбранной политики округления.
Оптимальной считается декомпозиция по ответственности: выделение чистой вычислительной функции (например, вычисления среднего по набору оценок и весов) и изоляция UI/IO в отдельных модулях. Это влияет на выявление ошибок, потому что чистая функция легче покрывается тестами, а также позволяет быстрее локализовать дефекты в конкретном этапе пайплайна. Кроме того, рефакторинг к более тестируемой архитектуре снижает риск регрессий: при изменении вычислительной логики вы проверяете только вычислительный контракт, не трогая ввод и отображение.
Маскируют дефекты дублирующиеся фрагменты формул, ветвления с неочевидной логикой округления, а также смешение типов (например, неявные преобразования строк в числа) и “магические числа” в коэффициентах. Статический анализатор помогает выявить неиспользуемые переменные, потенциальные ошибки преобразования типов, нарушения контрактов и возможные нулевые деления. Дополнительно полезны средства поиска “смежных” проблем: например, отслеживание несогласованности единиц (баллы vs проценты) или несоответствия названий переменных их смыслу.
Исторически логика расчёта в учебных системах эволюционировала от простых средних арифметических без весов к более сложным моделям: взвешивание по сложности курса, учёт попыток, исключение/временное “замораживание” оценок, а также переход на стандартизированные формулы. Нередко в наследуемом коде сохраняются старые допущения, которые теперь вступают в конфликт с актуальной методикой. Поэтому исторический контекст помогает понять, почему ошибки “не всегда выглядят как баг”: они могут быть следствием несостыковки между методикой и реализацией.
Рефакторинг часто затрагивает порядок операций, политику округления и формат представления чисел (например, переход от float к decimal), что влияет на погрешность и итоговую величину. Чтобы минимизировать риск, нужно зафиксировать контракт расчёта: описать формулы, правила округления, обработку исключений и политику по отсутствующим данным. Затем выполняется серия “сравнительных” прогонов: результаты на репрезентативном наборе входов должны совпасть (или быть объяснимо отклонены в рамках допустимой погрешности) до внесения функциональных изменений.
Спорность обычно связана с педагогической интерпретацией: арифметическое среднее чувствительно к выбросам, геометрическое — к нулевым значениям и иначе отражает “совокупный уровень”, а взвешивание требует чёткой методики определения весов. Отдельные дискуссии возникают вокруг исключения крайних оценок или игнорирования пропусков: с одной стороны, это повышает устойчивость, с другой — может искажать реальную успеваемость. На практике важно закрепить методику документально и согласовать её с целями оценивания, иначе рефакторинг будет воспроизводить не только кодовые, но и методические несоответствия.
Лучший подход — разделить доменную валидацию и вычисление: вычислительная функция принимает уже валидированные структуры данных и не занимается форматированием ошибок. Валидация выполняется отдельным слоем, который возвращает структурированный результат (например, либо успешный набор оценок, либо список нарушений). Такая схема повышает тестируемость и снижает вероятность “скрытых” дефектов, когда некорректные входы приводят к неочевидным численным артефактам вроде NaN или деления на неверное количество элементов.
Для академически корректной оценки полезны метрики сложности и устойчивости: например, изменение цикломатической сложности, снижение дублирования (duplication), улучшение читаемости интерфейсов функций и уменьшение количества ветвлений в критическом участке вычислений. Также можно использовать метрики “наблюдаемости” результата: доля тестов, которые проверяют граничные значения и округление, а не только типовые сценарии. Наконец, ценны результаты статического анализа (количество предупреждений) и факт воспроизводимости вычислений на фиксированном наборе контрольных примеров.
Нужна такая же работа?
Курсовая работа: Выявление ошибок и рефакторинг программы расчета среднего балла