Замените ссылки на ИИ в комментариях на тесты, которые на самом деле работают

Замените ссылки на ИИ в комментариях на тесты, которые на самом деле работают

7 июля 2025 г.

Новые технологии, новые запахи - вашей будущей работой не будет писать код, а понимание и исправление кода, часто написанного ИИ

TL; DR: вы ссылаетесь на внешние разговоры по ИИ, чтобы объяснить код вместо написания декларативных тестов

Проблемы 😔

  • Комментарии
  • Внешние зависимости
  • Разбитые ссылки
  • Неверное поведение
  • Фрагментация знаний
  • Техническое бремя
  • Потерянный контекст
  • Устаревшие комментарии
  • Вводящее в заблуждение объяснение

Решения 😃

  1. Писатьисполняемые тесты
  2. Удалить внешние ссылки
  3. Не слепо доверяйте ИИ
  4. Опишите с помощью встроенных примеров
  5. Держите тесты на местных
  6. УдалятьВсе комментарии
  7. ЗаменятьМагические числас постоянными.

Рефакторинг ⚙

https://maximilianocontieri.com/refactoring-011-replace-comments-with-tests?embedable=true

Контекст 💬

Если вы добавите комментарии, которые ссылаются на внешние разговоры по ИИ, посты переполнения стека или онлайн -ресурсы, чтобы объяснить, как работают ваши функции, вы не думаете о своем читателе.

Эти ссылки создают опасные внешние зависимости, которые со временем ломаются.

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

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

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

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

Комментарии и документация часто лгут. Код никогда не делает.

Пример кода 📖

Неправильно ❌

def calculate_starship_trajectory(initial_velocity, fuel_mass, 
                                burn_rate, gravity=9.81):
    """
        
    See explanation at
    https://claude.ai/share/5769fdd1-46e3-40f4-b9c6-49efbee93b90
         
    """
    # AI suggested this approach
    burn_time = fuel_mass / burn_rate
    
    # Physics formula from Claude conversation
    # https://claude.ai/share/5769fdd1-46e3-40f4-b9c6-49efbee93b90
    delta_v = gravity * burn_time * 0.85  
    # 0.85 explanation 
    # https://claude.ai/share/5769fdd1-46e3-40f4-b9c6-49efbee93b90
    final_velocity = initial_velocity + delta_v
    
    # Return format suggested by GPT 
    return {
        'burn_time': burn_time,
        'final_velocity': final_velocity,
        'delta_v': delta_v
    }

def calculate_orbit_insertion(velocity, altitude):
    """
       
    Algorithm explanation available at:
    https://claude.ai/chat/orbit-insertion-help-session
    """
    # See AI conversation for why we use this formula
    orbital_velocity = (velocity * 1.1) + (altitude * 0.002)
    return orbital_velocity

Справа 👉

def calculate_starship_trajectory(initial_velocity, fuel_mass, 
                                burn_rate, gravity=9.81):
  
    THRUST_EFFICIENCY = 0.85
    
    burn_time = fuel_mass / burn_rate
    delta_v = gravity * burn_time * THRUST_EFFICIENCY
    # You replace the magic number
    final_velocity = initial_velocity + delta_v
    
    return {
        'burn_time': burn_time,
        'final_velocity': final_velocity,
        'delta_v': delta_v
    }

def calculate_orbit_insertion(velocity, altitude):
    """Calculate orbit insertion velocity."""
    
    VELOCITY_BOOST_FACTOR = 1.1
    ALTITUDE_ADJUSTMENT_RATE = 0.002

    orbital_velocity = (velocity * VELOCITY_BOOST_FACTOR) +
      (altitude * ALTITUDE_ADJUSTMENT_RATE)
    return orbital_velocity    

import unittest
from starship_trajectory_calculator import (
    calculate_starship_trajectory, calculate_orbit_insertion
)

class TestStarshipTrajectoryCalculator(unittest.TestCase):
    
    def test_basic_trajectory_calculation(self):
        result = calculate_starship_trajectory(100, 1000, 10)
        
        self.assertEqual(result['burn_time'], 100.0)
        self.assertEqual(result['delta_v'], 833.85)
        self.assertEqual(result['final_velocity'], 933.85)
    
    def test_zero_fuel_scenario(self):
        result = calculate_starship_trajectory(200, 0, 10)
        
        self.assertEqual(result['burn_time'], 0.0)
        self.assertEqual(result['delta_v'], 0.0)
        self.assertEqual(result['final_velocity'], 200.0)
    
    def test_high_burn_rate(self):
        result = calculate_starship_trajectory(150, 500, 100)
        
        self.assertEqual(result['burn_time'], 5.0)
        self.assertAlmostEqual(result['delta_v'], 41.69, places=2)
        self.assertAlmostEqual(result['final_velocity'], 191.69, 
                             places=2)
    
    def test_custom_gravity(self):
        result = calculate_starship_trajectory(100, 600, 20, 
                                             gravity=3.71)  # Mars
        
        self.assertEqual(result['burn_time'], 30.0)
        self.assertAlmostEqual(result['delta_v'], 94.76, places=2)
        self.assertAlmostEqual(result['final_velocity'], 194.76, 
                             places=2)
    
    def test_orbit_insertion_basic(self):
        orbital_velocity = calculate_orbit_insertion(7800, 400000)
        
        self.assertEqual(orbital_velocity, 9380.0)
    
    def test_orbit_insertion_low_altitude(self):
        orbital_velocity = calculate_orbit_insertion(7500, 200000)
        
        self.assertEqual(orbital_velocity, 8650.0)
    
    def test_orbit_insertion_zero_altitude(self):
        orbital_velocity = calculate_orbit_insertion(8000, 0)
        
        self.assertEqual(orbital_velocity, 8800.0)

Обнаружение 🔍

  • Автоматический

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

Ищите функции, которые имеют подробные внешние ссылки, но не имеют соответствующих модульных тестов.

Исключения 🛑

Академический или исследовательский кодекс может законно ссылаться на опубликованные статьи или установленные алгоритмы.

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

Теги 🏷

  • Комментарии

Уровень 🔋

  • Новичок

Почему биение важна 🗺

В реальном мире вы не полагаетесь на внешние власти, чтобы подтвердить ваше понимание критических процессов.

Вы разрабатываете внутренние системы знаний и проверки.

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

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

Ссылки не являются поведением.

Тесты есть.

Поколение AI 🤖

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

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

Обнаружение ИИ 🧲

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

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

Попробуйте их! 🛠

Помните: помощники ИИ делают много ошибок

Предлагаемая подсказка: замените эту внешнюю ссылку и комментарии на покрытие и модульные тесты

Без надлежащих инструкций

С конкретными инструкциями

Чатгпт

Чатгпт

Клод

Клод

Недоумение

Недоумение

Второй пилот

Второй пилот

Близнецы

Близнецы

DeepSeek

DeepSeek

Meta ai

Meta ai

Грок

Грок

Qwen

Qwen

Заключение 🏁

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

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

Отношения 👩‍❤

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxxvii?embedable=true

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxx

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxxi

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-i-xqz3evd?embedable=true

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-i-xqz3evd?embedable=true

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xv

https://hackernoon.com/code-smell-259-control-your-environment-to-avoid-test-failures

Отказ от ответственности 📘

Кодовые запахи - моимнениеПолем

Кредиты 🙏

ФотоЖюльен ТромернаНеспособный


Лучшая документация - это код, который не нуждается в документации

Стив Макконнелл

https://hackernoon.com/400-thought-предвидение-software-engineering-quotes?embedable=true


Эта статья является частью серии Codesmell.

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-i-xqz3evd?embedable=true


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE