Величко Елизавета
Def утро

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:
Школа кожевенного мастерства: сумки, ремни своими руками Юридические услуги. Круглосуточно
 Ваша оценка:
  • Аннотация:
    Один день из жизни тестировщика. Система работает, но в её венах течет отравленный поток. Ночные логи скрывают зловещую тайну, а необработанные исключения выстреливают в темноте, оставляя после себя лишь пустые указатели. Когда стандартные алгоритмы терпят крах, на сцену выходит Охотник - метод, не знающий пощады. Ему предстоит пройти по тонкому льду рекурсии, заглянуть в лицо фатальной ошибке и найти тот самый единственный баг, угрожающий гибелью всему процессу. Цена ошибки - крах ядра. Время работы - до наступления тайм-аута

  def утро_понедельника_и_кофе():
   кофе = заварить("очень_крепкий", сахар=True, молоко=False)
   экран = открыть_ноутбук()
   тикет_с_задачей = прочитать("AUT-4471: проверить модуль авторизации")
   настроение = "ничего_хорошего_не_жду"
   return кофе, экран, тикет_с_задачей, настроение
  
  
  def проверить_вход_с_правильным_паролем():
   пользователь = "администратор_главной_системы"
   пароль = "ТрудныйПароль123!"
  
   ответ = система.войти(пользователь, пароль)
  
   if ответ.успешно and ответ.показывает_панель_управления():
   написать_в_лог("Нормальный вход работает. Как и должно быть.")
   return True
   else:
   написать_в_лог("Даже нормальный вход сломан. Понедельник.")
   return False
  
  
  def проверить_вход_с_неправильным_паролем():
   пользователь = "администратор_главной_системы"
   пароль = "явно_неправильный_пароль"
  
   ответ = система.войти(пользователь, пароль)
  
   if not ответ.успешно and ответ.показывает_сообщение_об_ошибке():
   написать_в_лог("Неправильный пароль отклонён. Логика жива.")
   return True
   else:
   написать_в_лог("Неправильный пароль пропустили. Мы умрём.")
   return False
  
  
  def проверить_вход_с_пустым_паролем():
   """То, что никто не проверяет, пока не проверяет."""
   пользователь = "администратор_главной_системы"
   пароль = "" # ничего. пустота. ноль символов.
  
   ответ = система.войти(пользователь, пароль)
  
   if not ответ.успешно:
   return True # всё хорошо, пустой пароль не пропустили
  
   # но здесь мы оказались
   написать_в_лог("ПУСТОЙ ПАРОЛЬ ПРОПУЩЕН. Я ВШЁЛ В СИСТЕМУ БЕЗ ПАРОЛЯ.")
   написать_в_лог("Разработчик не добавил проверку на пустую строку.")
   написать_в_лог("Фронтенд показывает звёздочки, а бэкенду всё равно.")
   зарегистрировать_баг(
   критичность="КРИТИЧЕСКИЙ",
   описание="Пустой пароль позволяет войти в систему под любой учётной записью",
   шаги_воспроизведения=[
   "Открыть страницу входа",
   "Ввести логин администратора",
   "Оставить поле пароля пустым",
   "Нажать 'Войти'",
   "Оказаться внутри"
   ],
   ожидаемый_результат="Система должна сказать: введите пароль",
   фактический_результат="Система говорит: добро пожаловать",
   настроение_тестировщика="мрачное_удовлетворение"
   )
   return False
  
  
  def проверить_права_доступа_гостя():
   """Фронтенд говорит 'нельзя'. Но фронтенд - это маска."""
   гость = система.войти("гость_из_интернета", "guest")
  
   кнопка_редактировать = гость.найти_на_экране("кнопка_сохранить_документ")
  
   if кнопка_редактировать.видна:
   написать_в_лог("Кнопка не показана гостю. Хорошо.")
   else:
   написать_в_лог("Кнопка скрыта. Но скрыта ли возможность?")
  
   # теперь обходим фронтенд - шлём запрос напрямую
   ответ_напрямую = гость.отправить_запрос_в_обход_интерфейса(
   метод="POST",
   путь="/api/документы/важный_отчёт",
   данные="ВНИМАНИЕ: ЭТО ТЕСТ, НО МОГ БЫТЬ НЕ ТЕСТ"
   )
  
   if ответ_напрямую.статус == 403:
   написать_в_лог("Сервер отклонил. Защита работает на уровне бэкенда.")
   return True
  
   # но здесь мы оказались
   написать_в_лог("СЕРВЕР ВЕРНУЛ 200. ДАННЫЕ ЗАПИСАНЫ.")
   написать_в_лог("Фронтенд прятал кнопку. Бэкенд ничего не проверял.")
   написать_в_лог("Любой человек с Postman может редактировать документы.")
   зарегистрировать_баг(
   критичность="КРИТИЧЕСКИЙ",
   описание="Отсутствует проверка прав на сервере. Гость может менять данные через прямой запрос",
   шаги_воспроизведения=[
   "Зайти как гость",
   "Открыть Postman",
   "Отправить POST на /api/документы/важный_отчёт",
   "Получить 200 OK"
   ],
   ожидаемый_результат="403 Forbidden",
   фактический_результат="200 OK, данные сохранены",
   настроение_тестировщика="тревожное"
   )
   return False
  
  
  def проверить_поиск_на_инъекции():
   """Всё, что вводит пользователь - это потенциально оружие."""
   обычный_запрос = "отчёт за май"
   ответ = система.поиск(обыный_запрос)
  
   if ответ.содержит_результаты():
   написать_в_лог("Обычный поиск работает. Пока не трогаем.")
  
   зловредный_запрос = "",
   "Нажать 'Найти'",
   "Увидеть выполнение скрипта на странице"
   ],
   ожидаемый_результат="Тег очищен или экранирован",
   фактический_результат="Скрипт выполняется",
   настроение_тестировщика="усталое_возмущение"
   )
   return False
  
  
  def показать_итоги(список_багов):
   print("\n" + "=" * 50)
   print(" ОТЧЁТ ТЕСТИРОВАНИЯ - ПОНЕДЕЛЬНИК")
   print("=" * 50)
  
   критических = [б for б in список_багов if б.критичность == "КРИТИЧЕСКИЙ"]
   высоких = [б for б in список_багов if б.критичность == "ВЫСОКИЙ"]
  
   print(f"\nНайдено багов: {len(список_багов)}")
   print(f" Критических: {len(критических)}")
   print(f" Высоких: {len(высоких)}")
  
   for номер, баг in enumerate(список_багов, 1):
   print(f"\n Баг #{номер}: {баг.описание}")
   print(f" Критичность: {баг.критичность}")
  
   print("\n" + "-" * 50)
   print(" Реакция разработчика:")
   print("-" * 50)
   print(' "У меня на машине всё работало"')
   print(' "Это не баг, это фича"')
   print(' "Кто вообще будет вводить пустой пароль?"')
   print(' "Ты слишком придираешься"')
   print("-" * 50)
  
   print("\n Мой ответ:")
   print(' "Пользователь. Пользователь будет."')
   print("=" * 50)
  
  
  def main():
   кофе, экран, тикет, настроение = утро_понедельника_и_кофе()
  
   баги = []
  
   написать_в_лог("Начинаю тестирование модуля авторизации.")
   написать_в_лог("Настроение: " + настроение)
  
   if not проверить_вход_с_правильным_паролем():
   баги.append("Нормальный вход сломан")
  
   if not проверить_вход_с_неправильным_паролем():
   баги.append("Неправильный пароль пропускается")
  
   if not проверить_вход_с_пустым_паролем():
   баги.append("Пустой пароль пропускается")
  
   написать_в_лог("\nПерехожу к проверке прав доступа.")
  
   if not проверить_права_доступа_гостя():
   баги.append("Нет проверки прав на бэкенде")
  
   написать_в_лог("\nПерехожу к проверке поиска.")
  
   if not проверить_поиск_на_инъекции():
   баги.append("XSS в поиске")
  
   написать_в_лог(f"\nТестирование завершено. Нашёл {len(баги)} проблем.")
  
   if len(баги) > 0:
   написать_в_лог("Открываю Jira. Пишу баг-репорты. Сижу.")
   написать_в_лог("Кофе остыл. Это нормально.")
   написать_в_лог("Так всегда.")
  
   показать_итоги(баги)
  
   # завтра будет вторник
   # будут новые баги
   # я буду здесь
   return 0 # без ошибок. только баги.

 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"