====== 4.3.1.1 Adaptability ====== [[dido:public:ra:1.4_req:2_nonfunc:10_portability | Return to Portability ]] ===== About ===== [[dido:public:ra:1.4_req:2_nonfunc:10_portability:01_adapt| Return to the Top]] [[dido:public:ra:xapend:xapend.a_glossary:a:adaptability| Adaptability]] is the degree to which a product or system can effectively and efficiently be adapted for different or evolving hardware, software or other operational or usage environments. In other words, it is the extent to which software systems adapts to changes in its environment such as [[dido:public:ra:xapend:xapend.a_glossary:o:os|operating system]], databases /* what aspect of databases are we adapting to? its content or the nature of the database technology being used? If it's technology -- recommend that this be replaced with "database technology" */, runtime environments, etc. An adaptable software system tolerates environmental changes without the need for external intervention. For example, a dual-mode cell phone can find out by itself if any one of the two wireless standards it supports is available at its current location and, if so, starts using that standard.(( Nary Subramanian and Lawrence Chung, __Metrics for Software Adaptability__, University of Texas - Dallas, Accessed 29 July 2020, [[https://personal.utdallas.edu/~chung/ftp/sqm.pdf]] )). Nary Subramanian & Lawrence Chung1 describe software architectures as composed of two elements: components and connectors. Adaptability in software can occur when either the components of the software change or the connectors between the software change. [[dido:public:ra:xapend:xapend.a_glossary:s:swadapt]] is when a software component with a well-defined, stable [[dido:public:ra:xapend:xapend.a_glossary:a:api]] can be exchanged using another component with minimal effort, as long as that component adheres to the API. For example, [[dido:public:ra:xapend:xapend.a_glossary:s:sql|SQL]] describes an API for a database component. As long as the software adheres to the standard SQL API, the [[dido:public:ra:xapend:xapend.a_glossary:d:dbms]] can be exchanged between, for example, [[https://www.oracle.com/database/technologies/| Oracle]] and [[https://www.postgresql.org/ | PostgreSQL]], with no to minimal impact. /* tried to phrase this better to communicate the idea that we're just using swapping out Oracle with PostgreSQL as an example only .. or that we're saying that Oracle and PostgreSQL can swapped out .. something I'm not even sure can be done. Also corrected the spelling of PostgreSQL -- you were missing a "g" .. :-)*/ [[dido:public:ra:xapend:xapend.a_glossary:a:archdaptability]] is when the connectors between software components change without having to change the components. This again comes down to having well-defined, stable APIs for the connectors. For example, the [[dido:public:ra:xapend:xapend.a_glossary:u:unix|Unix]] File System (UnixFS) is a connector between software components and the physical filesystem. The associated UnixFS library can be exchanged for the [[https://ipfs.io/ | InterPlanetary File System (IPFS) ]] UnixFS connector and the software component should have no to minimal impact. Nary Subramanian & Lawrence Chung1 further define the following adaptability indices. * **EAI** - **Element Adaptability Index** is a general purpose index, which represents a weighted value of adaptability where **''1''** represents complete adaptability and **''0''** represents no adaptability * **AAI** - **Architecture Adaptability Index** is an EAI based on the number of elements in the architecture \\ o AAI = sum{n=1}{+infty}{EIA_{arc elements}} \\ \\ * **SAI** - **Software adaptability index** is an EAI based on the number of architectures for the software \\ o SAI = sum{n=1}{+infty}{EIA_{sw elements}} \\ \\ ===== DIDO Specifics ===== [[dido:public:ra:1.4_req:2_nonfunc:10_portability:01_adapt| Return to the Top]] : To be added/expanded in future revisions of the DIDO RA /**=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /* To add a discussion page to this page, comment out the line that says ~~DISCUSSION:off~~ */ ~~DISCUSSION:on|Outstanding Issues~~ ~~DISCUSSION:off~~