Software Engineering in the IoT Context: Characteristics, Challenges, and Enabling Strategies