The goal of this article is to provide a rigorous conceptual framework for defining the concepts of dependability and resilience. Since the seventies, the terms dependability and resilience have been used in nearly all the scientific and technological fields related to Information and Communication systems. The introduction and use of these concepts in all these fields makes it difficult to have a common and precise definition. Having such a definition is nevertheless mandatory for the software and systems engineering research community that create development processes, languages and tools to support the engineering of products that would be required to be dependable or resilient. For this, we introduce an abstract and generic terminology defined mathematically to be used when speaking about dependability and resiliency. We also provide some abstract semantic descriptions to these terminological elements. This formal framework is defined from a software engineering perspective, which means that we define its components such that they are useful for the development or improvement of analysis, architectural design, detailed design, implementation, verification and maintenance phases. To this aim, we provide the necessary elements in accordance with a model driven engineering perspective that enable the definition of a new modelling language for dependable and resilient systems.