Defensive Design Strategies to Prevent Flaky Tests