Nothing Special   »   [go: up one dir, main page]

Early Bug Detection Through Shift Left Testing

Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

Volume 9, Issue 11, November – 2024 International Journal of Innovative Science and Research Technology

ISSN No:-2456-2165 https://doi.org/10.38124/ijisrt/IJISRT24NOV177

Early Bug Detection through Shift Left Testing


Ashwin Venkitaraman
Independent Researcher
Dept. of Electrical Engineering
Fremont, CA – 94536, USA

Abstract:- Shift-Left Testing is a preventive approach in unit testing, integration testing and the code analysis.
the SW development process of identifying and handling Automation is also involved in this approach where
defects where testing is performed before the flow developers are able to run tests consistently on the build
proceeds to the subsequent phases of SDLC. In most process.
situations, testing is done after development, and this
means that any defects get discovered later contributing to This is because the testing starts early in the
high costs and more time to complete the project. development phase and is done continuously; this helps in
Essentially, Shift-Left Testing implies that testing should minimizing the number of bugs that get to the ultimate stages
be conducted during the design or the coding stage and is of the project such as user acceptance testing or production
beneficial due to the fact that in those stages of phase. It also allows for quicker feedback loops to be
development, it is considerably less expensive to rectify provided to the developers so that they may solve problems
problems that are detected. It uses integrated strategies as they arise without having to escalate. Testing performed
including continuous integration, static code analysis and during the development phase improves the reliability of the
automated testing, in which the development and the test software and therefore improves on user satisfaction and
team work together from the start. Consequently, the reduces on the maintenance costs in the future. Therefore,
approach results in enhanced quality of the software, their shift-left testing as an early bug detection technique is a
development time, and minimization of the post-release beneficial approach that helps to produce excellent-quality
faults. Although Shift-Left Testing is changing many ways software quickly while reducing the dangers and delivery
in software development for the better, it has some time of products.
problems, for instance, changing organizational culture
and has high demands to test automation frameworks. A. Benefits of Shift-Left Testing for Early Bug Detection
The benefits of shift-left testing for early bug detection
Keywords:- Shift-Level Testing, Early Bug Detection, are substantial and play a crucial role in improving the overall
Software Quality Assurance, Test Automation, Software software development lifecycle. Some of the key advantages
Development Lifecycle (SDLC). include:

I. INTRODUCTION  Reduced Cost of Bug Fixes


It is also important to note that it will cost a developer a
Shift-left testing is a preventive approach in which bug significantly higher amount of resources to fix bugs that are
detection is done at the initial stage of software development located deeper into the code pipeline. Shift left testing
as a way of enhancing the quality of the software. The prevents bugs getting detected later at a later stage in the
software development model that specified the testing phase development hence saves effort that otherwise would have
after the development phase is not efficient because the bugs been spent on rectifying slips made during development, thus
are detected late, therefore, the correction of the bugs is costly saves costs.
and time-consuming. Shift-left testing, as the name implies,
means moving testing activities up or to the ‘left’ on the V-  Improved Software Quality
model of software development life cycle. This approach For complicated programs, early bug detection makes
focuses on regular testing, with the idea everyone who is sure that the code base is subjected to error check as early as
involved in the development of an application, from possible. This leads to the creation of higher quality of the
developers to testers, is involved from the beginning, with the software that has fewer vital problems signifying themselves
aim of avoiding bugs rather than dealing with them when they in a later stage of the testing or even when the software is
occur. released to be used.

Shift left testing is basically aimed at identifying a  Faster Time-to-Market


problem at a level where it is still simple and cheap to rectify Correcting defects as early as possible decreases the
the same. Such problems associated with the logic, number of working hours to be spent for restoring bugs in the
functionality and performance of a code can be identified future. Therefore, errors are detected early and the
much early should the code be tested during the development development process is improved so as to facilitate faster
process. Some of the common practices that are used to delivery of the product without being held up by major
ensure that the software is fine from the early stages include; problems at the eleventh hour.

IJISRT24NOV177 www.ijisrt.com 185


Volume 9, Issue 11, November – 2024 International Journal of Innovative Science and Research Technology
ISSN No:-2456-2165 https://doi.org/10.38124/ijisrt/IJISRT24NOV177

 Increased Developer Productivity II. LITERATURE REVIEW


