User Tools

Site Tools


dido:public:ra:1.4_req:2_nonfunc:20_maintainability:modularity

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dido:public:ra:1.4_req:2_nonfunc:20_maintainability:modularity [2021/01/06 15:40]
nick
dido:public:ra:1.4_req:2_nonfunc:20_maintainability:modularity [2021/08/11 13:01] (current)
murphy
Line 1: Line 1:
-====== 4.2.3.1 Modularity ======+====== 4.3.3.1 Modularity ======
 [[dido:​public:​ra:​1.4_req:​2_nonfunc:​20_maintainability| Return to Maintainability]] [[dido:​public:​ra:​1.4_req:​2_nonfunc:​20_maintainability| Return to Maintainability]]
- 
-  * **<color #​FF0000><​todo @char>​Please Review</​todo></​color>​** 
- 
  
 ===== About ===== ===== About =====
-[[dido:​public:​ra:​1.4_req:​2_nonfunc:​20_maintainability:​modularity| Return to Top]] +**[[dido:​public:​ra:​xapend:​xapend.a_glossary:​m:​modularity]]** describes a characteristic of a system or program to be organized into smaller, reusable components. Each component is self-contained ​and provides ​an [[dido:​public:​ra:​xapend:​xapend.a_glossary:​i:​interface|interface]] ​that describes the functionality it offers to other components of the system. It optionally provides a set of interfaces ​required ​to fulfill its functionality. In [[dido:​public:​ra:​xapend:​xapend.a_glossary:​o:​oop]], ​this functionality is encapsulated as set of data attributes. The [[dido:​public:​ra:​xapend:​xapend.a_glossary:​m:​module]] exposes access to these data attributes by defining public interfaces other components can call to manage and manipulate the data attributes of the [[dido:​public:​ra:​xapend:​xapend.a_glossary:​o:​object|object]] ​(i.e., Module). If the component relies on other components, then it can specify the required components (i.e., Modules).
- +
-**[[dido:​public:​ra:​xapend:​xapend.a_glossary:​m:​modularity]]** describes a characteristic of a system or program to be organized into smaller, reusable components. Each component is self-contained ​providing ​an interface that describes the functionality it offers to other components of the system. It optionally provides a set of interfaces ​it requires in order to fulfill its functionality. In [[dido:​public:​ra:​xapend:​xapend.a_glossary:​o:​oop]], ​the functionality is encapsulated as set of data attributes. The [[dido:​public:​ra:​xapend:​xapend.a_glossary:​m:​module]] exposes access to the data attributes by defining public interfaces ​that other components can call to manage and manipulate the data attributes of the object (i.e., Module). If the component relies on other components, then it can specify the required components (i.e., Modules).+
  
-Many Modules are described by files that only describe the interface to the Module and contains ​no actual functionality. For example, in C/C++, these Module interfaces are described using header files (i.e., ''​.h'',​ ''​.hpp''​) files; in Java the file is a regular ''​.java'' ​file but contains ​the key word ''​interface''​ in the class descriptor; in [[dido:​public:​ra:​xapend:​xapend.a_glossary:​c:​corba]],​ interfaces are described as stubs. ECMAScript (i.e., JavaScript),​ PHP, etc. uses the concept of [[dido:​public:​ra:​xapend:​xapend.a_glossary:​d:​ducktyping]] at runtime to accomplish the equivalent of interfaces (i.e., it is based on the methods defined within a Module at runtime rather than on a static, abstract fixed interface).+Many Modules are described by files that only describe the interface to the Module and contain ​no actual functionality. For example, in C/C++, these Module interfaces are described using header files (i.e., ''​.h'',​ ''​.hpp''​) files; in Java these files are regular ''​.java'' ​files but contain ​the key word ''​interface''​ in their [[dido:​public:​ra:​xapend:​xapend.a_glossary:​c:​class|class]] ​descriptor; in [[dido:​public:​ra:​xapend:​xapend.a_glossary:​c:​corba]],​ interfaces are described as stubs. ECMAScript (i.e., ​[[dido:​public:​ra:​xapend:​xapend.a_glossary:​j:​javascript|JavaScript]]), PHP, etc. use the concept of [[dido:​public:​ra:​xapend:​xapend.a_glossary:​d:​ducktyping]] at runtime to accomplish the equivalent of interfaces (i.e., it is based on the methods defined within a Module at runtime rather than on a static, abstract fixed interface).
  
 <figure Modulemodle>​ <figure Modulemodle>​
 {{  :​dido:​public:​ra:​1.4_req:​2_nonfunc:​20_maintainability:​module_model.png?​400 ​ |}} {{  :​dido:​public:​ra:​1.4_req:​2_nonfunc:​20_maintainability:​module_model.png?​400 ​ |}}
