TNO-S3 / WuppieFuzz

A coverage-guided REST API fuzzer developed on top of LibAFL
Apache License 2.0
93 stars 4 forks source link

use non-root user #26

Closed ThomasTNO closed 1 month ago

github-actions[bot] commented 1 month ago

Sigrid maintainability feedback

✅ You wrote maintainable code and achieved your Sigrid objective of 3.5 stars

Sigrid compared your code against the baseline of 2024-10-14.

👍 What went well?

You fixed or improved 0 refactoring candidates.

👎 What could be better?

Unfortunately, 140 refactoring candidates were introduced or got worse.

Risk System property Location
🔴 Duplication
(Introduced)
Dockerfile (lines 9-20)
WuppieFuzz/Dockerfile (lines 14-25)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi/examples.rs (lines 1-935)
src/openapi/examples.rs (lines 1-935)
🔴 Duplication
(Introduced)
WuppieFuzz/src/configuration.rs (lines 1-773)
src/configuration.rs (lines 1-773)
🔴 Duplication
(Introduced)
WuppieFuzz/src/input/mod.rs (lines 53-713)
src/input/mod.rs (lines 53-713)
🔴 Duplication
(Introduced)
WuppieFuzz/src/fuzzer.rs (lines 1-575)
src/fuzzer.rs (lines 1-575)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs (lines 4-456)
src/coverage_clients/jacoco.rs (lines 4-456)
🔴 Duplication
(Introduced)
WuppieFuzz/src/initial_corpus/dependency_graph/mod.rs (lines 1-435)
src/initial_corpus/dependency_graph/mod.rs (lines 1-435)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/endpoint.rs (lines 12-419)
src/coverage_clients/endpoint.rs (lines 12-419)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/lcov_client.rs (lines 4-404)
src/coverage_clients/lcov_client.rs (lines 4-404)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/mod.rs (lines 8-365)
src/openapi_mutator/mod.rs (lines 8-365)
🔴 Duplication
(Introduced)
WuppieFuzz/src/state.rs (lines 1-400)
src/state.rs (lines 1-400)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi/validate_response.rs (lines 1-410)
src/openapi/validate_response.rs (lines 1-410)
🔴 Duplication
(Introduced)
WuppieFuzz/src/input/parameter.rs (lines 1-314)
src/input/parameter.rs (lines 1-314)
🔴 Duplication
(Introduced)
WuppieFuzz/src/initial_corpus/dependency_graph/normalize.rs (lines 12-266)
src/initial_corpus/dependency_graph/normalize.rs (lines 12-266)
🔴 Duplication
(Introduced)
WuppieFuzz/src/initial_corpus/mod.rs (lines 3-198)
src/initial_corpus/mod.rs (lines 3-198)
🔴 Duplication
(Introduced)
WuppieFuzz/src/reporting/sqlite.rs (lines 1-176)
src/reporting/sqlite.rs (lines 1-176)
🔴 Duplication
(Introduced)
WuppieFuzz/src/monitors.rs (lines 4-187)
src/monitors.rs (lines 4-187)
🔴 Duplication
(Introduced)
WuppieFuzz/src/authentication/mod.rs (lines 1-166)
src/authentication/mod.rs (lines 1-166)
🔴 Duplication
(Introduced)
WuppieFuzz/src/input/method.rs (lines 1-162)
src/input/method.rs (lines 1-162)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/coverband.rs (lines 4-133)
src/coverage_clients/coverband.rs (lines 4-133)
🔴 Duplication
(Introduced)
WuppieFuzz/src/main.rs (lines 19-129)
src/main.rs (lines 19-129)
🔴 Duplication
(Introduced)
WuppieFuzz/src/authentication/verify_auth.rs (lines 1-122)
src/authentication/verify_auth.rs (lines 1-122)
🔴 Duplication
(Introduced)
WuppieFuzz/src/parameter_feedback.rs (lines 1-123)
src/parameter_feedback.rs (lines 1-123)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi/mod.rs (lines 1-116)
src/openapi/mod.rs (lines 1-116)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/add_request.rs (lines 4-113)
src/openapi_mutator/add_request.rs (lines 4-113)
🔴 Duplication
(Introduced)
WuppieFuzz/src/reproducer.rs (lines 1-108)
src/reproducer.rs (lines 1-108)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/different_method.rs (lines 4-111)
src/openapi_mutator/different_method.rs (lines 4-111)
🔴 Duplication
(Introduced)
WuppieFuzz/src/reporting/mod.rs (lines 1-96)
src/reporting/mod.rs (lines 1-96)
🔴 Duplication
(Introduced)
WuppieFuzz/src/initial_corpus/dependency_graph/toposort.rs (lines 4-115)
src/initial_corpus/dependency_graph/toposort.rs (lines 4-115)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/establish_link.rs (lines 4-98)
src/openapi_mutator/establish_link.rs (lines 4-98)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/mod.rs (lines 6-98)
src/coverage_clients/mod.rs (lines 6-98)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/read_utilities.rs (lines 3-84)
src/coverage_clients/read_utilities.rs (lines 3-84)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi/build_request.rs (lines 1-70)
src/openapi/build_request.rs (lines 1-70)
🔴 Duplication
(Introduced)
WuppieFuzz/build.rs (lines 1-64)
build.rs (lines 1-64)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/different_path.rs (lines 4-75)
src/openapi_mutator/different_path.rs (lines 4-75)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/swap_requests.rs (lines 3-69)
src/openapi_mutator/swap_requests.rs (lines 3-69)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/duplicate_request.rs (lines 3-64)
src/openapi_mutator/duplicate_request.rs (lines 3-64)
🔴 Duplication
(Introduced)
WuppieFuzz/src/input/serde_helpers.rs (lines 7-60)
src/input/serde_helpers.rs (lines 7-60)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi/curl_request.rs (lines 1-53)
src/openapi/curl_request.rs (lines 1-53)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/remove_request.rs (lines 4-65)
src/openapi_mutator/remove_request.rs (lines 4-65)
🔴 Duplication
(Introduced)
WuppieFuzz/src/wuppie_version.rs (lines 1-46)
src/wuppie_version.rs (lines 1-46)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/break_link.rs (lines 5-58)
src/openapi_mutator/break_link.rs (lines 5-58)
🔴 Duplication
(Introduced)
WuppieFuzz/src/authentication/custom.rs (lines 1-55)
src/authentication/custom.rs (lines 1-55)
🔴 Duplication
(Introduced)
WuppieFuzz/src/header.rs (lines 5-50)
src/header.rs (lines 5-50)
🔴 Duplication
(Introduced)
WuppieFuzz/src/authentication/bearer.rs (lines 1-39)
src/authentication/bearer.rs (lines 1-39)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/string_interesting.rs (lines 4-48)
src/openapi_mutator/string_interesting.rs (lines 4-48)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/dummy.rs (lines 3-49)
src/coverage_clients/dummy.rs (lines 3-49)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs (lines 210-232)
WuppieFuzz/src/coverage_clients/lcov_client.rs (lines 171-193)
src/coverage_clients/lcov_client.rs (lines 171-193)
🔴 Duplication
(Introduced)
WuppieFuzz/src/authentication/oauth.rs (lines 1-27)
src/authentication/oauth.rs (lines 1-27)
🔴 Duplication
(Introduced)
WuppieFuzz/src/debug_writer.rs (lines 5-35)
src/debug_writer.rs (lines 5-35)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs (lines 69-97)
WuppieFuzz/src/coverage_clients/lcov_client.rs (lines 63-91)
src/coverage_clients/lcov_client.rs (lines 63-91)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs (lines 25-45)
WuppieFuzz/src/coverage_clients/lcov_client.rs (lines 26-46)
src/coverage_clients/lcov_client.rs (lines 26-46)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs (lines 145-156)
WuppieFuzz/src/coverage_clients/lcov_client.rs (lines 130-142)
src/coverage_clients/lcov_client.rs (lines 130-142)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/duplicate_request.rs (lines 3-13)
WuppieFuzz/src/openapi_mutator/remove_request.rs (lines 4-14)
WuppieFuzz/src/openapi_mutator/swap_requests.rs (lines 3-13)
src/openapi_mutator/duplicate_request.rs (lines 3-13)
src/openapi_mutator/remove_request.rs (lines 4-14)
src/openapi_mutator/swap_requests.rs (lines 3-13)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs (lines 121-129)
WuppieFuzz/src/coverage_clients/lcov_client.rs (lines 107-115)
src/coverage_clients/lcov_client.rs (lines 107-115)
🔴 Duplication
(Introduced)
WuppieFuzz/src/authentication/basic.rs (lines 1-14)
src/authentication/basic.rs (lines 1-14)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/break_link.rs (lines 5-12)
WuppieFuzz/src/openapi_mutator/duplicate_request.rs (lines 3-10)
WuppieFuzz/src/openapi_mutator/remove_request.rs (lines 4-11)
WuppieFuzz/src/openapi_mutator/swap_requests.rs (lines 3-10)
src/openapi_mutator/break_link.rs (lines 5-12)
src/openapi_mutator/duplicate_request.rs (lines 3-10)
src/openapi_mutator/remove_request.rs (lines 4-11)
src/openapi_mutator/swap_requests.rs (lines 3-10)
🔴 Duplication
(Introduced)
WuppieFuzz/src/openapi_mutator/add_request.rs (lines 13-19)
WuppieFuzz/src/openapi_mutator/different_method.rs (lines 11-17)
WuppieFuzz/src/openapi_mutator/different_path.rs (lines 5-11)
src/openapi_mutator/different_method.rs (lines 11-17)
src/openapi_mutator/different_path.rs (lines 5-11)
🔴 Duplication
(Introduced)
WuppieFuzz/src/reporting/mod.rs (lines 26-31)
WuppieFuzz/src/reporting/mod.rs (lines 59-64)
WuppieFuzz/src/reporting/sqlite.rs (lines 157-162)
src/reporting/sqlite.rs (lines 157-162)
🔴 Duplication
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs (lines 193-200)
WuppieFuzz/src/coverage_clients/lcov_client.rs (lines 153-160)
src/coverage_clients/lcov_client.rs (lines 153-160)
🔴 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
interesting_params_from_type(OpenAPI,Type)
🔴 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
all_interesting_parameters(Operation,OpenAPI,&,any)
🔴 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
interesting_params_from_schema(OpenAPI,RefOr,&,any)
🔴 Unit Size
(Introduced)
WuppieFuzz/src/openapi/validate_response.rs
validate_object_against_type(OpenAPI,Type,Value)
🔴 Unit Size
(Introduced)
WuppieFuzz/src/reproducer.rs
reproduce(Path)
🔴 Unit Size
(Introduced)
WuppieFuzz/src/fuzzer.rs
fuzz()
🔴 Unit Size
(Introduced)
WuppieFuzz/src/authentication/verify_auth.rs
verify_auth(OpenAPI)
🟠 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
all_interesting_inputs_for_qualified_operation(OpenAPI,QualifiedOperation,&,any)
🟠 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
all_discriminator_variants(OpenAPI,Schema,&,any)
🟠 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
example_body_contents(OpenAPI,Operation)
🟠 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
example_from_type(OpenAPI,Type)
🟠 Unit Size
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs
generate_coverage_report(Path)
🟠 Unit Size
(Introduced)
WuppieFuzz/src/coverage_clients/lcov_client.rs
LcovCoverageClient.read_block()
🟠 Unit Size
(Introduced)
WuppieFuzz/src/input/mod.rs
fix_broken_references(R)
🟠 Unit Size
(Introduced)
WuppieFuzz/src/openapi_mutator/mod.rs
mutate_parameter_contents(ParameterContents,S,dyn,any)
🟠 Unit Size
(Introduced)
WuppieFuzz/src/openapi_mutator/mod.rs
mutate_number(S,serde_json,Number)
🟠 Unit Size
(Introduced)
WuppieFuzz/build.rs
main()
🟠 Unit Complexity
(Introduced)
WuppieFuzz/src/openapi/examples.rs
interesting_params_from_type(OpenAPI,Type)
🟠 Unit Complexity
(Introduced)
WuppieFuzz/src/openapi/examples.rs
examples.rs
🟠 Unit Complexity
(Introduced)
WuppieFuzz/src/fuzzer.rs
fuzzer.rs
🟠 Unit Interfacing
(Introduced)
WuppieFuzz/src/coverage_clients/endpoint.rs
EndpointCoverageClient.cover(Method,String,reqwest,any,String,String)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
example_parameter_value(OpenAPI,ParameterData)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
example_from_schema(OpenAPI,Schema)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/openapi/examples.rs
example_parameters(OpenAPI,Operation)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/header.rs
get_default_headers()
🟡 Unit Size
(Introduced)
WuppieFuzz/src/openapi/validate_response.rs
ValidationError.nested(str)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs
fetch_coverage(bool)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/reporting/sqlite.rs
Reporting.report_request(OpenApiRequest,CurlRequest,usize)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/reporting/sqlite.rs
Reporting.report_response(Response,i64)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/coverage_clients/lcov_client.rs
LcovCoverageClient.set_cov_bit(Path,u32,u8)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/coverage_clients/lcov_client.rs
LcovCoverageClient.fetch_coverage_internal(bool)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/coverage_clients/lcov_client.rs
LcovCoverageClient.new(SocketAddr,Option)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/reporting/mod.rs
get_current_test_case_file_name()
🟡 Unit Size
(Introduced)
WuppieFuzz/src/input/mod.rs
fix_input_parameters(S,usize,OpenApiRequest)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/input/mod.rs
Body.build(OpenAPI,Operation,Option)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/input/mod.rs
Input.generate_name(Option)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/initial_corpus/dependency_graph/mod.rs
add_references_to_openapi_input(DiGraph,NodeIndex,OpenApiInput)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/initial_corpus/dependency_graph/mod.rs
initial_corpus_from_api(OpenAPI)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/main.rs
main()
🟡 Unit Size
(Introduced)
WuppieFuzz/src/coverage_clients/endpoint.rs
EndpointCoverageClient.cover(Method,String,reqwest,any,String,String)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/coverage_clients/endpoint.rs
EndpointCoverageClient.new(OpenAPI)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/initial_corpus/mod.rs
fill_corpus_from_file(InMemoryOnDiskCorpus,Path)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/coverage_clients/coverband.rs
CoverbandCoverageClient.process_coverage_bytes(Vec)
🟡 Unit Size
(Introduced)
WuppieFuzz/src/wuppie_version.rs
get_wuppie_version()
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/openapi/examples.rs
all_discriminator_variants(OpenAPI,Schema,&,any)
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/openapi/examples.rs
all_interesting_parameters(Operation,OpenAPI,&,any)
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/openapi/examples.rs
interesting_params_from_schema(OpenAPI,RefOr,&,any)
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/header.rs
get_default_headers()
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/openapi/validate_response.rs
validate_object_against_type(OpenAPI,Type,Value)
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/coverage_clients/jacoco.rs
fetch_coverage(bool)
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/reproducer.rs
reproduce(Path)
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/openapi/build_request.rs
build_request.rs
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/authentication/verify_auth.rs
verify_auth(OpenAPI)
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/initial_corpus/mod.rs
mod.rs
🟡 Unit Complexity
(Introduced)
WuppieFuzz/src/initial_corpus/dependency_graph/toposort.rs
toposort.rs
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/examples.rs
example_from_media_type(OpenAPI,openapiv3,any)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/examples.rs
interesting_params_from_media_type(OpenAPI,openapiv3,any)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/examples.rs
all_interesting_inputs_for_qualified_operation(OpenAPI,QualifiedOperation,&,any)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/examples.rs
all_discriminator_variants(OpenAPI,Schema,&,any)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/examples.rs
enforce_length_bounds(str,Option,Option)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/examples.rs
all_interesting_parameters(Operation,OpenAPI,&,any)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/examples.rs
interesting_params_from_schema(OpenAPI,RefOr,&,any)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/validate_response.rs
validate_object_against_ref_or_schema(OpenAPI,ReferenceOr,Value)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/validate_response.rs
validate_object_against_type(OpenAPI,Type,Value)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi/mod.rs
QualifiedOperation.new(a,any,a,any)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/reporting/sqlite.rs
Reporting.report_coverage(u64,u64,u64,u64)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/reporting/sqlite.rs
Reporting.report_request(OpenApiRequest,CurlRequest,usize)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/coverage_clients/lcov_client.rs
LcovCoverageClient.set_cov_bit(Path,u32,u8)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/reporting/mod.rs
Reporting.report_coverage(u64,u64,u64,u64)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/reporting/mod.rs
Reporting.report_request(OpenApiRequest,CurlRequest,usize)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/input/mod.rs
fix_input_parameters(S,usize,OpenApiRequest)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/input/mod.rs
Body.build(OpenAPI,Operation,Option)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/initial_corpus/dependency_graph/mod.rs
add_references_to_openapi_input(DiGraph,NodeIndex,OpenApiInput)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi_mutator/mod.rs
mutate_parameter_contents(ParameterContents,S,dyn,any)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi_mutator/mod.rs
mutate_string(S,dyn,any,String)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi_mutator/mod.rs
mutate_number(S,serde_json,Number)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/openapi_mutator/mod.rs
mutate_leaf_value(S,dyn,any,SimpleValue)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/initial_corpus/mod.rs
generate_corpus_to_files(OpenAPI,Path,Option)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/initial_corpus/mod.rs
initialize_corpus(OpenAPI,Option,Option)
🟡 Unit Interfacing
(Introduced)
WuppieFuzz/src/initial_corpus/mod.rs
fill_corpus_from_api(InMemoryOnDiskCorpus,OpenAPI,Option)

📚 Remaining technical debt

0 refactoring candidates didn't get better or worse, but are still present in the code you touched.

Sigrid ratings

System property System on 2024-10-14 Before changes New/changed code
Volume 5.4 N/A N/A
Duplication 4.0 N/A 0.9
Unit Size 2.1 N/A 2.8
Unit Complexity 3.0 N/A 4.0
Unit Interfacing 2.0 N/A 2.5
Module Coupling 3.3 N/A 5.5
Component Independence 5.4 N/A N/A
Component Entanglement N/A N/A N/A
Maintainability 3.6 N/A 3.5

View this system in Sigrid


Did you find this feedback helpful?

We would like to know your thoughts to make Sigrid better. Your username will remain confidential throughout the process.