When testing is incorporated during the initial
development stages, it gives the developers quicker feedback, Li, Z., Tan, L., Wang, et al (2006). Over the years, bugs
because they correct them at that stage. This makes the in the contemporary OSS have acquired certain features
development process continuous and does not allow for the mainly as a result of the new trends in software development,
tendency of having to look for bugs at a later stage in the complexity of the code and the open-source communities.
development cycle. Nowadays, almost all the open-source projects use
continuous integration, testing, and issue tracking systems
 Enhanced Collaboration between Teams that allow them to manage bugs more efficiently. Still, some
Shift left testing implies that testing must be carried out of the problems remain the same which include security
while developers are in the initial stage of the development issues, memory issues, and performance issues. One of the
process. Another test automation approach is shift-left testing, primary challenges of OSS development is that it is
it means testing should start at the early stages of the decentralized which can result in incongruity of bug report
development process involving the cooperation of the and time taken for their resolution. Research done on this
development and testing teams. shows that nature and type of bugs are affected by the size of
the code and the activity level of the coders. Besides, bug
 Better Risk Management identification and reporting in OSS is done by a larger group
Shift-left testing enables one to address possible risks of users with different levels of experience making bugs in
created by bugs that might degenerate upon realization at a OSS to have different characteristics compared to bugs in
later stage. It also has the advantage of averting some of the proprietary software.
disruptions in cycle of development and enhances the general
stability of the projects. Regehr, J., Chen, Y., et al (2012). Test-case reduction
for C compiler bugs is an important in the debugging process
 Continuous Improvement that is used for making the test case as small as possible but
The concept of early testing leads to a test feedback loop still containing some behavior that causes the failure. If a bug
that allows code to be enhanced as the development process is found in C compiler, the first test case may be large and
continues. This helps to check that successive versions of the complicated and the cause of the bug may be hard to find. By
product are better consolidated, more reliable and closer to systematically reducing the test case, developers can easily
expectations of the user and the business. identify the real conditions that could lead to the bugs, which
in turn eases identification and resolution of the issue at hand.
Shift-left testing is a proactive strategy that integrates Delta debugging or other similar methods or tools like “C-
testing into the earlier phases of development, leading to better Reduce” do this automatically by constantly eliminating
software quality, faster releases, and reduced costs. unrelated sections of the code while ensuring that the code
contains only the parts necessary to reproduce the bug. Test-
B. Need of the Study case reduction is crucial for compiler bugs as compilers are
This work is necessary because the contemporary exposed to various inputs and optimization techniques
software systems are becoming more sophisticated, and the making bug reproduction in such a setting rather difficult. A
requirements for creating stable and efficient applications are smaller test case can also help in developers’ interaction and
rising. As the software projects have grown, the cost and effort provide a faster bug fix. Regression test suites are created by
of rectifying the bugs at the later stages of the development or adding reduced test cases to the original test suites so that the
even post-release has become more expensive and same bug does not revisit the subsequent versions of the
cumbersome as compared to the bugs which are found at the compiler. It should be realized that, test-case reduction
initial stages. This has prompted the shift-left testing approach improves the effectiveness of the debugging process, which
that focuses on the early identification of bugs in the in turn improves the stability and efficiency of the compiler.
development cycle. The frequency at which new software
releases are made possible by agility and automated pipelines Pan, K., Kim, S., & Whitehead, E. J. (2009).
has increased the pressure for effective and preventive testing. Recognizing bug fix patterns is crucial for optimization of
It is, therefore, important to note that quality assurance software maintenance and for amplification of development
methodologies that are practiced in the traditional approach activities. Bug fix patterns can be described as the patterns of
where quality assurance is conducted after development are how developers address the problem of defects in the code.
inadequate to cope with these cycles. Thus, it is essential to These patterns may differ depending on the type of bug to be
discuss such approaches as shift-left testing, which represents fixed, the programming language used and the project under
the idea of testing from the beginning and continuously. This development. Research indicates that the majority of bugs
research is not only going to benefit software quality, but it is fixed fall under a few major types, including logical
also going to offer an efficient way of cutting down the costs problems, memory related problems, and syntax problems.
of development and shortening the time it takes to get the Some of the changes that can be seen in bug fix patterns
software to the market while at the same time increasing the include changes in the structure of the code as well as changes
satisfaction level of the end users through the delivery of more in the variables that are assigned to different values and even
effective software products. changes that may lead to the introduction of new algorithms.
This analysis helps the developers to predict which kind of

