### Body

Currently `start_date` is mandatory parameter.
For DAGs with `schedule=None` we can relax this requirement as no scheduling calculation needed so the `start_date` parameter isn't used.

### Committer

- [X] I acknowledge that I am a maintainer/committer of the Apache Airflow project.
with DAG("dag", start_date=DEFAULT_DATE, default_args={"owner": "owner1"}):
            with pytest.raises(AirflowException):
                EmptyOperator(task_id="should_fail", weight_rule="no rule")
    def test_get_num_task_instances(self):
        test_dag_id = "test_get_num_task_instances_dag"
        test_task_id = "task_1"
        test_dag = DAG(dag_id=test_dag_id, start_date=DEFAULT_DATE)
        test_task = EmptyOperator(task_id=test_task_id, dag=test_dag)
        dr1 = test_dag.create_dagrun(state=None, run_id="test1", execution_date=DEFAULT_DATE)
        dr2 = test_dag.create_dagrun(
            state=None, run_id="test2", execution_date=DEFAULT_DATE + datetime.timedelta(days=1)
        )
        dr3 = test_dag.create_dagrun(
            state=None, run_id="test3", execution_date=DEFAULT_DATE + datetime.timedelta(days=2)
        )
        dr4 = test_dag.create_dagrun(
            state=None, run_id="test4", execution_date=DEFAULT_DATE + datetime.timedelta(days=3)
        )
        ti1 = TI(task=test_task, run_id=dr1.run_id)
        ti1.state = None
        ti2 = TI(task=test_task, run_id=dr2.run_id)