-<​caption>​Modeling Modules Provided and Required Interfaces.</​caption>​+<​caption>​Modeling Modules ​with Provided and Required Interfaces.</​caption>​
 </​figure>​ </​figure>​
  
-Regardless of kind of implementation (i.e., interface, stubs, DuckTyping, etc.), APIs need to be public, formalized and freely available to the general public at no cost. The benefit of using interfaces, stubs, or headers is that un-implemented or mismatched functionality can be checked at compile or link time. Dynamic [[dido:​public:​ra:​xapend:​xapend.a_glossary:​p:​plug_in]] interfaces (i.e, DuckTyping) can only be checked at runtime. However, dynamic type is very definitely modular. One way around ​the run-time ​error is to always provide a default implementation.+Regardless of the kind of implementation (i.e., interface, stubs, DuckTyping, etc.), APIs need to be public, formalized and freely available to the general public at no cost. The benefit of using interfaces, stubs, or headers is that un-implemented or mismatched functionality can be checked at compile or link time. Dynamic [[dido:​public:​ra:​xapend:​xapend.a_glossary:​p:​plug_in]] interfaces (i.e, DuckTyping) can only be checked at runtime. However, dynamic type is very definitely modular. One way around run-time ​errors ​is to always provide a default implementation.
  
-The use of Modules allows ​for the architecture and design of a system or program to be re-factored by extracting functionality into new Modules, combining Modules into a new Module, or composing Modules from other Modules. Often the rules for refactoring a system of a program follow many of the same rules as data [[dido:​public:​ra:​xapend:​xapend.a_glossary:​n:​normalization]].+The use of Modules allows the architecture and design of a system or program to be re-factored by extracting functionality into new Modules, combining Modules into a new Module, or composing Modules from other Modules. Often the rules for refactoring a system of a program follow many of the same rules as data [[dido:​public:​ra:​xapend:​xapend.a_glossary:​n:​normalization]].
  
 Yiming et al.(( Yiming Xiang, Weifeng Pan, Haibo Jiang, Yunfang Zhu, Hao Li, Yiming et al.(( Yiming Xiang, Weifeng Pan, Haibo Jiang, Yunfang Zhu, Hao Li,
Line 25: Line 20:
 14 February 2019, Entropy, ​ 14 February 2019, Entropy, ​
 Accessed 3 Aug 2020, [[https://​www.mdpi.com/​1099-4300/​21/​4/​344/​htm]] Accessed 3 Aug 2020, [[https://​www.mdpi.com/​1099-4300/​21/​4/​344/​htm]]
-)) introduce ​complex network theory into software engineering to develop ​a metric ​for measuring Modularity. They analyze ​existing software by representing it as a network using feature coupling network (FCN). Each method and attribute ​are considered a node in the node network. Couplings between methods and attributes are considered edges. Edge Weight represents a weighted value based on the number of invocation paths for the node (i.e., method '''​A'''​ is called 2 times, ​is a weight of '''​2''',​ attribute is used once, gets a weight of '''​1'''​). ​+)) introduced the use of complex network theory into software engineering ​with which to develop ​metrics ​for measuring Modularity. They analyzed ​existing software by representing it as a network using feature coupling network (FCN). Each method and attribute ​is considered a node in the [[dido:​public:​ra:​xapend:​xapend.a_glossary:​n:​node_network|node network]]. Couplings between methods and attributes are considered edges. Edge Weight represents a weighted value based on the number of invocation paths for the [[dido:​public:​ra:​xapend:​xapend.a_glossary:​n:​node|node]] (i.e., method '''​A'''​ is called 2 times, ​has a weight of '''​2''', ​each attribute is used once, gets a weight of '''​1'''​). ​
  
   : ''​FCN = ( N, E, Ψ )''​   : ''​FCN = ( N, E, Ψ )''​
Line 35: Line 30:
     * ''​Ψ''​ : the Edge Weight (number of invocation paths)     * ''​Ψ''​ : the Edge Weight (number of invocation paths)
  
-Yiming et al., apply the Weyuker’s criteria which is widely used in the field of software metrics, to validate ​the modularity as a software metric theoretically,​ and also perform an empirical evaluation using open-source Java software systems to show its effectiveness as a software metric to measure software modularity. ​+Yiming et al., apply Weyuker’s criteriawhich are widely used in the field of software metrics, to validate modularity as a software metric theoretically,​ and also to perform an empirical evaluation using open-source Java software systems to show its effectiveness as a software metric to measure software modularity. ​
  
 ===== DIDO Specifics ===== ===== DIDO Specifics =====
 [[dido:​public:​ra:​1.4_req:​2_nonfunc:​20_maintainability:​modularity| Return to Top]] [[dido:​public:​ra:​1.4_req:​2_nonfunc:​20_maintainability:​modularity| Return to Top]]
  
-Although ​the Modularity was primarily developed to look at software, it can also be applied to distributed systems by changing the definition of '''​N'''​ from the number of attribute ​or methods to the number of [[dido:​public:​ra:​xapend:​xapend.a_glossary:​p:​publish-subscribe | Publishers and Subscribers]] , and the '''​E'''​ to the number of couplings between the publishers and subscribers. ​'''​Ψ'''​ would be a weighting for the volume of couplings between ​the publishers and subscribers.+Although Modularity was primarily developed to look at software, it can also be applied to [[dido:​public:​ra:​xapend:​xapend.a_glossary:​d:​distsystem|distributed systems]] by changing the definition of ''​N''​ from the number of attributes ​or methods to the number of [[dido:​public:​ra:​xapend:​xapend.a_glossary:​p:​publish-subscribe | Publishers and Subscribers]],​ and ''​E''​ to the number of couplings between the publishers and subscribers. ''​Ψ''​ would then be a weighting for the volume of couplings between publishers and subscribers.
  
-In Practice ​this meansthat centralizing ​functionality into a normalized set of [[dido:​public:​ra:​xapend:​xapend.a_glossary:​e:​endpoint | Endpoints]]that couplings ​are the connections between ​the endpoints and the volume of traffic represents a weighting, ​then we are reduced to three variables: ''​N,​ E''​ and ''​Ψ''​. ​This comes down to the age old question: is it better to have one command with 100 options, 100 commands with no options or a set of commands that can share a restricted set of options. Its obvious that the first two choices are unacceptable. The key comes down to the last option ​where the options are all related based on the functionality of the command.+In practice ​this means that if functionality ​is centralized ​into a normalized set of [[dido:​public:​ra:​xapend:​xapend.a_glossary:​e:​endpoint | Endpoints]] ​such that couplings ​become ​the connections between endpoints and the volume of traffic represents a weighting, ​the end result is that we are reduced to three variables: ''​N''​''​E''​ and ''​Ψ''​. ​Thus, we must address ​the age old question: is it better to have one command with 100 options, 100 commands with no optionsor a set of commands that can share a restricted set of options? It'​s ​obvious that the first two choices are unacceptable ​so we are left with with the last choice ​where the options are all related based on the functionality of the command.
  
  
dido/public/ra/1.4_req/2_nonfunc/20_maintainability/modularity.1609965617.txt.gz · Last modified: 2021/01/06 15:40 by nick