d4t

Design for testability

https://github.com/m-zakeri/d4t

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 2 DOI reference(s) in README
  • Academic publication links
    Links to: sciencedirect.com
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.5%) to scientific vocabulary

Keywords

class-diagram dependecy-injection design-patterns design-testability factory-method-pattern java machine-learning refactoring software software-testability testability
Last synced: 4 months ago · JSON representation ·

Repository

Design for testability

Basic Info
Statistics
  • Stars: 3
  • Watchers: 1
  • Forks: 1
  • Open Issues: 3
  • Releases: 2
Topics
class-diagram dependecy-injection design-patterns design-testability factory-method-pattern java machine-learning refactoring software software-testability testability
Created about 4 years ago · Last pushed over 1 year ago
Metadata Files
Readme License Citation

README.md

D4T: Design for testability

This repository contains the source code and replication package for our creative learning-based ‘design for testability’ approach in software systems. More information is available at https://m-zakeri.github.io/D4T.

The paper is available at https://www.sciencedirect.com/science/article/abs/pii/S0950584924001162?dgcid=coauthor.

```markdown @article{ZAKERINASRABADI2024107511, title = {Measuring and improving software testability at the design level}, journal = {Information and Software Technology}, volume = {174}, pages = {107511}, year = {2024}, issn = {0950-5849}, doi = {https://doi.org/10.1016/j.infsof.2024.107511}, url = {https://www.sciencedirect.com/science/article/pii/S0950584924001162}, author = {Morteza Zakeri-Nasrabadi and Saeed Parsa and Sadegh Jafari}, keywords = {Software testability, Design for testability, Object-oriented design, Class diagram, Automated refactoring, Design patterns}, abstract = { Context: The quality of software systems is significantly influenced by design testability, an aspect often overlooked during the initial phases of software development. The implementation may deviate from its design, resulting in decreased testability at the integration and unit levels.

Objective: The objective of this study is to automatically identify low-testable parts in object-oriented design and enhance them by refactoring to design patterns. The impact of various design metrics, mainly coupling (e.g., fan-in and fan-out) and inheritance (e.g., depth of inheritance tree and number of subclasses) metrics on design testability is measured to select the most appropriate refactoring candidates.

Method: The methodology involves creating a machine learning model for design testability prediction using a large dataset of Java classes, followed by developing an automated refactoring tool. The design classes are vectorized by ten design metrics and labeled with testability scores calculated from a mathematical model. The model computes testability based on code coverage and test suite size of classes that have already been tested via automatic tools. A voting regressor model is trained to predict the design testability of any class diagram based on these design metrics. The proposed refactoring tool for dependency injection and factory method is applied to various open-source Java projects, and its impact on design testability is assessed.

Results: The proposed design testability model demonstrates its effectiveness by satisfactorily predicting design testability, as indicated by a mean squared error of 0.04 and an R2 score of 0.53. The automated refactoring tool has been successfully evaluated on six open-source Java projects, revealing an enhancement in design testability by up to 19.11%.

Conclusion: The proposed automated approach offers software developers the means to continuously evaluate and enhance design testability throughout the entire software development life cycle, mitigating the risk of testability issues stemming from design-to-implementation discrepancies.

} } ```

Owner

  • Name: Morteza Zakeri
  • Login: m-zakeri
  • Kind: user
  • Location: Planet Earth
  • Company: @Micropedia

Ph.D. candidate, software engineer, machine intelligence

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software tool, please cite it as below."
authors:
- family-names: "Zakeri-Nasrabadi"
  given-names: "Morteza"
  orcid: "https://orcid.org/0000-0003-4289-0606"
- family-names: "Parsa"
  given-names: "Saeed"
- family-names: "Jafari"
  given-names: "Sadegh"
title: "Design for testability"
version: 0.2.0
doi: https://doi.org/10.5281/zenodo.11076642
date-released: 2024-04-30
url: "https://m-zakeri.github.io/D4T"

GitHub Events

Total
  • Watch event: 2
  • Fork event: 1
Last Year
  • Watch event: 2
  • Fork event: 1

Dependencies

requirements.txt pypi
  • Cython ==0.29.30
  • Pillow ==9.2.0
  • antlr4-python3-runtime ==4.10
  • attrs ==21.4.0
  • cycler ==0.11.0
  • fonttools ==4.34.4
  • iniconfig ==1.1.1
  • joblib ==1.1.0
  • kiwisolver ==1.4.3
  • matplotlib ==3.5.2
  • networkx ==2.8.4
  • numpy ==1.23.1
  • packaging ==21.3
  • pandas ==1.4.3
  • pluggy ==1.0.0
  • py ==1.11.0
  • pyparsing ==3.0.9
  • pytest ==7.1.2
  • python-dateutil ==2.8.2
  • pytz ==2022.1
  • scikit-learn ==1.0.2
  • scipy ==1.8.1
  • six ==1.16.0
  • threadpoolctl ==3.1.0
  • tomli ==2.0.1