Software Engineering Techniques Applied to Agricultural Systems