IJISRT24NOV177 www.ijisrt.com 186


Volume 9, Issue 11, November – 2024 International Journal of Innovative Science and Research Technology
ISSN No:-2456-2165 https://doi.org/10.38124/ijisrt/IJISRT24NOV177

bugs is likely to occur in similar situations so that it can be Nama, Prathyusha (2023). presents a comprehensive
prevented. analysis of how artificial intelligence (AI) is transforming
user interaction in mobile applications through intelligent
Williams, C. C., & Hollingsworth, J. K. (2005). Source features and context-aware services. The research highlights
code repositories mining is a useful approach that augments how AI-powered mobile apps leverage machine learning
bug searching techniques by employing historical data that algorithms to understand user behavior, provide personalized
could be available in repositories such as GitHub, GitLab or recommendations, and deliver intelligent, context-aware
Bitbucket. These sources consist of valuable data such as experiences. The study emphasizes the integration of various
commit histories, bug reports, code changes and developers’ AI-driven functionalities, including voice recognition,
discussions that can be helpful to understand bug patterns and natural language processing, and predictive analytics, which
code evolution. Through proper use of machine learning and collectively enhance user engagement and satisfaction while
data mining, one is able to discover patterns of where bugs improving accessibility for diverse user groups.
frequently occur, what types of bugs are usually found and
how bug correction develops over time. Exploring these The research also addresses critical implementation
repositories makes it possible to identify code smells, security challenges, particularly regarding privacy and data security in
flaws, and places with high bug density that explain high AI deployment. Through analysis of successful case studies
testing or refactoring priority. This approach can help build and emerging trends, Nama demonstrates how context-aware
models that will predict the future bugs based on patterns on services enable applications to respond dynamically to users'
the past defects and it will be possible to prevent things that environments and situations, leveraging data about location,
may hinder the proper running of the software. Automatic time, and activity to deliver tailored services. The findings
mining also contributes to the development of both static and suggest that while AI is revolutionizing mobile user
dynamic analysis tools as they are given actual bug data to interaction through features like content generation, digital
enhance the former’s capacity to detect even more intricate assistance, and predictive analytics, developers must
and sophisticated bugs. Through continual learning from vast carefully balance personalization with ethical considerations
amounts of code and bug fix data, these techniques can regarding user privacy. The study concludes that AI-powered
improve the effectiveness of today’s advanced bug finding mobile applications represent a significant advancement in
tools and the resulting software systems. user interaction, making experiences more intuitive and
personalized while emphasizing the need for continued
Yang, X., Chen, Y., Eide, E., et al (2011). Debugging research in areas such as Edge AI and conversational
bugs in C compilers is intricate since the inputs that compilers interfaces.
come across are vast and are rather complex. The process of
translation of high level human-readable C code into the III. METHODOLOGY
machine-readable code is done with the help of C compilers
that face multiple challenges in terms of the language The study shall use survey research with a mix of both
features, optimization levels, and hardware architectures. quantitative and qualitative research in establishing customer
Compiler bugs may result in a variety of scenarios such as the satisfaction with internet banking services across the different
wrong code being generated, a program halting or slowing demographic segments. This combination enables the
down. These bugs, in general, are detected with the help of researcher to understand the research problem in depth as it
various testing methods, including differential testing, which combines numerical data with the participants’ perception of
implies the comparison of the results of the same code the problem. The quantitative aspect will assist in
compilation with different compilers or with different determining the level of satisfaction of customers while the
options. qualitative will offer more information in relation to the
perception and experiences of customers. The target
Bader, J., Scott, A., et al (2019). Automated bug fixing population comprises the people aged between 18-60 years
is a new promising field that aims at using machine learning who engage in online banking. A purposive sampling
and artificial intelligence to correct faults in the software. It technique of stratified random sampling will be used so as to
is a technique which aims at decreasing the time that capture participants from different generations, occupation,
developers spend on debugging by delivering to them the and income status. It will be easier to ensure that the findings
most helpful information for bug identification, analysis and come from different point of views hence increasing the
resolution. Automated bug fixing is usually performed based generality of the results. The survey sample will be 300
on historical data of software repositories, bug reports, code respondents, whereas 20 in-depth interviews will be used to
modifications, and commit histories to learn common gain more insights into the respondents’ experiences in their
patterns and developers’ solutions. With these data, models own words.
can recommend or even execute fixes with similarities to the
bugs seen earlier. One way can be for example to apply the Keeping this in mind the primary data will be collected
neural networks or genetic algorithms to create patches for from customers via online survey which will have pre-
the faulty code. constructed questions for measuring the satisfaction level of
the customers about internet banking and factors that affect
their usage of internet banking services. Besides the aforesaid
surveys, exploratory will be conducted to get more details on
certain aspects of customer experience that may not

