Improving software quality with programming patterns