When released, a computer application may contain a number of exploitable security vulnerabilities that may render a computer system executing the application susceptible to being compromised. Generally, the entity that developed the application may endeavor to remedy such exploitable security vulnerabilities when they are discovered. However, it is difficult to ensure that a release of an application contains no exploitable security vulnerabilities.
The following detailed description references the drawings, wherein:
Since it may be difficult to ensure theta release of an application contains no exploitable security vulnerabilities, an application may contain a number of undiscovered vulnerabilities upon its release. The presence of such undiscovered vulnerabilities in an application presents a risk for users of the application. As such, it may be beneficial to predict the number of exploitable security vulnerabilities that an application contains upon its release so that potential users of the application may assess how great of a risk the application presents. As used herein, an “exploitable security vulnerability” of an application is a property, function, or other aspect of the application that may be leveraged to compromise any aspect of the security of a system executing the application. Examples of exploitable security vulnerabilities include buffer overflows, cross-site scripting errors, errors opening an application to a structured query language (SQL) injection, etc.
When an exploitable security vulnerability is discovered in an application, it may be reported publicly. In this manner, users of the application may be notified of the vulnerability, and the application developer may take steps to fix the vulnerability. Information regarding such reported vulnerabilities may be collected in a common repository, where each reported vulnerability may be associated with the application release in which it was discovered. Such a repository may thus indicate the exploitable vulnerabilities reported for various releases of an application. As an example, the Common Vulnerabilities and Exposures dictionary (CVE) may indicate the exploitable security vulnerabilities publicly reported for each of various different applications, and for various releases (e.g., versions) of those applications.
However, such a repository does not contain information about undiscovered exploitable security vulnerabilities in a new release of an application. In some cases, an attempt may be made to predict the amount of undiscovered exploitable security vulnerabilities present in the new release based on the respective numbers of vulnerabilities reported for previous releases of the application. While accounting for historical trends, this method of prediction does not take into account any analysis of the new release itself, and instead relies exclusively on information about the prior releases. However, changes in a new release relative to prior release(s) may confound vulnerability reporting trends that may be inferred from information about prior releases. For example, a new release may introduce problems not present in prior release(s), or may eliminate problems present in prior release(s). As such, predicting vulnerabilities for a new release based exclusively on information for prior releases may produce inaccurate results.
To address these issues, examples described herein may determine an estimate of a quantity of exploitable security vulnerabilities contained in a target release of an application based on reported exploitable security vulnerabilities for prior releases of the application and a result of source code analysis performed on the target release. Examples described herein may acquire a source code analysis result representing a number of source code issues in a target release of an application, as identified by a source code analysis system. Examples may also acquire predictive information at least partially representing a predictive function relating a plurality of quantitative security vulnerability reporting metrics for a plurality of historic releases of the application to a plurality of quantitative source code analysis metrics for the historic releases. Examples may further determine an estimate of a quantity of exploitable security vulnerabilities contained in the target release of the application based on the source code analysis result for the target release and the predictive information for the historic releases.
In this manner, examples described herein may take into account the source code of the new release itself in addition to information about prior releases of the application. As such, examples described herein may provide a more reliable estimate of the quantity of exploitable security vulnerabilities contained in the target release, and thus a more reliable estimate of the risk of using the target release. In some examples, a user may consider the estimate of the quantity of exploitable security vulnerabilities contained in the target release of the application when deciding whether to upgrade to the target release or continue use of a historic release of the application.
Referring now to the drawings.
In the example of
Each of engines 122, 124, 126, and any other engines of system 100, may be any combination of hardware and programming to implement the functionalities of the respective engine. Such combinations of hardware and programming may be implemented in a number of different ways. For example, the programming may be processor executable instructions stored on a non-transitory machine-readable storage medium and the hardware may include a processing resource to execute those instructions. In such examples, the machine-readable storage medium may store instructions that, when executed by the processing resource, implement the engines of system 100. The machine-readable storage medium storing the instructions may be integrated in the same computing device as the processing resource to execute the instructions, or the machine-readable storage medium may be separate from but accessible to the computing device and the processing resource. The processing resource may comprise one processor or multiple processors included in a single computing device or distributed across multiple computing devices.
In some examples, the instructions can be part of an installation package that, when installed, can be executed by the processing resource to implement the engines of system 100. In such examples, the machine-readable storage medium may be a portable medium, such as a compact disc. DVD, or flash drive, or a memory maintained by a server from which the installation package can be downloaded and installed. In other examples, the instructions may be part of an application or applications already installed on a computing device including the processing resource. In such examples, the machine-readable storage medium may include memory such as a hard drive, solid state drive, or the like.
As used herein, a “machine-readable storage medium” may be any electronic, magnetic, optical, or other physical storage apparatus to contain or store information such as executable instructions, data, and the like. For example, any machine-readable storage medium described herein may be any of a storage drive (e.g., a hard drive), flash memory, Random Access Memory (RAM), any type of storage disc (e.g., a compact disc, a DVD, etc.), and the like, or a combination thereof. Further, any machine-readable storage medium described herein may be non-transitory.
In the example of
Source code analysis system 115 may perform source code analysis on a target release of an application to generate source code analysis result(s) 182. Source code engine 122 may actively or passively acquire (e.g., retrieve, receive, etc.) source code analysis result 182 from source code analysis system 115. In such examples, result 182 may represent a number of source code issues identified by source code analysis system 115 in the target release of the application.
As used herein, a target release of an application may be a release (or version) of an application for which an estimate of a quantity of exploitable security vulnerabilities is to be determined (e.g., by system 100). In some examples, engine 122 may provide source code of the target release to system 115 for source code analysis. In other examples, engine 122 may provide system 115 an address, link, or other information that system 115 may use to retrieve source code of the target release. As used herein, a “source code analysis result” is information representing a number of source code issues identified in source code of a particular release of an application by source code analysis performed on the particular release. For example, a source code analysis result may indicate a total a number of source code issues identified in a release of an application, or some portion thereof.
In some examples, source code analysis results may be obtained for prior releases of the application that predate the target release. Such prior releases of an application may be referred to herein as “historic releases” of the application. Source code analysis results for historic release(s) (which may be referred to herein as “historic source code analysis results”) may be obtained from system 115, or any other system that performs source code analysis. The historic source code analysis results may be stored in a historic data repository (e.g., a database, etc.) that is included in or separate from system 100.
Quantitative source code analysis metrics for the historic releases of the application may be obtained based on the historic source code analysis results. As used herein, a quantitative source code analysis metric is a measure representing a quantity of source code analysis issues identified in a respective historic release of an application. An example of a quantitative source code analysis metric is an issue density value for a release of an application. As used herein, an “issue density value” is a measure of the number of issues represented by a source code analysis result for a release of an application relative to the size of the release of the application. For example, an issue density value for a release of an application may be derived by dividing a source code analysis result (e.g., a number of issues identified) for a release of an application by the number of lines of source code in the release.
Features of system 100 are described below in relation to
Column 140E shows example quantitative security vulnerability reporting metrics for the historic releases. In examples described herein, a quantitative security vulnerability reporting metric for a release of an application is a measure representing a quantity of exploitable security vulnerabilities reported for the release of the application. In some examples, a quantitative security vulnerability reporting metric for a release may be a value derived from information regarding reported exploitable security vulnerabilities for the release. Such information may be obtained (directly or indirectly) from the CVE (described above), or any other publicly accessible source of such information. In other examples, such information may be obtained from a non-public data source, such as a non-public repository of exploitable security vulnerabilities maintained by a developer for a proprietary application, for example.
In the example of
In some examples, a predictive function relating the quantitative security vulnerability reporting metrics for the historic releases to the quantitative source code analysis metrics for the historic releases may be determined. As used herein, a predictive function may be a function that at least approximates a relationship between a set of first values and a set of second values. Such a function may be used to predict a new first value (i.e., not contained in the data set used to generate the predictive function) based on new second value (i.e., not contained in the data set used to generate the predictive function), and vice versa. The predictive function may be a regression function, such as a linear or non-linear regression function, or any other suitable function.
In some examples, a predictive function relating these X and Y values may be determined. In the example of
In the example of
Referring again to
As described above, the predictive function may be a regression function relating the quantitative security vulnerability reporting metrics to the quantitative source code analysis metrics, and predictive information 184 may comprise respective values for a plurality of coefficients of the regression function. The quantitative security vulnerability reporting metrics may be any such metrics described herein, and the quantitative source code analysis metrics may be any such metrics described herein. For example, each of the quantitative security vulnerability reporting metrics may be an exploitable security vulnerability reporting rate for a respective historic release the application, and each of the source code analysis metrics may be an issue density value for a respective one of the historic releases of the application. In such examples, the predictive function may be regression function 143 relating the exploitable security vulnerability reporting rates of column 140E of table 140 of
In the example of
As described above, in some examples, the quantitative security vulnerability reporting metrics may be exploitable security vulnerability reporting rates for the historic releases (such as the reporting rates of column 140E of table 140) and the quantitative source code analysis metrics may be total issue densities for the historic releases (such as the values of column 140D of table 140). In such examples, estimate engine 126 may determine a predicted exploitable security vulnerability reporting rate for the target release of the application based on source code analysis result 182 and predictive information 184. For example, estimate engine 126 may determine, as the predicted reporting rate, an output of the predictive function with a target source code analysis metric (i.e., total issue density) based on source code analysis result 182 as input. For example, estimate engine 126 may determine a total issue density for the target release based on source code analysis result 182, and determine a reporting rate (i.e., the Y value) produced by regression function 143 with the total issue density for the target release as input to the regression function (i.e., as the X value). As an example, estimate engine 126 may determine a total issue density value for the target release of 2.61, for example, as illustrated in
In examples described herein, the reporting rate resulting from regression function 143 may be an estimated exploitable security vulnerability reporting rate for the target release. The estimated exploitable security vulnerability reporting rate for the target release may be an estimate of the quantity of exploitable security vulnerabilities contained in the target release. For example, an estimated exploitable security vulnerability reporting rate for the target release that is high relative to a reporting rate for a historic release may serve as an estimate that the target release includes a relatively high number of exploitable security vulnerabilities. An estimated exploitable security vulnerability reporting rate for the target release that is low relative to a reporting rate for a historic release may serve as an estimate that the target release includes a relatively low number of exploitable security vulnerabilities.
In some examples, the estimated exploitable security vulnerability reporting rate (or other estimate of the quantity of exploitable security vulnerabilities) for the target release may be output to a user of system 100, who may utilize the reporting rate to evaluate the risk of using the target release. For example, if the estimated reporting rate for the target release is high relative to the reporting rates for historic releases, the user may determine that the risk of using the target release is high. Alternatively, if the estimated reporting rate is low relative to that of historic releases, the user may determine that the risk of using the new release is low. In some examples, functionalities described herein in relation to
As described above, source code engine 122 may acquire, from a source code analysis system 115, a source code analysis result 182 representing a number of source code issues identified by source code analysis system 115 in a target release of an application. In the example of
In some examples, a system that performs source code analysis, such as system 115, may classify issues identified in analyzed source code based on the criticality of the issues, using categories such as “critical”, “high”, and “low”, or the like. In such examples, the historic source code analysis results 252 may include results for at least one such category. For example, results 252 may include, for each of the historic releases, at least one of a number of critical issues identified, a number of high issues identified, a number of low issues identified, a total number of critical and high issues identified (i.e., “critical-high issues”), and a total number of critical, high, and low issues identified. Each such number may be referred to herein as a different “type” of source code analysis result. In such examples, instructions 122 may acquire a plurality of source code analysis results 182, which may include, for the target release, at least one of a number of critical issues identified, a number of high issues identified, a number of low issues identified, a total number of critical and high issues identified, a total number of critical, high, and low issues identified, and the like.
In some examples, a system that performs source code analysis, such as system 115, may not report all possible issues that it may identify, but rather may report a selected subset of such issues. In such examples, source code analysis results for select types of issues may be utilized in the estimation of a quantity of exploitable security vulnerabilities in a target release, as described herein. For example, the source code analysis system may be configured to report security-related issues, while not reporting other types of issues (e.g., style-checking issues, performance-optimization issues, etc.). In some examples, the source code analysis system may be configured to report issues identified in an application that are related to use of a network (e.g., data received from a network, etc.) while not reporting local issues that do not involve a network. In some examples, the system may receive criteria defining what types of issues to report. In such examples, source code analysis results returned by the system may represent issues identified that meet the specified criteria.
In some examples, calculation engine 125 may determine quantitative source code analysis metrics 236-1-236-K (where “K” is an integer greater than 1) for the historic releases of the application from historic source code analysis results 252. Engine 125 may store the determined quantitative source code analysis metrics 236-1-236-K in repository 250. As used herein, to “determine” a quantitative source code analysis metric is to select a source code analysis result to utilize as a quantitative source code analysis metric or to calculate or otherwise derive a quantitative source code analysis metric based on a source code analysis result.
In some examples, engine 125 may determine at least one of quantitative source code analysis metrics 236-1-236-K for the historic releases by selecting respective type(s) of source code analysis results from among results 252. In some examples, engine 125 may select any type of results among results 252 as a plurality of quantitative source code analysis metrics 236-j (where “j” is an integer between 1 and K, inclusive). For example, engine 125 may select the total issue values (i.e., total critical, high and low issues) for the historic releases as quantitative source code analysis metrics 236-1. As another example, engine 125 may select the respective numbers of critical issues identified for each of the historic releases as quantitative source code analysis metrics 236-2.
In some examples, engine 125 may determine at least one of quantitative source code analysis metrics 236-1-236-K for the historic releases by deriving quantitative source code analysis metrics based on the results 252. In some examples, engine 125 may derive a set of quantitative source code analysis metrics based on any type of results among results 252. For example, engine 125 may derive respective critical issue densities for each of the historic releases as quantitative source code analysis metrics 236-(K−1). In such examples, for each historic release, engine 125 may obtain a respective critical issue density by dividing the total number of critical issues identified for the historic release by the number of lines of source code included in the historic release. As another example, engine 125 may derive respective total issue densities for each of the historic releases as quantitative source code analysis metrics 236-K by, for each historic release, dividing a respective total number of issues for the historic release by a number of lines of source code of the historic release. Other example quantitative source code analysis metrics may include critical-high issue density (e.g., the total number of critical and high issues divided by the number of lines of source code), high issue density (e.g., the number of high issues divided by the number of lines of source code), low issue density, etc.
In the example of
In the example of
As described above in relation to
In some examples, engine 124 may acquire predictive information 184 at least partially representing a predictive function 234-j associated with a greatest correlation value 232-j among the plurality of correlation values 232-1-232-K. In such examples, engine 124 may access correlation values 232-1-232-K in repository 250 and determine a greatest correlation value 232-j among correlation values 232-1-232-K (e.g., a correlation value 232-j for which there is no greater correlation value among 232-1-232-K, though a correlation value of equal value may exist). In such examples, engine 124 may retrieve predictive information 184 at least partially representing the predictive function 234-j associated with the determined greatest correlation value 232-j. In such examples, predictive information 184 may include predictive function 234-j, coefficient value(s) 235-j, or any other information at least partially representing predictive function 234-j.
In the example of
Although the data contained by historic data repository 250 is described above as being acquired or determined by engines 122 and 125 and stored in repository 250 by engines 122 and 125, in other examples, the data may be acquired or determined and stored in repository 250 by system(s) separate from system 200. In some examples, functionalities described herein in relation to
In the example of
Instructions 322 may acquire a plurality of second source code analysis results 384, each representing a number of source code issues identified by source code analysis performed on a respective one of a plurality of historic releases 305 of the application predating the target release. Source code analysis results 384 may include, for each of historic releases 305, any type of source code analysis results described above in relation to
Instructions 323 may determine quantitative source code analysis metrics 336 based on second source code analysis results 384, in any manner described above in relation to
Instructions 324 may acquire reporting data 394, which may include information associated with exploitable security vulnerabilities reported for the historic releases 305. In some examples, reporting data 394 may indicate, for each of historic releases 305, the number of exploitable security vulnerabilities reported, information describing details of each vulnerability reported, and the like, or any combination thereof. Instructions 324 may acquire reporting data 394 from any suitable source of such data, such as at least one database, user input, or the like.
Instructions 324 may further determine a plurality of quantitative security vulnerability reporting metrics 356, each representing a quantity of exploitable security vulnerabilities reported for a respective one of historic releases 305 of the application. In some examples, quantitative security vulnerability reporting metrics 356 may comprise respective exploitable security vulnerability reporting rates (VRRs) for historic releases 305. For example, for each of historic release 305, instructions 324 may determine an exploitable security vulnerability reporting rate (VRR), which, as described above, may be a measure of the number of exploitable security vulnerabilities reported per year (or any other length of time).
In some examples, to calculate the VRR for a given historic release of the application, instructions 324 may determine the number of exploitable security vulnerabilities (ESVs) reported between the release date of the given historic release and the release date of the next release analyzed (e.g., the next one of the historic releases or the target release), and divide that number by the time interval between the release dates of the releases (which may include fractions of years, as releases may not be released on January 1st). As an example, if a historic release rn was released on day dn of year y1, and the next release analyzed (e.g., the next historic release or the target release) was released on day dn+1 of year y2 (i.e., the year after y1), then instructions 324 may calculate the VRR for historic release rn according to the following Equation 1:
In Equation 1, esvy1 and esvy2 represent the number of exploitable security vulnerabilities reported for historic release rn in years y1 and y2, respectively.
For a release interval spanning m consecutive years y1-ym, where m>2, instructions 324 may calculate VRR for historic release rn according to the following Equation 2:
In Equation 2, esvyi is the number of exploitable security vulnerabilities reported for historic release rn in year yi (of years y1-ym). In such examples, if releases and rn+1 were released in the same year, then instructions 324 may calculate VRR for historic release rn according to the following Equation 3 (in which esvy1 is defined as described above):
In other examples, VRR for a given one of historic releases 305 may be calculated in any other suitable manner.
In some examples, instructions 324 may also receive a selection of filtering criteria 396. In such examples, the selection of filtering criteria 396 may be received via user input, for example, or in any other suitable manner. In such examples, instructions 324 may determine, based on the selected filtering criteria 396, a subset of the collection of vulnerability reporting data 394 for the historic releases of the application, and determine the quantitative security vulnerability reporting metrics 336 based on the subset of the collection of vulnerability reporting data 394. The selected filtering criteria 396 may indicate data to exclude from reporting data 394 when calculating quantitative security vulnerability reporting metrics 336. For example, selected filtering criteria 396 may indicate to exclude reports of exploitable security vulnerabilities in a historic release where the problem(s) detailed by the reports are external to the historic release itself. For example, based on selected filtering criteria 396, instructions 324 may exclude reports indicating that the reported problem was due to incorrect use of application programming interface(s) (APIs) by third-party application(s), bug(s) in third-party application(s) or plug-in(s), and the like. In such examples, instructions may calculate quantitative security vulnerability reporting metrics 336 (e.g., VRRs for each of historic releases 305) based on a subset of reporting data 394 excluding the data specified by the selected filtering criteria 396.
In the example of
In some examples, instructions 326 may store historic data 388 in a historic data repository 350. Historic data repository 350 may be implemented by at least one machine-readable storage medium and may be included in or separate from computing device 300. Instructions 326 may store at least one of the plurality of second source code analysis results 384 and the quantitative source code analysis metrics 336 in repository 350 as part of historic data 388. Instructions 326 may also store at least one of the plurality of quantitative security vulnerability reporting metrics 356 and the collection of vulnerability reporting data 394 for historic releases 305 of the application in repository 350 as part of historic data 388. In some examples, instructions 326 may also store in repository 350 at least one of the predictive functions. CC values, and CD values determined by instructions 325 based on historic data 388. In some examples, computing device 300 may fill repository 350 with data such that it may subsequently be utilized as described above in relation to repository 250 of
In the example of
In examples in which predictive function 385 relates a particular type of quantitative security vulnerability reporting metrics for historic releases 305 to a given type of quantitative source code analysis metrics for historic releases 305, the input to the predictive function 385 may be a quantitative source code analysis metric of the given type for the target release, and the output may be an estimated quantitative security vulnerability reporting metric of the particular type for target release 307. For example, predictive function 385 may relate VRRs for historic releases 305 to total issue densities for historic releases 305. In such examples, instructions 327 may calculate an estimated VRR for target release 307 as the estimate 397 by determining an output of predictive function 385 (i.e., the VRR for target release 307) with a total input density (i.e., the target quantitative source code analysis metric 383) as input to predictive function 383.
In examples described herein, an estimated VRR for a target release 307 of the application, based on a predictive function relating VRRs for historic releases to quantitative source code analysis metrics for the historic releases, may be a reliable estimate of the quantity of exploitable security vulnerabilities in target release 307, as a statistically significant correlation has been shown between VRR and several quantitative source code analysis metrics. For example, correlation calculations for a total of 75 sample releases (including several releases of each of a plurality of different applications) indicate a moderate correlation between certain normalized quantitative source code analysis metrics and normalized VRRs. The correlation calculations for such “normalized” values indicate whether a change in a metric value between releases for a given application can explain a corresponding change in VRR between releases for the given application. The correlation calculations for the 75 sample releases indicate a moderate correlation for several normalized quantitative source code analysis metrics, including the total number of issues identified, total issue density, and critical-high issue density. Each of these correlations is significant at the 99% level and explains over 30% of the variance in VRR for the releases. As such, a large increase in total issue density, for example, for a target release (compared to a historic release) is indicative of an estimated increase in VRR in the target release relative to the historic release.
In some examples, instructions 327 may output a report 399 indicating the estimate 397 and at least one estimate 398 of a strength of a correlation between the plurality of quantitative security vulnerability reporting metrics 356 (e.g., VRRs) for the historic releases 305 and source code analysis metrics 336 for historic releases 305. In some examples, the estimate 398 of the strength of the correlation may be, for example, at least one of a CC and a CD determined for the predictive function 385, as described above. In some examples, report 399 may be output on a display 340 (e.g., a monitor, screen, touch screen, etc.) of or otherwise connected to computing device 300. In other examples, report 399 may be output in any other suitable manner. In some examples, functionalities described herein in relation to
At 405 of method 400, processing resource 310 may execute instructions 325 to determine a predictive function 385 relating a plurality of exploitable security vulnerability reporting rates (i.e., metrics 356) for a plurality of historic releases 305 of an application to a plurality of quantitative source code analysis metrics 336 for historic releases 305. At 410, processing resource 310 may execute instructions 321 to acquire, from source code analysis system 115, a source code analysis result 382 representing a number of source code issues identified by the system 115 for a target release 307 of the application, where the target release 307 follows the historic releases 305 (i.e., has a release date after the release dates of historic releases 305).
At 415, processing resource 310 may execute instructions 327 to input a value based on source code analysis result 382 to predictive function 385 to obtain an estimate 397 of a quantity of exploitable security vulnerabilities contained in the target release 305 of the application. For example, instructions 327 may input a target quantitative source code analysis metric 383 (e.g., total issue density, etc.) based on result 382 to predictive function 385. The target quantitative source code analysis metric 383 may be the same type of metric as the quantitative source code analysis metrics 336 for historic releases 305.
At 420, processing resource 310 may execute instructions 327 to output a report 399 indicating the estimate 397 (e.g., an estimated exploitable security vulnerability reporting rate for target release 305) and at least one estimate 398 of a strength of a correlation between the plurality of exploitable security vulnerability reporting rates and the source code analysis metrics 336. In some examples, functionalities described herein in relation to
At 505 of method 500, processing resource 310 may execute instructions 322 to acquire, from a source code analysis system 115, a plurality of historic source code analysis results 384 for a plurality of historic releases 305 of an application, respectively. At 510, processing resource 310 may execute instructions 323 to determine source code analysis metrics 336 for historic releases 305 based on historic source code analysis results 384. At 515, processing resource 310 may execute instructions 324 to acquire vulnerability reporting data 394 for the historic releases 305. At 520, processing resource 310 may execute instructions 324 to determine a plurality of exploitable security vulnerability reporting rates (VRRs) based on the security vulnerability reporting data 394.
At 525, processing resource 310 may execute instructions 325 to determine a predictive function 385 relating the exploitable security vulnerability reporting rates (VRRs) (i.e., metrics 356) for historic releases 305 to the quantitative source code analysis metrics 336 for historic releases 305. At 530, processing resource 310 may execute instructions 321 to acquire, from source code analysis system 115, a source code analysis result 382 representing a number of source code issues identified by the system 115 for a target release 307 of the application following the historic releases 305.
At 535, processing resource 310 may execute instructions 327 to input a value based on source code analysis result 382 (e.g., a target quantitative source code analysis metric 383 such as a total issue density based on result 382) to predictive function 385 to obtain an estimate 397 of a quantity of exploitable security vulnerabilities contained in the target release 305 of the application. At 540, processing resource 310 may execute instructions 327 to calculate a correlation coefficient (CC) and a coefficient of determination (CD) based on the quantitative source code analysis metrics 336 and the plurality of exploitable security vulnerability reporting rates (VRRs), as described above in relation to
At 545, processing resource 310 may execute instructions 327 to output a report 399 indicating the estimate 397 (e.g., an estimated exploitable security vulnerability reporting rate for target release 305) and at least one estimate 398 of a strength of a correlation between the plurality of exploitable security vulnerability reporting rates and the source code analysis metrics 336. In some examples, the at least one estimate 398 of the strength of the correlation may comprise at least one of the correlation coefficient (CC) and the coefficient of determination (CD) determined at 540. In some examples, functionalities described herein in relation to