IJISRT24NOV177 www.ijisrt.com 187


Volume 9, Issue 11, November – 2024 International Journal of Innovative Science and Research Technology
ISSN No:-2456-2165 https://doi.org/10.38124/ijisrt/IJISRT24NOV177

necessarily be reflected in quantitative statistics. Secondary longer time to release and poor quality software products.
data shall be gathered from journals, previous researches, and Most of the conventional testing techniques that are practiced
reports from the Indian banking sector, which will give wider after the development phase of a software also report bugs at
perspective about the study. Informed consent will be sought a later stage which increases problems such as time overrun,
from all participants in the study, so that the participants are increased costs, and unsatisfied customers. Specifically, as
fully aware of the nature of research to be conducted. To the size of software systems increases there is a higher
ensure the respondents’ confidentiality and privacy, their demand for early detection of bugs in order to avoid issues of
responses will also not be disclosed. In order to conduct the growth. As much as shift-left testing has provided a solution
research in an ethical manner, ethical clearances will be to this challenge, little is still known regarding how to apply
sought from the ethical committee of the institution. it in a variety of development settings and how it generates a
positive impact on the quality of software and its delivery
IV. RESEARCH PROBLEM time. This research problem therefore aims to identify the
techniques, methods, and approaches to adopt for the
Main research problem in this research is centered on incorporation of early testing into the development life cycle
the continuous difficulty of detecting and eradicating processes with the view of optimising the shift-left testing
software bugs at the early stage of development. Even with initiative. This is an important factor that can enable
agile development methodologies in place and the focus on movement from a model of continuously patching flawed
delivering software more frequently, it remains a challenge software to one where software developers design quality
for organizations to identify defects early in the development solutions from the onset.
life cycle, thereby suffering from extra development cycles,

V. RESULTS

Table 1: Comparison of Bug Detection Phases in Traditional Testing vs. Shift-Left Testing
Testing Phases Traditional Testing (Bugs Detected) Shift-Left Testing (Bugs Detected)
Requirements Gathering 2% 15%
Design 5% 20%
Development 10% 25%
Integration Testing 20% 25%
System Testing 30% 10%
User Acceptance Testing 20% 3%
Post-Deployment 13% 2%

Fig 1:

The table shows the effectiveness of traditional testing and shift-left testing identifies only 20% of bugs which shows
and shift-left testing of bugs in various stages of SDLC. In the that shift-left testing is more effective in comparison to a
traditional software testing approach, only 2% of the defects traditional way of testing. Likewise, during development,
are identified during the requirements gathering phase, while shift left testing offers 25% of bugs and 10% of traditional
in shift-left testing, 15% of the total defects are identified testing, which emphasis the testing during the coding.
which greatly emphasizes on the early phase of testing. In
design phase, the traditional testing identifies only 5% of bug

IJISRT24NOV177 www.ijisrt.com 188


Volume 9, Issue 11, November – 2024 International Journal of Innovative Science and Research Technology
ISSN No:-2456-2165 https://doi.org/10.38124/ijisrt/IJISRT24NOV177

While in the integration testing phase, both detect about of bugs detected after the shift-left testing is also considerably
25% of the bugs, the difference is evident in other phases. It smaller, 2% in shift-left testing and 13% in the conventional
is found that 30 % of bugs are detected in system testing while testing, thus minimizing the need to correct issues that have
shift left testing identifies them at 10 % as many are made it into the production versions. In all, shift-left testing
eliminated. Traditional user acceptance testing contributes to is better placed to detect bugs early hence minimizing the
bug detection at 20% while shift-left contributes at 3% thus risks and costs that are incurred in bug fixes at later stages.
making the user experience more seamless. The percentage

