Our goal is to satisfy the desired connectivity level for the input dependents given sensitive functions, i.e. for each input dependent function in the sensitive function list there must exist a number of checkers conforming with the specified connectivity-level.
We leave input independents to be used as checkers (so that OH protects guards). To avoid performance problems, due the fact that guards in the input independents are always going to be executed, we randomly choose among them (input independents) and other input dependent functions in the program.
It is important that we pick enough functions so that we could guarantee the desired connectivity for the input dependent sensitive functions. Given that the maximum number of edges in a DAG is equal to ((N)(N-1))/2, in order to guarantee C (a desired connectivity-level) incoming edges for IN_S (number of input-dependent sensitive functions), we need at least C+IN_S nodes. The nodes at the lower end of the graph are potential candidates for our input-dependent sensitive functions.
In the SC pass we first need to find input dependent sensitive functions and add them to a vector, sc_sentitive_funcs. Similarly, we add input independent functions to a vector, indep_funcs. Then, we create a network of checkers conforming to the desired connectivity level. We then map functions in sc_sensitive_funcs to the lower end of the graph, starting from the bottom. Depending on the parameter set as percentage of input independent function coverage in sc, we then pick some functions from indep_funcs to be used in the graph. At last, we fill the remainder of the graph with the other input dependents (not sensitives) in the module.
In stats when we calculate connectivity average/std, we need to measure connectivity of the sensitive functions, not the entire graph.
This should result in 100% coverage of the sensitive code, and an exact connectivity (with zero std) in the evaluation table, otherwise we are doing something incorrectly.
Our goal is to satisfy the desired connectivity level for the input dependents given sensitive functions, i.e. for each input dependent function in the sensitive function list there must exist a number of checkers conforming with the specified
connectivity-level
.We leave input independents to be used as checkers (so that OH protects guards). To avoid performance problems, due the fact that guards in the input independents are always going to be executed, we randomly choose among them (input independents) and other input dependent functions in the program. It is important that we pick enough functions so that we could guarantee the desired connectivity for the input dependent sensitive functions. Given that the maximum number of edges in a DAG is equal to ((N)(N-1))/2, in order to guarantee
C
(a desired connectivity-level) incoming edges forIN_S
(number of input-dependent sensitive functions), we need at leastC+IN_S
nodes. The nodes at the lower end of the graph are potential candidates for our input-dependent sensitive functions.In the SC pass we first need to find input dependent sensitive functions and add them to a vector,
sc_sentitive_funcs
. Similarly, we add input independent functions to a vector,indep_funcs
. Then, we create a network of checkers conforming to the desired connectivity level. We then map functions insc_sensitive_funcs
to the lower end of the graph, starting from the bottom. Depending on the parameter set aspercentage of input independent function coverage in sc
, we then pick some functions fromindep_funcs
to be used in the graph. At last, we fill the remainder of the graph with the other input dependents (not sensitives) in the module.In stats when we calculate connectivity average/std, we need to measure connectivity of the sensitive functions, not the entire graph.
This should result in 100% coverage of the sensitive code, and an exact connectivity (with zero std) in the evaluation table, otherwise we are doing something incorrectly.