  Self-adaptive software (SAS) is capable of adjusting its behavior in response
to meaningful changes in the operational context and itself. Due to the
inherent volatility of the open and changeable environment in which SAS is
embedded, the ability of adaptation is highly demanded by many
software-intensive systems. Two concerns, i.e., the requirements uncertainty
and the context uncertainty are most important among others at Requirements
Engineering (RE) stage. However, requirements analyzers can hardly figure out
the mathematical relation between requirements, system behavior and context,
especially for complex and nonlinear systems, due to the existence of above
uncertainties, misunderstanding and ambiguity of prior knowledge. An essential
issue to be addressed is how to model and specify these uncertainties at RE
stage and how to utilize the prior knowledge to achieve adaptation. In this
paper, we propose a fuzzy-based approach to modeling uncertainty and achieving
evolution. The approach introduces specifications to describe fuzziness. Based
on the specifications, we derive a series of reasoning rules as knowledge base
for achieving adaptation and evolution. These two targets are implemented
through four reasoning schemas from a control theory perspective. Specifically,
forward reasoning schema is used for direct adaptation; backward reasoning
schema is used for optimal adaptation. Parameter-identified schema implements
learning evolution by considering SAS as the gray-box system, while
system-identified reasoning schema implements learning evolution by considering
SAS as the gray-box system. The former two schemas function as the control
group, while the latter two are de-signed as the experimental groups to
illustrate the learning ability. Our approach is implemented under three types
of context through the demonstration of a mobile computing application.
