Ubiquitous computing (ubicomp) environments often consist of many embedded or handheld devices, either mobile or stationary, communicating with each other through wireless networks to cooperatively perform certain tasks. Recent development in ubicomp provides devices a new capability, situation-awareness, which allows devices to sense and monitor their ambient environment, analyze the current situations, and respond to situation changes by adapting their behavior. Situation-aware (SA) ubicomp software will be very useful in various application areas, such as homeland security, business, education, health care, and environmental control. However, many challenging issues need to be addressed for developing SA ubicomp software. The following are four major challenges for most SA ubicomp software: Severe resource constraints of embedded or handheld devices (communication bandwidth, battery power, computing power, etc.). Ad hoc communications among devices. The efficiency of detecting situation changes in fast changing environments. Volatile software requirements in ubicomp environments. Model-driven development methodologies  can effectively separate application logic from the underlying technologies and support rapid development of new interoperability specifications based on proven, tested application models. Middleware is an important enabling technique for model-driven development. However, in ubicomp, it is difficult to create extensive models capturing the volatile software requirements before source code is written, and the congruence of models and implementations is maintained. Agile development methodologies  capture just-in-time requirements, but cannot provide support for considering the underlying resource constraints and ad-hoc communication with the application requirements in a systematic way and validate the implementation easily. Model-driven development or agile development alone cannot address all the issues for developing SA ubicomp software. Combining model-driven and agile development  seems to be a promising solution. In this address, the current state of the art of model-driven and agile software development will be discussed. In particular, two important enabling techniques, SA middleware  and languages for specifying SAW requirements , for model-driven agile development (MAD) for SA ubicomp application software will be presented. Future directions for utilizing MAD methodologies to develop SA ubicomp application software with multiple QoS properties will also be discussed.