Saheed. A. Busari and Emmanuel Letier
RADAR is a lightweight modelling language and tool for analysing software requirements and architecture decisions (Busari and Letier, 2016). This report presents an application of RADAR to the analysis of the Emergency Response System, which we refer to, henceforth, as Situation Awareness System (SAS).
Our analysis is motivated by and based on previous work presented in ICSE 2014 (Letier et al.,2014). Our model parameters are obtained from Table 1 in GMU report “Guided Exploration of the Architectural Solution Space in the Face of Uncertainty” by Naeem et al., 2013.
The Emergency Response System was originally introduced by Naeem et al.,2013 in their research presented at ICSE 2013 on the early architecture selection problem under uncertainty. The SAS is a mobile software application developed to deploy individuals in cases of emergencies, and allows deployed individuals to share information about the status of an emergency situation.
However, due to the proliferation of mobile technologies, standards, and platforms, the SAS was considered for an improvement to allow deployed personnels to send and receive real time information about the status of an emergency situation (e.g., interactive overlay on maps) and coordinate with one another (e.g., send reports, chat, and share video streams)
In view of the above goal, the SAS project team, which consisted of academics and engineers from a government agency, identified and described the design decisions and alternative options as presented in figure 1. The team is faced with the decision of selecting design options to be implemented in the new system that give maximum net benefit to the stakeholders at a minimal cost.
Objective Max ENB = EV(NB);
Objective Min Risk;
NB = BatteryUsage_weight * BatteryUsage_preference +
ResponseTime_weight * ResponseTime_preference +
Reliability_weight * Reliability_preference +
RampUpTime_weight * RampUpTime_preference +
Cost_weight * Cost_preference +
DevelopmentTime_weight * DevelopmentTime_preference +
DeploymentTime_weight * DeploymentTime_preference ;
BatteryUsage_weight = deterministic(9);
ResponseTime_weight = deterministic(7);
Reliability_weight = deterministic(3);
RampUpTime_weight = deterministic(2);
Cost_weight = deterministic(1);
DevelopmentTime_weight = deterministic(2);
DeploymentTime_weight = deterministic(2);
Risk = 1 - ( (1 - BatteryUsage_Risk) *
(1 - ResponseTime_Risk) *
(1 - Reliability_Risk) *
(1 - RampUpTime_Risk) *
(1 - Cost_Risk) *
(1 - DevelopmentTime_Risk) *
(1 - DeploymentTime_Risk)
) ;
BatteryUsage_Preference = (BatteryUsage - BatteryUsage_worst)
/(BatteryUsage_best - BatteryUsage_worst);
BatteryUsage_Risk = Pr(BatteryUsage < BatteryUsage_must);
BatteryUsage_best = deterministic(24) ;
BatteryUsage_worst = deterministic(111) ;
BatteryUsage_must = deterministic(52);
BatteryUsage = BatteryUsage_LocationFinding +
BatteryUsage_FileSharing +
BatteryUsage_ReportSyncing +
BatteryUsage_ChatProtocol +
BatteryUsage_MapAccess +
BatteryUsage_HardwarePlatform +
BatteryUsage_Connectivity +
BatteryUsage_DataBase +
BatteryUsage_ArchitecturalPattern +
BatteryUsage_DataExchangeFormat;
BatteryUsage_LocationFinding = decision("Location Finding"){
"GPS" : triangular(10, 10, 14);
"radio triangulation" : triangular(4, 5, 6);
}
BatteryUsage_FileSharing = decision("File Sharing"){
"OpenIntent" : triangular(5, 5, 6);
"In house" : triangular(0, 0, 0);
}
BatteryUsage_ReportSyncing = decision("Report Syncing"){
"Explicit" : triangular(1, 3, 4);
"Implicit" : triangular(7, 8, 10);
}
BatteryUsage_ChatProtocol = decision("Chat Protocol"){
"XMPP (Open Fire)" : triangular(4, 5, 6);
"In house" : triangular(2, 3, 12);
}
BatteryUsage_MapAccess = decision("Map Access"){
"On Demand (Google)" : triangular(4, 4, 12);
"Cache on server" : triangular(4, 5, 12);
"Preloaded (ESRI)" : triangular(5, 7, 7);
}
BatteryUsage_HardwarePlatform = decision("Hardware Platform"){
"Nexus I (HTC)" : triangular(3, 5, 5);
"Droid (Motorola)" : triangular(4, 5, 14);
}
BatteryUsage_Connectivity = decision("Connectivity"){
"Wifi" : triangular(3, 4, 5);
"3G on Nexus I" : triangular(1, 2, 3);
"3G on Droid" : triangular(2, 4, 5);
"Bluetooth" : triangular(2, 3, 15);
}
BatteryUsage_DataBase = decision("Database"){
"MySQL" : triangular(3, 6, 7);
"sqLite" : triangular(5, 5, 10);
}
BatteryUsage_ArchitecturalPattern = decision("Architectural Pattern"){
"Peer-to-peer" : triangular(7, 8, 10);
"Client-Server" : triangular(5, 6, 7);
"Push-based" : triangular(2, 4, 4);
}
BatteryUsage_DataExchangeFormat = decision("Data Exchange Format"){
"XML" : triangular(3, 4, 6);
"Compressed XML" : triangular(5, 5, 7);
"Unformatted data" : triangular(1, 1, 3);
}
ResponseTime_Preference = (ResponseTime - ResponseTime_worst)
/(ResponseTime_best - ResponseTime_worst);
ResponseTime_Risk = Pr(ResponseTime < ResponseTime_must);
ResponseTime_best = deterministic(203);
ResponseTime_worst = deterministic(2850);
ResponseTime_must = deterministic(882);
ResponseTime = ResponseTime_LocationFinding +
ResponseTime_FileSharing +
ResponseTime_ReportSyncing +
ResponseTime_ChatProtocol +
ResponseTime_MapAccess +
ResponseTime_HardwarePlatform +
ResponseTime_Connectivity +
ResponseTime_DataBase +
ResponseTime_ArchitecturalPattern +
ResponseTime_DataExchangeFormat;
ResponseTime_LocationFinding = decision("Location Finding"){
"GPS" : triangular(480, 500, 990);
"radio triangulation" : triangular(50, 100, 600);
}
ResponseTime_FileSharing = decision("File Sharing"){
"OpenIntent" : triangular(50, 65, 70);
"In house" : triangular(40, 60, 100);
}
ResponseTime_ReportSyncing = decision("Report Syncing"){
"Explicit" : triangular(20, 30, 50);
"Implicit" : triangular(1, 4, 10);
}
ResponseTime_ChatProtocol = decision("Chat Protocol"){
"XMPP (Open Fire)" : triangular(40, 60, 70);
"In house" : triangular(30, 40, 200);
}
ResponseTime_MapAccess = decision("Map Access"){
"On Demand (Google)" : triangular(700, 800, 900);
"Cache on server" : triangular(1, 4, 500);
"Preloaded (ESRI)" : triangular(1, 2, 3);
}
ResponseTime_HardwarePlatform = decision("Hardware Platform"){
"Nexus I (HTC)" : triangular(40, 60, 65);
"Droid (Motorola)" : triangular(50, 55, 200);
}
ResponseTime_Connectivity = decision("Connectivity"){
"Wifi" : triangular(30, 35, 40);
"3G on Nexus I" : triangular(20, 25, 40);
"3G on Droid" : triangular(20, 25, 40);
"Bluetooth" : triangular(25, 30, 200);
}
ResponseTime_DataBase = decision("Database"){
"MySQL" : triangular(20, 25, 30);
"sqLite" : triangular(8, 10, 50);
}
ResponseTime_ArchitecturalPattern = decision("Architectural Pattern"){
"Peer-to-peer" : triangular(10, 20, 30);
"Client-Server" : triangular(25, 30, 80);
"Push-based" : triangular(15, 25, 40);
}
ResponseTime_DataExchangeFormat = decision("Data Exchange Format"){
"XML" : triangular(20, 35, 80);
"Compressed XML" : triangular(12, 20, 35);
"Unformatted data" : triangular(3, 10, 15);
}
Reliability_Preference = (Reliability - Reliability_worst)
/(Reliability_best - Reliability_worst);
Reliability_Risk = Pr(Reliability < Reliability_must);
Reliability_best = deterministic(792);
Reliability_worst = deterministic(535);
Reliability_must = deterministic(721);
Reliability = Reliability_LocationFinding +
Reliability_FileSharing +
Reliability_ReportSyncing +
Reliability_ChatProtocol +
Reliability_MapAccess +
Reliability_HardwarePlatform +
Reliability_Connectivity +
Reliability_DataBase +
Reliability_ArchitecturalPattern +
Reliability_DataExchangeFormat;
Reliability_LocationFinding = decision("Location Finding"){
"GPS" : triangular(60, 75, 80);
"radio triangulation" : triangular(90, 92, 99);
}
Reliability_FileSharing = decision("File Sharing"){
"OpenIntent" : triangular(90, 95, 99);
"In house" : triangular(80, 92, 96);
}
Reliability_ReportSyncing = decision("Report Syncing"){
"Explicit" : triangular(85, 88, 90);
"Implicit" : triangular(30, 40, 200);
}
Reliability_ChatProtocol = decision("Chat Protocol"){
"XMPP (Open Fire)" : triangular(94, 95, 99);
"In house" : triangular(60, 96, 97);
}
Reliability_MapAccess = decision("Map Access"){
"On Demand (Google)" : triangular(70, 91, 92);
"Cache on server" : triangular(85, 97, 98);
"Preloaded (ESRI)" : triangular(85, 90, 99);
}
Reliability_HardwarePlatform = decision("Hardware Platform"){
"Nexus I (HTC)" : deterministic(0);
"Droid (Motorola)" : deterministic(0);
}
Reliability_Connectivity = decision("Connectivity"){
"Wifi" : triangular(80, 85, 90);
"3G on Nexus I" : triangular(80, 88, 99);
"3G on Droid" : triangular(80, 88, 99);
"Bluetooth" : triangular(50, 85, 85);
}
Reliability_DataBase = decision("Database"){
"MySQL" : triangular(85, 90, 99);
"sqLite" : triangular(70, 90, 95);
}
Reliability_ArchitecturalPattern = decision("Architectural Pattern"){
"Peer-to-peer" : triangular(60, 66, 70);
"Client-Server" : triangular(85, 95, 97);
"Push-based" : triangular(90, 94, 99);
}
Reliability_DataExchangeFormat = decision("Data Exchange Format"){
"XML" : deterministic(0);
"Compressed XML" : deterministic(0);
"Unformatted data" : deterministic(0);
}
RampUpTime_Preference = (RampUpTime - RampUpTime_worst)
/(RampUpTime_best - RampUpTime_worst);
RampUpTime_Risk = Pr(RampUpTime < RampUpTime_must);
RampUpTime_best = deterministic(31)
RampUpTime_worst = deterministic(83)
RampUpTime_must = deterministic(58)
RampUpTime = RampUpTime_LocationFinding +
RampUpTime_FileSharing +
RampUpTime_ReportSyncing +
RampUpTime_ChatProtocol +
RampUpTime_MapAccess +
RampUpTime_HardwarePlatform +
RampUpTime_Connectivity +
RampUpTime_DataBase +
RampUpTime_ArchitecturalPattern +
RampUpTime_DataExchangeFormat
RampUpTime_LocationFinding = decision("Location Finding"){
"GPS" : triangular(5, 6, 7);
"radio triangulation" : triangular(7, 8, 9);
}
RampUpTime_FileSharing = decision("File Sharing"){
"OpenIntent" : triangular(8, 9, 10);
"In house" : triangular(5, 8, 12);
}
RampUpTime_ReportSyncing = decision("Report Syncing"){
"Explicit" : triangular(2, 2, 3);
"Implicit" : triangular(1, 2, 2);
}
RampUpTime_ChatProtocol = decision("Chat Protocol"){
"XMPP (Open Fire)" : triangular(5, 6, 7);
"In house" : triangular(3, 4, 14);
}
RampUpTime_MapAccess = decision("Map Access"){
"On Demand (Google)" : triangular(7, 9, 10);
"Cache on server" : triangular(7, 9, 10);
"Preloaded (ESRI)" : triangular(10, 13, 14);
}
RampUpTime_HardwarePlatform = decision("Hardware Platform"){
"Nexus I (HTC)" : deterministic(0);
"Droid (Motorola)" : deterministic(0);
}
RampUpTime_Connectivity = decision("Connectivity"){
"Wifi" : triangular(1, 3, 4);
"3G on Nexus I" : triangular(1, 2, 3);
"3G on Droid" : triangular(1, 2, 3);
"Bluetooth" : triangular(1, 2, 8);
}
RampUpTime_DataBase = decision("Database"){
"MySQL" : triangular(1, 2, 3);
"sqLite" : triangular(3, 4, 5);
}
RampUpTime_ArchitecturalPattern = decision("Architectural Pattern"){
"Peer-to-peer" : triangular(10, 11, 13);
"Client-Server" : triangular(7, 8, 10);
"Push-based" : triangular(9, 10, 12);
}
RampUpTime_DataExchangeFormat = decision("Data Exchange Format"){
"XML" : triangular(2, 3, 4);
"Compressed XML" : triangular(4, 5, 6);
"Unformatted data" : triangular(1, 2, 3);
}
Cost_Preference = (Cost - Cost_worst)
/(Cost_best - Cost_worst);
Cost_Risk = Pr(Cost < Cost_must);
Cost_best = deterministic(550);
Cost_worst = deterministic(2250);
Cost_must = deterministic(1290);
Cost = Cost_LocationFinding +
Cost_FileSharing +
Cost_ReportSyncing +
Cost_ChatProtocol +
Cost_MapAccess +
Cost_HardwarePlatform +
Cost_Connectivity +
Cost_DataBase +
Cost_ArchitecturalPattern +
Cost_DataExchangeFormat;
Cost_LocationFinding = decision("Location Finding"){
"GPS" : triangular(50, 80 100);
"radio triangulation" : deterministic(0);
}
Cost_FileSharing = decision("File Sharing"){
"OpenIntent" : deterministic(0);
"In house" : deterministic(0);
}
Cost_ReportSyncing = decision("Report Syncing"){
"Explicit" : deterministic(0);
"Implicit" : deterministic(0);
}
Cost_ChatProtocol = decision("Chat Protocol"){
"XMPP (Open Fire)" : deterministic(0);
"In house" : deterministic(0);
}
Cost_MapAccess = decision("Map Access"){
"On Demand (Google)" : deterministic(0);
"Cache on server" : triangular(700, 900, 950);
"Preloaded (ESRI)" : triangular(100, 170, 200);
}
Cost_HardwarePlatform = decision("Hardware Platform"){
"Nexus I (HTC)" : triangular(500, 525, 530);
"Droid (Motorola)" : triangular(520, 520, 600);
}
Cost_Connectivity = decision("Connectivity"){
"Wifi" : triangular(70, 80, 85);
"3G on Nexus I" : triangular(360, 400, 600);
"3G on Droid" : triangular(360, 400, 600);
"Bluetooth" : triangular(50, 70, 200);
}
Cost_DataBase = decision("Database"){
"MySQL" : deterministic(0);
"sqLite" : deterministic(0);
}
Cost_ArchitecturalPattern = decision("Architectural Pattern"){
"Peer-to-peer" : deterministic(0);
"Client-Server" : deterministic(0);
"Push-based" : deterministic(0);
}
Cost_DataExchangeFormat = decision("Data Exchange Format"){
"XML" : deterministic(0);
"Compressed XML" : deterministic(0);
"Unformatted data" : deterministic(0);
}
DevelopmentTime_Preference = (DevelopmentTime - DevelopmentTime_worst)
/(DevelopmentTime_best - DevelopmentTime_worst);
DevelopmentTime_Risk = Pr(DevelopmentTime < DevelopmentTime_must);
DevelopmentTime_best = deterministic(61) ;
DevelopmentTime_worst = deterministic(149);
DevelopmentTime_must = deterministic(111);
DevelopmentTime = DevelopmentTime_LocationFinding +
DevelopmentTime_FileSharing +
DevelopmentTime_ReportSyncing +
DevelopmentTime_ChatProtocol +
DevelopmentTime_MapAccess +
DevelopmentTime_DataBase +
DevelopmentTime_ArchitecturalPattern +
DevelopmentTime_DataExchangeFormat;
DevelopmentTime_LocationFinding = decision("Location Finding"){
"GPS" : triangular(3, 4, 5);
"radio triangulation" : triangular(10, 14, 15);
}
DevelopmentTime_FileSharing = decision("File Sharing"){
"OpenIntent" : triangular(3, 4, 6);
"In house" : triangular(5, 6, 15);
}
DevelopmentTime_ReportSyncing = decision("Report Syncing"){
"Explicit" : triangular(5, 6, 7);
"Implicit" : triangular(3, 4, 4);
}
DevelopmentTime_ChatProtocol = decision("Chat Protocol"){
"XMPP (Open Fire)" : triangular(5, 6, 8);
"In house" : triangular(7, 8, 20);
}
DevelopmentTime_MapAccess = decision("Map Access"){
"On Demand (Google)" : triangular(14, 18, 21);
"Cache on server" : triangular(14, 18, 21);
"Preloaded (ESRI)" : triangular(20, 27, 30);
}
DevelopmentTime_DataBase = decision("Database"){
"MySQL" : triangular(15, 17, 18);
"sqLite" : triangular(15, 16, 22);
}
DevelopmentTime_ArchitecturalPattern = decision("Architectural Pattern"){
"Peer-to-peer" : triangular(20, 26, 30);
"Client-Server" : triangular(15, 16, 20);
"Push-based" : triangular(20, 24, 25);
}
DevelopmentTime_DataExchangeFormat = decision("Data Exchange Format"){
"XML" : triangular(6, 7, 8);
"Compressed XML" : triangular(7, 9, 10);
"Unformatted data" : triangular(3, 4, 5);
}
DeploymentTime_Preference = (DeploymentTime - DeploymentTime_worst)
/(DeploymentTime_best - DeploymentTime_worst);
DeploymentTime_Risk = Pr(DeploymentTime < DeploymentTime_must);
DeploymentTime_best = deterministic(21) ;
DeploymentTime_worst = deterministic(72) ;
DeploymentTime_must = deterministic(38);
DeploymentTime = DeploymentTime_LocationFinding +
DeploymentTime_FileSharing +
DeploymentTime_ReportSyncing +
DeploymentTime_ChatProtocol +
DeploymentTime_MapAccess +
DeploymentTime_Connectivity +
DeploymentTime_DataBase +
DeploymentTime_ArchitecturalPattern;
DeploymentTime_LocationFinding = decision("Location Finding"){
"GPS" : triangular(2, 3, 3);
"radio triangulation" : triangular(1, 1, 2);
}
DeploymentTime_FileSharing = decision("File Sharing"){
"OpenIntent" : triangular(1, 1, 2);
"In house" : deterministic(0);
}
DeploymentTime_ReportSyncing = decision("Report Syncing"){
"Explicit" : triangular(1, 2, 2);
"Implicit" : deterministic(1);
}
DeploymentTime_ChatProtocol = decision("Chat Protocol"){
"XMPP (Open Fire)" : triangular(1, 1, 2);
"In house" : deterministic(0);
}
DeploymentTime_MapAccess = decision("Map Access"){
"On Demand (Google)" : deterministic(0);
"Cache on server" : triangular(3, 4, 5);
"Preloaded (ESRI)" : triangular(3, 4, 5);
}
DeploymentTime_Connectivity = decision("Connectivity"){
"Wifi" : triangular(5, 6, 7);
"3G on Nexus I" : triangular(2, 3, 4);
"3G on Droid" : triangular(2, 3, 4);
"Bluetooth" : triangular(4, 5, 15);
}
DeploymentTime_DataBase = decision("Database"){
"MySQL" : triangular(10, 15, 16);
"sqLite" : triangular(13, 14, 22);
}
DeploymentTime_ArchitecturalPattern = decision("Architectural Pattern"){
"Peer-to-peer" : triangular(14, 18, 21);
"Client-Server" : triangular(7, 9, 10);
"Push-based" : triangular(8, 9, 12);
}
Our analysis result is similar to that obtained in Letier et al. ,2014. However, as a comparison, our previous analysis of the same emergency response system model in R took 5 minutes (compared to approx. 2 minutes used by RADAR) and required manual coding and significant optimisation of the simulation function in R (without optimisation, the simulation of the whole search-space would have taken 7 hours)
Here is a summary of the modelling and analysis information:
Objective | MaxENB |
Objective | MinRisk |
SolutionSpace | 6912 |
Minimal SolutionSet | 6912 |
Shortlisted | 15 |
Nbr. Variables | 117 |
Nbr. Parameters | 137 |
Nbr. Decisions | 10 |
Runtime(s) | 111 |
The model analysis generates the following shortlist of Pareto-optimal solutions:
ID | Location Finding | File Sharing | Report Syncing | Chat Protocol | Map Access | Hardware Platform | Connectivity | Database | Architectural Pattern | Data Exchange Format | ENB | Risk |
1 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Droid (Motorola) | Wifi | MySQL | Client-Server | Compressed XML | 16.37529833 | 0.9997 |
2 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Nexus I (HTC) | 3G on Droid | MySQL | Client-Server | Unformatted data | 15.96290754 | 0.5634 |
3 | radio triangulation | OpenIntent | Explicit | XMPP (Open Fire) | Preloaded (ESRI) | Nexus I (HTC) | 3G on Droid | MySQL | Client-Server | Unformatted data | 15.1679976 | 0.039 |
4 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Droid (Motorola) | 3G on Droid | MySQL | Client-Server | XML | 16.24388763 | 0.9863 |
5 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Droid (Motorola) | 3G on Droid | MySQL | Client-Server | Compressed XML | 16.32688836 | 0.9983 |
6 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Droid (Motorola) | Wifi | MySQL | Client-Server | XML | 16.2922976 | 0.9961 |
7 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Nexus I (HTC) | 3G on Nexus I | MySQL | Client-Server | Unformatted data | 15.79036997 | 0.4258 |
8 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Nexus I (HTC) | 3G on Droid | MySQL | Push-based | Unformatted data | 15.50738273 | 0.417 |
9 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Droid (Motorola) | 3G on Nexus I | MySQL | Client-Server | Unformatted data | 15.99582951 | 0.7475 |
10 | radio triangulation | OpenIntent | Explicit | XMPP (Open Fire) | Preloaded (ESRI) | Nexus I (HTC) | 3G on Droid | MySQL | Client-Server | XML | 15.24351815 | 0.06 |
11 | radio triangulation | OpenIntent | Explicit | XMPP (Open Fire) | Preloaded (ESRI) | Nexus I (HTC) | 3G on Droid | MySQL | Client-Server | Compressed XML | 15.32651889 | 0.1079 |
12 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Droid (Motorola) | Wifi | MySQL | Client-Server | Unformatted data | 16.21677705 | 0.9429 |
13 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Droid (Motorola) | 3G on Droid | MySQL | Client-Server | Unformatted data | 16.16836707 | 0.8782 |
14 | radio triangulation | OpenIntent | Implicit | XMPP (Open Fire) | Preloaded (ESRI) | Nexus I (HTC) | Wifi | MySQL | Client-Server | Unformatted data | 16.01131751 | 0.7632 |
15 | radio triangulation | OpenIntent | Explicit | XMPP (Open Fire) | Preloaded (ESRI) | Droid (Motorola) | 3G on Droid | MySQL | Client-Server | Unformatted data | 15.37345714 | 0.1928 |
These results show that all shortlisted solutions include options radio triangulation
, Open Intent
, XMPP (Open Fire)
, Preloaded (ESRI)
and MySQL
. This means that, in our model, these five options, respectively, outperform the GPS
option for decision Location Finding, In house
option for decision File Sharing, In house
option for decision Chat protocol, Cache on Server
and On Demand (Google)
options for decision Map Access and SqLite
option for decision Database on both objectives.
However, once these five options are selected, the shortlist includes all possible combinations of Report Syncing, Hardware Platform, Connectivity, Architectural pattern and Data Exchange Format; each combination representing different tradeoffs between maximising Expected Net Benefit (ENB) and minimising Risk.
To visualise such tradeoffs, RADAR generates the graph in Fig. 4 plotting the objective values for the shortlised solutions (shown squares at the top of the graph) and all other non shortlisted ones (shown as circles).
Analysing information value gives the following results that show that the information value for all model parameters is very low:
EVTPI = 0.04
Parameter | EVPPI |
---|---|
BatteryUsage_LocationFinding[GPS] | 0 |
BatteryUsage_LocationFinding[radio triangulation] | 0 |
BatteryUsage_FileSharing[OpenIntent] | 0 |
BatteryUsage_FileSharing[In house] | 0 |
BatteryUsage_ReportSyncing[Explicit] | 0 |
BatteryUsage_ReportSyncing[Implicit] | 0 |
BatteryUsage_ChatProtocol[XMPP (Open Fire)] | 0 |
BatteryUsage_ChatProtocol[In house] | 0 |
BatteryUsage_MapAccess[On Demand (Google)] | 0 |
BatteryUsage_MapAccess[Cache on server] | 0 |
BatteryUsage_MapAccess[Preloaded (ESRI)] | 0 |
BatteryUsage_HardwarePlatform[Nexus I (HTC)] | 0 |
BatteryUsage_HardwarePlatform[Droid (Motorola)] | 0 |
BatteryUsage_Connectivity[Wifi] | 0 |
BatteryUsage_Connectivity[3G on Nexus I] | 0 |
BatteryUsage_Connectivity[3G on Droid] | 0 |
BatteryUsage_Connectivity[Bluetooth] | 0 |
BatteryUsage_DataBase[MySQL] | 0 |
BatteryUsage_DataBase[sqLite] | 0 |
BatteryUsage_ArchitecturalPattern[Peer-to-peer] | 0 |
BatteryUsage_ArchitecturalPattern[Client-Server] | 0 |
BatteryUsage_ArchitecturalPattern[Push-based] | 0 |
BatteryUsage_DataExchangeFormat[XML] | 0 |
BatteryUsage_DataExchangeFormat[Compressed XML] | 0 |
BatteryUsage_DataExchangeFormat[Unformatted data] | 0 |
ResponseTime_LocationFinding[GPS] | 0 |
ResponseTime_LocationFinding[radio triangulation] | 0 |
ResponseTime_FileSharing[OpenIntent] | 0 |
ResponseTime_FileSharing[In house] | 0 |
ResponseTime_ReportSyncing[Explicit] | 0 |
ResponseTime_ReportSyncing[Implicit] | 0 |
ResponseTime_ChatProtocol[XMPP (Open Fire)] | 0 |
ResponseTime_ChatProtocol[In house] | 0 |
ResponseTime_MapAccess[On Demand (Google)] | 0 |
ResponseTime_MapAccess[Cache on server] | 0 |
ResponseTime_MapAccess[Preloaded (ESRI)] | 0 |
ResponseTime_HardwarePlatform[Nexus I (HTC)] | 0 |
ResponseTime_HardwarePlatform[Droid (Motorola)] | 0 |
ResponseTime_Connectivity[Wifi] | 0 |
ResponseTime_Connectivity[3G on Nexus I] | 0 |
ResponseTime_Connectivity[3G on Droid] | 0 |
ResponseTime_Connectivity[Bluetooth] | 0 |
ResponseTime_DataBase[MySQL] | 0 |
ResponseTime_DataBase[sqLite] | 0 |
ResponseTime_ArchitecturalPattern[Peer-to-peer] | 0 |
ResponseTime_ArchitecturalPattern[Client-Server] | 0 |
ResponseTime_ArchitecturalPattern[Push-based] | 0 |
ResponseTime_DataExchangeFormat[XML] | 0 |
ResponseTime_DataExchangeFormat[Compressed XML] | 0 |
ResponseTime_DataExchangeFormat[Unformatted data] | 0 |
Reliability_LocationFinding[GPS] | 0 |
Reliability_LocationFinding[radio triangulation] | 0 |
Reliability_FileSharing[OpenIntent] | 0 |
Reliability_FileSharing[In house] | 0 |
Reliability_ReportSyncing[Explicit] | 0 |
Reliability_ReportSyncing[Implicit] | 0 |
Reliability_ChatProtocol[XMPP (Open Fire)] | 0 |
Reliability_ChatProtocol[In house] | 0 |
Reliability_MapAccess[On Demand (Google)] | 0 |
Reliability_MapAccess[Cache on server] | 0 |
Reliability_MapAccess[Preloaded (ESRI)] | 0 |
Reliability_Connectivity[Wifi] | 0 |
Reliability_Connectivity[3G on Nexus I] | 0 |
Reliability_Connectivity[3G on Droid] | 0 |
Reliability_Connectivity[Bluetooth] | 0 |
Reliability_DataBase[MySQL] | 0 |
Reliability_DataBase[sqLite] | 0 |
Reliability_ArchitecturalPattern[Peer-to-peer] | 0 |
Reliability_ArchitecturalPattern[Client-Server] | 0 |
Reliability_ArchitecturalPattern[Push-based] | 0 |
RampUpTime_LocationFinding[GPS] | 0 |
RampUpTime_LocationFinding[radio triangulation] | 0 |
RampUpTime_FileSharing[OpenIntent] | 0 |
RampUpTime_FileSharing[In house] | 0 |
RampUpTime_ReportSyncing[Explicit] | 0 |
RampUpTime_ReportSyncing[Implicit] | 0 |
RampUpTime_ChatProtocol[XMPP (Open Fire)] | 0 |
RampUpTime_ChatProtocol[In house] | 0 |
RampUpTime_MapAccess[On Demand (Google)] | 0 |
RampUpTime_MapAccess[Cache on server] | 0 |
RampUpTime_MapAccess[Preloaded (ESRI)] | 0 |
RampUpTime_Connectivity[Wifi] | 0 |
RampUpTime_Connectivity[3G on Nexus I] | 0 |
RampUpTime_Connectivity[3G on Droid] | 0 |
RampUpTime_Connectivity[Bluetooth] | 0 |
RampUpTime_DataBase[MySQL] | 0 |
RampUpTime_DataBase[sqLite] | 0 |
RampUpTime_ArchitecturalPattern[Peer-to-peer] | 0 |
RampUpTime_ArchitecturalPattern[Client-Server] | 0 |
RampUpTime_ArchitecturalPattern[Push-based] | 0 |
RampUpTime_DataExchangeFormat[XML] | 0 |
RampUpTime_DataExchangeFormat[Compressed XML] | 0 |
RampUpTime_DataExchangeFormat[Unformatted data] | 0 |
Cost_LocationFinding[GPS] | 0 |
Cost_MapAccess[Cache on server] | 0 |
Cost_MapAccess[Preloaded (ESRI)] | 0 |
Cost_HardwarePlatform[Nexus I (HTC)] | 0 |
Cost_HardwarePlatform[Droid (Motorola)] | 0 |
Cost_Connectivity[Wifi] | 0 |
Cost_Connectivity[3G on Nexus I] | 0 |
Cost_Connectivity[3G on Droid] | 0 |
Cost_Connectivity[Bluetooth] | 0 |
DevelopmentTime_LocationFinding[GPS] | 0 |
DevelopmentTime_LocationFinding[radio triangulation] | 0 |
DevelopmentTime_FileSharing[OpenIntent] | 0 |
DevelopmentTime_FileSharing[In house] | 0 |
DevelopmentTime_ReportSyncing[Explicit] | 0 |
DevelopmentTime_ReportSyncing[Implicit] | 0 |
DevelopmentTime_ChatProtocol[XMPP (Open Fire)] | 0 |
DevelopmentTime_ChatProtocol[In house] | 0 |
DevelopmentTime_MapAccess[On Demand (Google)] | 0 |
DevelopmentTime_MapAccess[Cache on server] | 0 |
DevelopmentTime_MapAccess[Preloaded (ESRI)] | 0 |
DevelopmentTime_DataBase[MySQL] | 0 |
DevelopmentTime_DataBase[sqLite] | 0 |
DevelopmentTime_ArchitecturalPattern[Peer-to-peer] | 0 |
DevelopmentTime_ArchitecturalPattern[Client-Server] | 0 |
DevelopmentTime_ArchitecturalPattern[Push-based] | 0 |
DevelopmentTime_DataExchangeFormat[XML] | 0 |
DevelopmentTime_DataExchangeFormat[Compressed XML] | 0 |
DevelopmentTime_DataExchangeFormat[Unformatted data] | 0 |
DeploymentTime_LocationFinding[GPS] | 0 |
DeploymentTime_LocationFinding[radio triangulation] | 0 |
DeploymentTime_FileSharing[OpenIntent] | 0 |
DeploymentTime_ReportSyncing[Explicit] | 0 |
DeploymentTime_ChatProtocol[XMPP (Open Fire)] | 0 |
DeploymentTime_MapAccess[Cache on server] | 0 |
DeploymentTime_MapAccess[Preloaded (ESRI)] | 0 |
DeploymentTime_Connectivity[Wifi] | 0 |
DeploymentTime_Connectivity[3G on Nexus I] | 0 |
DeploymentTime_Connectivity[3G on Droid] | 0 |
DeploymentTime_Connectivity[Bluetooth] | 0 |
DeploymentTime_DataBase[MySQL] | 0 |
DeploymentTime_DataBase[sqLite] | 0 |
DeploymentTime_ArchitecturalPattern[Peer-to-peer] | 0 |
DeploymentTime_ArchitecturalPattern[Client-Server] | 0 |
DeploymentTime_ArchitecturalPattern[Push-based] | 0 |
Saheed A. Busari and Emmanuel Letier, "RADAR: A lightweight tool for requirements and architecture decision analysis," in submission, August 2016
Letier, Emmanuel, David Stefan, and Earl T. Barr. "Uncertainty, risk, and information value in software requirements and architecture." Proceedings of the 36th International Conference on Software Engineering. ACM, 2014.
Esfahani, Naeem, Sam Malek, and Kaveh Razavi. "GuideArch: guiding the exploration of architectural solution space under uncertainty." 2013 35th International Conference on Software Engineering (ICSE). IEEE, 2013.