Table 2: Cost of Bug Fixing Across Development Stages (in USD)


Development Stage Cost in Traditional Testing Cost in Shift-Left Testing
Requirements Gathering $500 $100
Design $1,000 $250
Development $3,000 $1,500
Integration Testing $5,000 $2,000
System Testing $7,000 $3,000
User Acceptance Testing $10,000 $5,000
Post-Deployment $20,000 $8,000

The table shows how much it would cost to adopt shift advantage of testing as it progresses with coding. During
left testing against traditional testing at each phase of the integration testing it costs $5,000 in traditional testing while
development process. During the requirements gathering it costs $2,000 in shift-left testing because issues are detected
phase, the cost of handling problems in traditional testing early hence not complicated to solve. In the traditional
costs $500 while shift-left testing costs only $100; proving method of testing, system testing cost $7,000, while the user
that it is cheaper to test earlier. Likewise, in the design phase, acceptance test cost $10,000 but using the shift-left testing,
conventional testing costs $1, 000 but shift-left testing costs the cost is reduced to $3,000 cost for system testing and
$250 as it detects defects right from the onset. $5,000 for user acceptance testing. The largest gap is
observed in post-deployment where the traditional approach
And as the development increases, the difference in the costs $20,000 while shift-left testing costs $8,000. This table
cost between the two becomes more significant. During the shows reduced cost impact of shift-left testing as most of the
development phase, traditional testing takes $3,000 while root causes of costly rework and post-deployment fixes are
shift left testing takes $1,500 in the same phase, proving the caught and fixed early.

Table 3: Comparative Results Table for Shift-Left vs. Traditional Testing


Aspect Traditional Testing Shift-Left Testing
Lower in initial phases, higher post-
Bug Detection Rate Higher during initial phases, lower post-development
development
Testing Involvement Testing begins after development completion Testing begins during the design and coding phases
Developer Lower (due to frequent context switching and
Higher (focused bug fixing during coding stages)
Productivity late rework)
Broader coverage, including unit, integration, and
Test Coverage Limited coverage, primarily functional testing
static analysis
Time Spent on More time spent on debugging after
Less time, as bugs are caught during development
Debugging development
Impact on Release Frequently causes delays due to late-stage
Fewer delays as most bugs are detected early
Deadlines defects
Lower (due to deferred testing and bug
Code Quality Higher (continuous testing improves code quality)
accumulation)
Maintenance Costs Higher, with frequent post-release patches Lower, as fewer defects remain post-release
Error Propagation Higher, as bugs go unnoticed until later stages Lower, as early detection prevents error propagation
Team High collaboration between development and QA
Less cross-team interaction, isolated roles
Communication teams
Test Data Creation Test data created at later stages, often delayed Test data prepared early in the development process
Risk of Regression Lower, as early testing helps in maintaining system
Higher due to late testing
Bugs stability
Security Issues Identified during code development through static
Identified post-development
Identification analysis and code review

IJISRT24NOV177 www.ijisrt.com 189


Volume 9, Issue 11, November – 2024 International Journal of Innovative Science and Research Technology
ISSN No:-2456-2165 https://doi.org/10.38124/ijisrt/IJISRT24NOV177

VI. CONCLUSION [9]. Nama, Prathyusha. "AI-Powered Mobile


