Software development advances focus on productivity of existing software systems and quality is basic demand of every engineering product. In this paper we will discuss complete reengineering process with aspects of forward, reverse and quality assurance mechanism. As we know the software development life cycle (SDLC) follows a complete mechanism of engineering process. In forward engineering we tried to follow selective main phases of software engineering(data,requirements,design,development,implementation).Inreverse engineering we move backward from the last phase of developing product as it gather requirements from implemented product(implementation, coding, design,requirements,data).During reengineering we add up more quality features on customer demands, but the actual demand is to fulfill quality needs that can be assured by external as well as internal quality attributes such as reliability, efficiency, flexibility, reusability and robustness in any software system. We discussed a methodological approach to move from reengineering to the journey of quality assurance. More than 50 studies come into discussion and throughput results proposed by graph and tabular form. We can say if the reengineering process produce quality attributes, then it can be said by old software system refactoring as code refactoring, data refactoring and architectural refactoring we obtained a quality products at lower cost instead of new software system development, which causes decrease in quality attributes as cost, time etc. In future work testing methodology can be proposed for quality assurance.
Keywords: Software ,reengineering, refactoring, restructuring, forward engineering, reverse engineering, quality assurance , internal quality, external quality,flexibility,reusability,reliability,robustness
1. Introduction: The re-engineering [1] [13] of used things in already developed software lead to avoid from wastage of material, time and maintainace cost bring most of effects on economic values [4]. For any software development organizations [2] increase in software development cost is much important, so the development companies which are at small, medium or large scale try to follow up reengineering process.
Basically, the re-engineering process is to get existing software and add more features according to customer requirements [3]. The factors effects in these fields are software maintenance cost, repairing cost or the performance of system architecture failed to work out. We try to move with technology advancements and available hardware [5]. However, the main problem comes into existence when we try to understand current system. Usually, the documentation with architectural design and source code is not present or expired due to large time passage so we cannot get its view clearly [12]. What we have to do here? Usually present features not needed, we exclude old features with many more advance features according to customer demand [6].
Re-engineering also involved sub process as forward engineering, reverse engineering, refactoring or restructuring [7]. Reverse engineering process is the major workout of software reengineering. We check implemented software system and analyze its activity by moving the implemented organization. We study the system and extract its coding by its working or its documentation [8].. We conclude the architecture from designing phase analysis, after this phase we get extract the modules and get requirements as the system was developed.
Before Further explanation of intro
1.1Methodology
(Introduction continued)
In gathered data we add more features according to customer demand. We structure a document as collected form of data [16]. After this we start to develop new system or we can say restructured system.
In forward engineering the reengineering process phase refactoring [14] involved equally. We get elicitated requirements from data or we can say requirements are refactored [19]. After requirements elicitation we add up more designing architectural features in existing architecture that is called design restructuring [9]. From newly developed design we develop and refectories the code [17] [18]. We check coding logics, errors, coding smells, and all drawbacks that were lagging the quality [10].
Software system refactoring complete here and we can say reengineering [11] is a method to enhance the quality attributes in system with code refactoring, design refactoring and software refactoring and prepare new product with extra features and more reliability. Forward engineering last phase is testing to implement the software system [15]. We test and evaluate system according to customer demands and here refectory product ready to implement [20] [21].
In this paper I proposed next procedure to assure the quality of newly reengineered software.3-level architecture is proposed for the testing quality of developed software [22]. Level-1 which tells us about the external quality which is visible to customer .In external quality there are three attributes reliability, efficiency and maintenance cost [23]. These attributes are visible part to our customer these should be present at least 90% for the customer satisfaction. In level-2, 3 I formulated the invisible part of reengineered system as internal quality. Internal quality at level-2 tells that there should be improvements in code quality [25], decrease in complexity and increase in user friendly as readability and programming structure should be well organized and in level-3 here in our reengineered software there should be presence of reusability [24]. Test ability process should be easy to evaluate the quality. In any future dis-orderness if we have to study the code it should be structured in well professional practices [26] [27] [28]. At last, I evaluate that if we will follow my proposed methodology we can consider it easy mechanism from the journey of software reengineering to quality assurance.
2. Related Work
This section provides a discussion on reengineering process to quality assurance characteristics. It also illustrates the forward engineering, reverse engineering and quality assurance process with the help of refactoring process applied to deal with code bad smells and design patterns refactoring. A brief discussion on existing reengineering approaches is also covered in this section.
2.1 Software re-engineering
The process of extracting any artifact with added features, for enhanced performance and reliability high degree of consistency and betterment in maintainability is called re-engineering [29].
Figure 2 the general pattern of re-engineering software [45]
Now a days software products advancements increasing rapidly. Mostly software developed with new architectures attributes and technologies.Re-engineering provide facility of user boost advance software capabilities [11]. Reengineering process in large-scale legacy software with the changing in interfaced can be risky. When we increase requirements integrity, it leaves effects on security. By software elicitation tried to overcome these risks of software integrity [12].
2.2 Restructuring (code, data, design, document)
Re-structuring process can be said refactoring in real meaning, it can be defined as†Refactoring is a well-organized method for restructuring an existing body of code, make changing in its internal structure- without changing its external behavior [30].
Figure 4. Code refactoring [47]
On-chip BRAM becomes highly important for high-bandwidth data communication. Automated chip restructuring is best practice to elaborate the buffering and bandwidth control. It checks impact on the performance and the consumption of resources [17].
Restructuring in IT areas as customization, internal process, deployment of software, also organization changing is discussed. IT served quality, Customer satisfaction and user impact on IT projects. [18].
By the detection and removal of errors in code, it is easy to improve the quality of software. Several techniques can be used for the betterment of code quality. As the quality of code will be good then the quality of product will automatically good [9-10].
Refactoring and restructuring improve the reliability and maintainability of code. The main purpose is the identification of potential refactoring opportunities. Terms used here 1) refactoring 2) replace type code within subclasses 3) Replace code type with state. Mostly focused on Java and also on automatically refactoring methods [31].
2.3 Forward and reverse engineering with aspects of refactoring
Figure 3 .reverse and forward engineering [46]
2.3.1 Reverse-Engineering
(Implementation, design, requirements, data)
It is the process of analyzing software system to extract the design, requirements, and data from the implementation of system with high level of abstraction is called reverse engineering [32].
Reverse Engineering (RE) in the semiconductor business. It has connected different systems, for example, the electronic administration, enormous picture speeding up calculation, and programmed age for circuit extraction. Because of leading the RE with the self-made ROIC chip, it was affirmed that the simple circuit was precisely extricated as the entryway level [33].
2.3.2 Forward Engineering:
(Data, requirements, design, implementation)
It is the process of engineering software by following steps from data to extract design for architecture with implementation of coding and system [32].
An appropriated programming item building group needs to manage the extra issue of dissemination separated from the typical desires around cost, quality, and time to market and advancement. Disregarding exclusively following the recommended programming building forms, regularly the circulated groups neglect to go about as a solitary item group. The key speculation in this approach is the suspicion that most dispersed programming item designing groups in a similar association requires arrangement as opposed to base up retooling as a detailed programming building activity and this arrangement can be accomplished in a quick and successful way by adjusting the key interface pioneers [34].
2.4 Reengineering connection with Quality assurance
Our research question that can be extracted to fulfill the conclusion of all the research is based on the quality assurance. Here we will try to explain the concepts of
1) Quality assurance
2) Software quality dependences
3) Software Reengineering and quality assurance
4) Software quality attributes w.r.t software forward and reverse engineering
What is Software Quality assurance?
Software quality assurance (SQA) is a method of testing software that our developed product fulfilling the quality specification standards and compile and developed according to rules.SQA is a running process of (SDLC) that checks developed software system working according to desired quality measures [35].
Figure 4 .Process of quality assurance [47]
How Software Reengineering leads to quality assurance?
As in Figure1.We proposed a model which is giving complete idea of re-engineering toward quality assurance. It can be said as old software systems re-engineered we get new product with advance features. If we follow development standards, we obtained a new product with more and advance features.
Programming configuration designs were elevated to make the plan of projects more "adaptable, measured, reusable, and reasonable". We at that point set out to examine the effect of configuration designs on various quality properties and distributed a paper entitled "Do Design Patterns Impact Software Quality Positively?" In this review paper for the honor, we report and consider our and others' investigations on the effect of configuration designs, talking about some key discoveries detailed about plan designs [36].
I actualized and ran my first clone recognition on modern programming approximately 10 years prior. From that point forward, our examination models have developed into a business apparatus utilized by proficient programming designers around the globe consistently. Every one of us only work on, or utilize as a major aspect of our review administrations, programming quality examinations based upon this present group's exploration [37].
2.4.1 Methodology for SQ improvement
The software procedure display is utilized to guarantee software quality, speak to an assortment of assignment settings, oversee venture length, enhance the procedure and range to execute the procedure understanding, and to suitable verifiable guess for all undertaking settings. Given this perspective, this paper shows another software improvement life cycle display, "AZ-Model", for software advancement by presenting new exercises amid software advancement life cycle [38].
2.4.2 Design patterns and Quality Assurances
The nature of software frameworks relies upon a few elements and one of them is the means by which the software planners utilize the outline designs in the outline of software [39].
Code quality issues can cause serious problem. Before going to in depth programming there is need to get perfect skills for code quality. Students should follow the techniques, there should be a flow in code, and issues can be accruing for code quality. Modularization and decomposition can be caused. If students investigate these faults, timely then can use tools to solve the problem [40].
Figure 5 .Process of quality assurance [50]
2.5 Tabular representation of Old related word with field of reengineering to quality assurance
Authors Issues Found Methodology
Applied Major Output/Finding Ref#
CharilaosPetrou.(2016) Signal processing with big data principal component analysis(PCA) Big data can be processes by different signal processing techniques.
[41]
Jason Cong,PengWei,CodyHao Yu.(2107)
High level synthesis fail to put arrays design on-chip
Automated on-chip buffer restructuring can resolve the issue Our automated source-to-source code transformation tool improves the performance of a broad class of high level synthesis [17]
Fernando Szimanski,Anivaldo S. Vale.(2018) IT have to fulfill customer requirements Business models and analyzing tools IT provides services quality, customer satisfaction and engagement, as well as transparency on IT projects.
[18]
KashyapTodi,Jussi Jokinen.(2017) Computational problems exists in software due to layout and designs Human System Visualization Well organized software systems with user friendly interfaces are developed [19]
Amit Rathee.
(2017) Due to increase in features and advance capabilities ,we restructure software Cohesion techniques are used to rebuilt the classes of OOP based system Well designed,organized,restructured,new systems are obtained after restructuring [20]
Nathan ManeraMagalhães.
(2017) Unnecessary structural complexity may occur, in which a program has a cycloramic complexity Identify complexity, restructuring code and finding flow graphs The approach is able to support unnecessary cycloramic complexity remove [21]
JyothiVedurada.
(2017) Large volume of code causes complexities Replace code with sub classes
Restructured well designed and user friendly system is developed [42]
HiekeKeuning
(2017) Code quality is a big issue in these days Functions clearity,expressions finding demoularization Clear and refactored with clear quality programs are obtained [40]
Ana Rodriguez.
(2017) Mobile rely on batteries and APPS use much battery Code refactoring reduce power consumption
Via code restructuring new coded apps reduced the power usage [43]
Didier Rémy.(2017) Inductive data types and parametric polymorphism are two common problems Inductive data-types and parametric polymorphism
By adding or dropping some parts of codes then it is possible to make automated pointing system that can be helpful in [44]
3. Background
This section provides a discussion on software re-engineering process with quality characteristics.
3.1 Software re-engineering
A variety of software reengineering process to quality characteristics has been reported in literature such as: Forward engineering, reverse engineering, refactoring (code, data, and design) according to Bhatnagar [48] Re-engineering is the only way to utilize the software fully and solve the problem of software backlogs . Software re-engineering may be the only viable way to ensure that legacy systems can continue in service [36] by Foutse Khomh. It may be too expensive and too risky to adopt any other approach to system evolution. To understand the reasons for this, we must make a rough assessment of the legacy system problem [35]. R. Dewar in 1999 tells [51] reengineering of legacy systems is a method that has great importance and still significantly resisting the process of modification and evaluation for the purpose of business goals which are constantly changing. J.Clarke in 2003 [52] Metaheuristic techniques such as genetic algorithms simulated annealing and tabu search have found wide application in most areas of engineering. H. Jaakkola 2010 [53] software design and development coexist and co-evolve with quality provision, assessment and enforcement. However, most and also modern research provides only bread-and-butter lists of useful properties without giving a systematic structure for evaluating them. Rajesh H. Kulkarni [54] recently, the modeling of whole process of software (SW) development is performed using extended waterfall and agile models. For the development of any software we mostly use software development life cycle, literature guides us lot for this process: Rosa E. Quelal [55].Agile methodologies have been increasingly used in software development projects worldwide. However, there is little information about the adoption of these methodologies in Latin America. Michael Kirchhoff 2018 [56] Faster development of new algorithms is crucial in modern projects. Highly abstracted, data flow and modular oriented model-driven development methods and tools are used for this purpose. Asim Iftikhar 2018 [57] Global software development is an example of the modern age. Team members split geographically, working in different time zones, communicate simultaneously and exchange information regardless of physical boundaries and time difference. Different organizations are distributing their software development processes on national and continental lines. In Forward engineering we start working from getting data and from passing processes requirements elicitation to designing and till the end implementation we obtain a quality product.
3.1.1 Code refactoring
Software refactoring meaning that we transform software code or design in such a way that it improves the working quality of software while behavior remain preserved [58]. Opdyke proposed several techniques of refactoring ath design and implementation stages of software development [59].We can elaborate refactoring process with several steps related with source code and a model developed. These process steps was proposed by Wake [60] at starting history, the advancement was done byMens and Tourwe [61].In general point of view we follow these steps for code refactoring
1-Find software refactoring parts
2-Slect appropriate approach for refactoring
3- Check preservation of behavior
4-Apply the approach selected for refactoring
5-Analyzing the refactoring impact on quality of software
6-Ensure the presence of consistency in code and UML Models
3.1.2 Code refactoring Methodology
Table2.surveyed detection techniques for code refactoring
Table3.Code refactoring tools report
Table4 Quality assurance and quality control [81]
Conclusion
Software re-engineering purpose is to add more features in existing software system and increase its quality parameters. In our existing software environment as day by day technology going to improve then it become difficult to develop software again and again. So ,re-engineering provide a mechanism by which we can improve existing systems with disturbing the behaviors of system quality can be improved. Software re-engineering follow some steps with the help of reverse and forward engineering and according to users requirements new features are added to existing product. The parameters that can improve the quality of software can be coding improvements designing improvements and all of these requirements can be done by restructuring of data. Software re-engineering process undergo with some steps with relation to forward engineering and reverse engineering. We refractor the parameters during reverse engineering process. New product obtained with advance quality parameters. There are different levels of quality assurance which are need of system. After the implementation of re-engineering process we assure these parameters which included as two different terms quality assurance (QA) and quality control (QC). The advancements can be tested if these parameters assuredly present in our developed product. It may include reliability, efficiency, consistency, integrity, robustness, maintenance cost, complexity, programming structure, reuseability and testability