Что такое Critical Path (критический путь) и как вы составляете для него чек-листы?

«Что такое Critical Path (критический путь) и как вы составляете для него чек-листы?» — вопрос из категории Тестовая документация, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Critical Path (Критический путь) — это самая длинная последовательность зависимых задач в проекте, определяющая минимально возможный срок его завершения. Задержка любой задачи на критическом пути напрямую сдвигает дедлайн всего проекта.

Чек-лист для контроля критического пути фокусируется на предотвращении задержек и включает следующие пункты:

  1. Идентификация зависимостей: Все ли задачи-предшественники для каждой задачи критического пути корректно определены и задокументированы?
  2. Мониторинг статуса: Регулярно ли обновляется статус выполнения задач на критическом пути (например, ежедневно)?
  3. Анализ рисков: Выявлены ли потенциальные риски (болезнь сотрудника, задержка поставки, технические сложности), которые могут заблокировать путь?
  4. Наличие ресурсов: Заложены ли и доступны ли необходимые ресурсы (люди, оборудование, тестовые среды) для задач на пути?
  5. Буферы времени: Включены ли в план управленческие буферы (резерв времени) для ключевых задач?
  6. Коммуникация: Все ли заинтересованные стороны (стейкхолдеры) в курсе статуса критического пути?

Практический пример (Python) для валидации структуры зависимостей задач:

def validate_critical_path(tasks):
    """
    Проверяет корректность графа зависимостей задач.
    tasks: dict {task_id: {'depends_on': list, 'duration': int}}
    """
    errors = []
    all_task_ids = set(tasks.keys())

    for task_id, details in tasks.items():
        # 1. Проверка существования зависимостей
        for dep in details.get('depends_on', []):
            if dep not in all_task_ids:
                errors.append(f"Задача '{task_id}' зависит от несуществующей задачи '{dep}'.")
        # 2. Проверка на циклические зависимости (упрощённо)
        # Для полной проверки нужен алгоритм обхода графа (DFS).

    # 3. Проверка, что у всех задач указана длительность
    for task_id, details in tasks.items():
        if 'duration' not in details or details['duration'] <= 0:
            errors.append(f"Задача '{task_id}' имеет некорректную длительность.")

    return errors if errors else "Граф зависимостей корректен."

# Пример данных
project_tasks = {
    "ТЗ": {"depends_on": [], "duration": 5},
    "Дизайн": {"depends_on": ["ТЗ"], "duration": 7},
    "Разработка": {"depends_on": ["Дизайн"], "duration": 15},
    "Тестирование": {"depends_on": ["Разработка"], "duration": 10}
}
print(validate_critical_path(project_tasks))

Использование таких чек-листов и автоматических проверок помогает проактивно управлять сроками проекта.