Applications: Revolutionizing User Interaction
Shift-left testing can be said to be an important strategy Through Intelligent Features and Context-Aware
in solving the problems that arise in the current software Services." (2023).
development processes due to early identification of bugs. It [10]. Jang, J., Agrawal, A., & Brumley, D. (2012, May).
is much more effective to incorporate testing activities into ReDeBug: finding unpatched code clones in entire os
the early stages of the development life cycle as this will distributions. In 2012 IEEE Symposium on Security
reduce the number of efforts, time and money needed to and Privacy (pp. 48-62). IEEE.
check and correct the defects. This approach in software [11]. Meszaros, G. (2007). xUnit test patterns: Refactoring
development not only enhances the quality of the end test code. Pearson Education.
product, but also reduces the time taken to complete the [12]. Herzig, K., Just, S., & Zeller, A. (2013, May). It's not
software since most of the bugs are detected early enough a bug, it's a feature: how misclassification impacts bug
before they progress to other difficult to handle phases. Thus, prediction. In 2013 35th international conference on
the work focuses on the preventive approach to testing software engineering (ICSE) (pp. 392-401). IEEE.
activities with an emphasis on integrating developers and [13]. Liblit, B. R. (2004). Cooperative bug isolation.
testers as often as possible: unit testing, static code analysis, University of California, Berkeley.
and automated testing frameworks. These strategies must [14]. Pewny, J., Schuster, F., Bernhard, L., Holz, T., &
therefore be aligned to the agile and CI/CD way of working Rossow, C. (2014, December). Leveraging semantic
to be able to support the needs of development cycles that are signatures for bug search in binary programs. In
fast. When testing is performed right from the start of the Proceedings of the 30th Annual Computer Security
development cycle, it produces more effective software Applications Conference (pp. 406-415).
systems for the customers and decreases maintenance [15]. Sun, C., Le, V., & Su, Z. (2016, October). Finding
expenses. compiler bugs via live code mutation. In Proceedings
of the 2016 ACM SIGPLAN international conference
REFERENCES on object-oriented programming, systems, languages,
and applications (pp. 849-863).
[1]. Li, Z., Tan, L., Wang, X., Lu, S., Zhou, Y., & Zhai, C. [16]. Lu, S., Park, S., Seo, E., & Zhou, Y. (2008, March).
(2006, October). Have things changed now? An Learning from mistakes: a comprehensive study on
empirical study of bug characteristics in modern open real world concurrency bug characteristics. In
source software. In Proceedings of the 1st workshop Proceedings of the 13th international conference on
on Architectural and system support for improving Architectural support for programming languages and
software dependability (pp. 25-33). operating systems (pp. 329-339).
[2]. Regehr, J., Chen, Y., Cuoq, P., Eide, E., Ellison, C., & [17]. Tufano, M., Watson, C., Bavota, G., Penta, M. D.,
Yang, X. (2012, June). Test-case reduction for C White, M., & Poshyvanyk, D. (2019). An empirical
compiler bugs. In Proceedings of the 33rd ACM study on learning bug-fixing patches in the wild via
SIGPLAN conference on Programming Language neural machine translation. ACM Transactions on
Design and Implementation (pp. 335-346). Software Engineering and Methodology (TOSEM),
[3]. Pan, K., Kim, S., & Whitehead, E. J. (2009). Toward 28(4), 1-29.
an understanding of bug fix patterns. Empirical [18]. Hooimeijer, P., & Weimer, W. (2007, November).
Software Engineering, 14, 286-315. Modeling bug report quality. In Proceedings of the
[4]. Williams, C. C., & Hollingsworth, J. K. (2005). 22nd IEEE/ACM international conference on
Automatic mining of source code repositories to Automated software engineering (pp. 34-43).
improve bug finding techniques. IEEE Transactions [19]. Pewny, J., Garmany, B., Gawlik, R., Rossow, C., &
on Software Engineering, 31(6), 466-480. Holz, T. (2015, May). Cross-architecture bug search
[5]. Yang, X., Chen, Y., Eide, E., & Regehr, J. (2011, in binary executables. In 2015 IEEE Symposium on
June). Finding and understanding bugs in C compilers. Security and Privacy (pp. 709-724). IEEE.
In Proceedings of the 32nd ACM SIGPLAN [20]. Park, S. B., Hong, T., & Mitra, S. (2009). Post-silicon
conference on Programming language design and bug localization in processors using instruction
implementation (pp. 283-294). footprint recording and analysis (IFRA). IEEE
[6]. Liblit, B., Aiken, A., Zheng, A. X., & Jordan, M. I. Transactions on Computer-Aided Design of
(2003). Bug isolation via remote program sampling. Integrated Circuits and Systems, 28(10), 1545-1558.
ACM Sigplan Notices, 38(5), 141-154.
[7]. Bader, J., Scott, A., Pradel, M., & Chandra, S. (2019).
Getafix: Learning to fix bugs automatically.
Proceedings of the ACM on Programming Languages,
3(OOPSLA), 1-27.
[8]. Jin, G., Song, L., Shi, X., Scherpelz, J., & Lu, S.
(2012). Understanding and detecting real-world
performance bugs. ACM SIGPLAN Notices, 47(6),
77-88.

IJISRT24NOV177 www.ijisrt.com 190

You might also like