the future of software engineering

3
The Future of Software Engineering: A Survey Zeeshan Anwar Center for Advanced Studies in Engineering (CASE) 19- Attaturk Avenue, G-5/1 Islamabad, Pakistan +923335723230 [email protected] Nazia Bibi Center for Advanced Studies in Engineering (CASE) 19- Attaturk Avenue, G-5/1 Islamabad, Pakistan +923315116392 [email protected] Ali Ahsan Center for Advanced Studies in Engineering (CASE) 19- Attaturk Avenue, G-5/1 Islamabad, Pakistan +923005129344 [email protected] ABSTRACT Software Engineering (SE) is a new field compared to other sciences. The term Software Engineering first appeared in late 1950s. SE from its beginning has been continuously in the process of evolution. New approaches, methods, tools and techniques are introduced frequently. The future of Software Engineering is a hot topic and every year many publications discuss the same. The focus of this paper is to explore sub- areas of SE, predict the possible future of SE and provide a guide to practitioners to choose their careers according to the evolution of SE. Categories and Subject Descriptors A.1 [Introduction and Survey], D.2 [Software Engineering], D.2.7 [Restructuring, Reverse Engineering and reengineering], H.5.3 [Group and Organization Interfaces], I.2 [Artificial Intelligence], J.4 [Social and Behavioral Sciences] General Terms Management, Performance, Design, Human Factors and Theory. Keywords Software Engineering, Reverse Engineering, Artificial Intelligence, Scalable Spiral Process Model, Web Development, Cloud Computing 1. INTRODUCTION Software Engineering is continuously evolving and the evolution is at a fast pace. SE practitioners have to update their skills to survive in a changing environment. New methods, processes, tools and techniques are introduced frequently and it becomes confusing for practitioners to choose the right direction to grow their careers. “In May 2010, Google Scholar reported that for 2009, 70 publications had “software evolution” in the title, and more than 900 had “software evolution” somewhere in the text. Google Scholar data also shows that the number of evolution- related publications has increased almost one order of magnitude between the yearly publication rates in the 1990s and those of the last decade.” [1] In this research an effort is made to keep practitioners up- to-date about evolution and upcoming demands in areas of SE. This work will help practitioners to update their knowledge and choose the right directions to grow their careers. 2. LITERATURE REVIEW 2.1 Component-Based Development Vladimir Getov identified that the use of suitable programming models for compatibility and interoperability are key issues towards building effective future applications. Three approaches for component-based development (reuse legacy code, componentizing the code and component-oriented development) were proposed. He further integrates these approaches into the Integrated Component-Based Environment (ICBE) framework. The framework improves productivity of the new development methodology for next generation component-based applications. [2] 2.2 Parallel Software Design Current multicore processors integrate multiple independent processor cores on the same chip, instead of increasing single-thread performance. To avail the advantages of multicore in terms of performance, multithreaded software / concurrent or parallel software must be developed to reap the computational power of all cores. [3] 2.3 Reverse Engineering (RE) “RE helps by generating diagrammatic views of old systems to help programmers understand and modify them or generate new programs from old ones.” [4] Another use of reverse engineering is re-engineering models from legacy software and re-implementing them in a better way. “This may involve language migration and Software engineers may use language migration techniques to transform sequential programs into parallel programs, thereby exploiting the power of model transformation and code generation mechanisms to introduce parallelism” [5]. 2.4 SE and Artificial Intelligence (AI) SE and AI methods and techniques support practice and research in both fields. “Systematic software development (including Requirements Engineering, Engineering of Designs, or source code) and project management methods help to build intelligent systems while using advance data analysis techniques.” [6] 2.5 Web Development Web Applications are becoming more and more popular. Web Applications not only provide hypertext but also programming interfaces for applications. In the future, for an average user, the browser is going to be the only application he is going to use due to the popularity of the Internet and the ease of use of web applications. According to Alberto Gutierrez every programmer should have a basic understanding of CSS, JavaScript, AJAX, Frameworks such as JQuery, Dojo, HTML and HTTP. [8] 2.6 Mobile Development Mobile is becoming more and more popular. These days, mobile devices are providing full computing facilities such as the iPhone, Android phones and Windows phones. [8] 2.7 Get Agile “One of the biggest changes in software development is the process. We are moving from waterfall (predictive) to agile (adaptive). Companies using a predictive approach find it difficult to keep up-to-date with the changing requirements of customers. Therefore an agile mindset is important for giving value to customers in the future.” [8] 2.8 App Store The App Store is a place where one can find already developed applications according to one’s requirements. With the success of the Apple App Store, many other companies have developed their own App Stores, like Google App Store, Java Store, Mendix App Store and Microsoft App Store. [8] 2.9 Cloud Computing “Cloud computing is the delivery of computing as a service rather than a product. In Cloud shared resources, software, and information are provided to users and computers as a utility over a network. Shared resources and information are cached temporarily on clients. Cloud Computing is device independent and provides software as a service; it ACM SIGSOFT Software Engineering Notes Page 1 March 2014 Volume 39 Number 2 DOI: 10.1145/2579281.2579291 http://doi.acm.org/10.1145/2579281.2579291

Upload: ali

Post on 23-Dec-2016

218 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: The future of software engineering

The Future of Software Engineering: A Survey Zeeshan Anwar

Center for Advanced Studies in Engineering (CASE)

19- Attaturk Avenue, G-5/1 Islamabad, Pakistan

+923335723230

[email protected]

Nazia Bibi Center for Advanced Studies in

Engineering (CASE) 19- Attaturk Avenue, G-5/1

Islamabad, Pakistan +923315116392

[email protected]

Ali Ahsan Center for Advanced Studies in

Engineering (CASE) 19- Attaturk Avenue, G-5/1

Islamabad, Pakistan +923005129344

[email protected]

ABSTRACT Software Engineering (SE) is a new field compared to other sciences. The term Software Engineering first appeared in late 1950s. SE from its beginning has been continuously in the process of evolution. New approaches, methods, tools and techniques are introduced frequently. The future of Software Engineering is a hot topic and every year many publications discuss the same. The focus of this paper is to explore sub-areas of SE, predict the possible future of SE and provide a guide to practitioners to choose their careers according to the evolution of SE.

Categories and Subject Descriptors A.1 [Introduction and Survey], D.2 [Software Engineering],

D.2.7 [Restructuring, Reverse Engineering and reengineering],

H.5.3 [Group and Organization Interfaces], I.2 [Artificial Intelligence], J.4 [Social and Behavioral Sciences]

General Terms Management, Performance, Design, Human Factors and Theory.

Keywords Software Engineering, Reverse Engineering, Artificial Intelligence, Scalable Spiral Process Model, Web Development, Cloud Computing

1. INTRODUCTION Software Engineering is continuously evolving and the evolution is at a fast pace. SE practitioners have to update their skills to survive in a changing environment. New methods, processes, tools and techniques are introduced frequently and it becomes confusing for practitioners to choose the right direction to grow their careers. “In May 2010, Google Scholar reported that for 2009, 70 publications had “software evolution” in the title, and more than 900 had “software evolution” somewhere in the text. Google Scholar data also shows that the number of evolution-related publications has increased almost one order of magnitude between the yearly publication rates in the 1990s and those of the last decade.” [1] In this research an effort is made to keep practitioners up-to-date about evolution and upcoming demands in areas of SE. This work will help practitioners to update their knowledge and choose the right directions to grow their careers.

2. LITERATURE REVIEW 2.1 Component-Based Development Vladimir Getov identified that the use of suitable programming models for compatibility and interoperability are key issues towards building effective future applications. Three approaches for component-based development (reuse legacy code, componentizing the code and component-oriented development) were proposed. He further integrates these approaches into the Integrated Component-Based Environment (ICBE) framework. The framework improves productivity of the new development methodology for next generation component-based applications. [2]

2.2 Parallel Software Design Current multicore processors integrate multiple independent processor cores on the same chip, instead of increasing single-thread performance. To avail the advantages of multicore in terms of performance,

multithreaded software / concurrent or parallel software must be developed to reap the computational power of all cores. [3]

2.3 Reverse Engineering (RE) “RE helps by generating diagrammatic views of old systems to help programmers understand and modify them or generate new programs from old ones.” [4] Another use of reverse engineering is re-engineering models from legacy software and re-implementing them in a better way. “This may involve language migration and Software engineers may use language migration techniques to transform sequential programs into parallel programs, thereby exploiting the power of model transformation and code generation mechanisms to introduce parallelism” [5].

2.4 SE and Artificial Intelligence (AI) SE and AI methods and techniques support practice and research in both fields. “Systematic software development (including Requirements Engineering, Engineering of Designs, or source code) and project management methods help to build intelligent systems while using advance data analysis techniques.” [6]

2.5 Web Development Web Applications are becoming more and more popular. Web Applications not only provide hypertext but also programming interfaces for applications. In the future, for an average user, the browser is going to be the only application he is going to use due to the popularity of the Internet and the ease of use of web applications. According to Alberto Gutierrez every programmer should have a basic understanding of CSS, JavaScript, AJAX, Frameworks such as JQuery, Dojo, HTML and HTTP. [8]

2.6 Mobile Development Mobile is becoming more and more popular. These days, mobile devices are providing full computing facilities such as the iPhone, Android phones and Windows phones. [8]

2.7 Get Agile “One of the biggest changes in software development is the process. We are moving from waterfall (predictive) to agile (adaptive). Companies using a predictive approach find it difficult to keep up-to-date with the changing requirements of customers. Therefore an agile mindset is important for giving value to customers in the future.” [8]

2.8 App Store The App Store is a place where one can find already developed applications according to one’s requirements. With the success of the Apple App Store, many other companies have developed their own App Stores, like Google App Store, Java Store, Mendix App Store and Microsoft App Store. [8]

2.9 Cloud Computing “Cloud computing is the delivery of computing as a service rather than a product. In Cloud shared resources, software, and information are provided to users and computers as a utility over a network. Shared resources and information are cached temporarily on clients. Cloud Computing is device independent and provides software as a service; it

ACM SIGSOFT Software Engineering Notes Page 1 March 2014 Volume 39 Number 2

DOI: 10.1145/2579281.2579291 http://doi.acm.org/10.1145/2579281.2579291

Page 2: The future of software engineering

enables users to access the cloud regardless of their locations and devices. Cloud Computing reduces the cost but demands reliability, scalability, security and sustainability (Green IT).” [9]

2.10 Service-Oriented Development (SOD) “Models created with SOD can be understood by individuals with diverse levels of business and technical understanding. SOD views software entities as ‘assets’ and refers to these assets collectively as ‘services.’ The service-oriented modeling paradigm advocates taking a holistic view of the analysis, design, and architecture of all 'Software Entities' in an organization.” [9]

2.11 Software Intensive System (SIS) Software is embedded into almost every system. Overlap between software and system engineering increases the integration of software engineering and system engineering activities, which include “Increasing emphasis on users and end-value, Increasing SIS criticality and dependability, Increasing need to manage rapid change, Increasing project/product globalization and need for interoperability, Increasing size and complexity, Increasing software “autonomy” (apps that independently evaluate their environment and choose a course of action that is appropriate).” [9]

2.12 Open Source “Open source software and related work products (models, source code, and test suits) are open to the public and can be modified and extended by anyone with permission. The promise of open source is better quality, higher reliability, more flexibility, lower cost, and an end to predatory vendor lock-in.” [10]

2.13 Collaborative Development With the popularity of the internet, increasing market demands, to search for low cost development teams and online jobs, software developers collaborate across time zones and international boundaries. Collaborative Development is becoming more and more popular with the passage of time and the need to develop methods and tools that facilitate collaboration arises. The critical success factors for collaborative development are shared project goals, shared project cultures, shared processes and shared responsibilities. [9]

2.14 Test-Driven Development (TDD) TDD emphasizes the creation of a series of test cases before coding begins. These test cases are created from the requirements of a software component. After coding, test cases are verified and required improvements in the code are made. [9]

2.15 Aspect-Oriented Development (AOD) “Concerns are customer required properties or areas of technical interest. These concerns cut across multiple system functions, features and information and are termed as Cross cutting concerns. AOD provides a process and methodological approach for defining, specifying, designing, and constructing aspects - mechanisms beyond subroutines and inheritance for localizing the expression of crosscutting concerns.” [9]

2.16 Automated Programming (AM) Automated Programming is generating source code automatically from models. AM provides a major improvement in productivity for the development and evolution of software-intensive systems. R&D in the field of Automated programming is especially targeted towards a radical improvement in software evolution. [11]

2.17 The Future of Formal Method Research Formal methods convert requirements and designs into logical and mathematical forms to express properties of software systems. Recent research in formal methods integrates automated formal methods in tools for reasons like performance analysis and test case generation. These tools display warnings, hints and generate test cases to unburden programmers. [11]

2.18 Predictive Models for Software Development “Predictive Models forecast the performance of processes. Concepts from software engineering, finance, evolutionary biology and morphogenesis would integrate to develop predictive models. This research will introduce new normative models to inform decision-making at multiple levels of granularity and improve our ability to manage tradeoffs between short-term costs and benefits.” [11]

2.19 Software Performance Engineering (SPE) “SPE can be affected by every aspect of software development such as code, design and execution environment. Issues with software performance may create problems such as delaying projects, failure to deploy the application, and cost overruns. SPE is necessary to improve, and evaluate a system’s performance. SPE represents a collection of software engineering activities, and its related disciplines that can be used throughout the software development lifecycle, where it can be directed toward achieving performance requirements.” [11]

2.20 Tools Trends—SEE Modern trends for SE tools include requirements engineering tools, design modeling tools, tools for test case generation, test suite optimization tools [12-13] and tools for collaborative development. [9]

2.21 The Future of Social Sciences SE Research Software is a creation of human brains and Software Engineering is largely a human activity. Technology plays a vital role in software engineering, but success of software depends on the humans who develop it. Human changes are evolutionary; studying humans can have a positive impact on software projects. Human studies related disciplines like psychology, sociology, communication and economics can open new paths into research and the future of Software Engineering. [11]

2.22 Career Focus: Software Engineering “According to the Bureau of Labor Statistics (BLS), the number of employed software engineers in U.S. has grown more than 25% in the past decade, from 745,000 in 2001 to 1,206,000 in 2010. According to BLS data earning potential for software engineers is also strong, averaging more than $90,000 in annual wages in 2009. Only chemical engineers averaged higher annual wages in 2009 at just over $96,000”.

3. RESEARCH FINDINGS It is observed from the literature review that there are overlaps between different areas of Software Engineering and these areas will be important in the future. For example Component-Based Development will be used for legacy software redevelopment, software reengineering and parallel software development. If someone masters component-based development he can grow his career in other fields, too.

Figure 1. Overlapping of Component-Based Development

Web based development is a very important area; it is used for developing web sites, web applications and is a basis for Cloud computing. Anyone who wants to enhance his career in Cloud computing must know web based development. Cloud computing is linked tightly with service-oriented development. When different cloud data centers will be established there will be a need for Green IT to overcome the pollutions produced by data centers.

ACM SIGSOFT Software Engineering Notes Page 2 March 2014 Volume 39 Number 2

DOI: 10.1145/2579281.2579291 http://doi.acm.org/10.1145/2579281.2579291

Page 3: The future of software engineering

There was a drift from predictive to adaptive approaches in the software lifecycle process. The need for the predictive approach is arising again and the research is underway to make predictions within the adaptive approach.

Figure 2. Predictive / Adaptive Cycle

Some fields like Software Project Management and Software Quality Management will remain stable because these are quite mature fields. The basic concepts of these fields will not change a lot, however new tools for quality and project management may be introduced in the future.

4. CONCLUSION Component-based development will not be limited to Commercial off the Shelf (COTS) based development. It can be used to extend components of legacy software using wrapper software. Dynamic verification and validation is an important aspect of development and will require further attention and research work in component-based development [2]. One method of parallelization is automatic parallelization, which will require further improvements; automatic re-penalization of software is not considered yet. [3]

Paolo Tonella, Marco Torchiano et al. studied the current research in reverse engineering and found that 70.9% of research involves empirical evolution and 93.4% researchers are focused on the performance of automated tools. The authors proposed that there is a need to study the role played by humans, because tools only assist humans in reverse engineering. [4]

Overlapping areas of Software Engineering and Artificial Intelligence (AI) have great potential in the future. AI will be used to predict the behavior of software and development time, to develop intelligent software, knowledge base systems, knowledge discovery techniques, ambient intelligent systems and agent-oriented SE. [6]

Web development and mobile development will not lose their importance in the future and there is huge capacity for these fields in developing countries. Gadgets and video parsing will require huge attention in web development whereas HTML5 and User Experience (UX) for mobile interface is important for mobile development.

Customers are becoming more literate and will be actively involved in lifecycle phases. Agile principles will help organizations to cater to quick and unexpected changes. App Stores will become more important with the passage of time. Cloud computing is becoming popular but various organizations have security concerns about the cloud and mature security practices will be a hot topic of the future. The need for Green IT arises with the popularity of Cloud computing and the increasing number of data centers. Services Oriented Development / Architecture will be the future of software. The Software Engineering

Institute (SEI) is paying attention to this field to prepare Software engineers.

Overlap of software engineering with system engineering will increase and software will be used to increase the efficiency of systems and enhance their capabilities. Open source software will be used for learning purposes. Collaborative development with better and more efficient tools will be required in the future. Test driven development will stay, because with increasing competition companies will not afford to deliver software with bugs. Aspect oriented development will lose its importance and other techniques like service oriented architecture will replace it. Automated programming with formal verification tools will mature and help to unburden programmers.

There are many efforts in place to predict adaptive development life cycles. This field will also mature with time and it will be possible to make predictions in adaptive cycles, too. Software performance will be a great concern in future software, especially in Cloud computing. There will be massive research in social aspects of software engineering because success of software depends on the humans who develop it. In the future Software engineering jobs will increase as software will be a product and vehicle for driving hardware too.

5. REFERENCES [1] Tom Mens, Yann-Gael Gueheneus and Juan Fernandez-Ramil,

Software Evaluation, Published by the IEEE Computer Society, July/August 2010 IEEE Software

[2] Vladimir Getov, Software Development Productivity: Challenges and Future Trends, IEEE 34th Annual Computer Software and Applications Conference, 2010.

[3] Hans Vandierendonck, Ghent University,Tom Mens, University of Mons,2011, “Averting the Next Software Crisi”, Published by the IEEE Computer Society, 2011, pp 88-90.

[4] Paolo Tonella Marco Torchiano, Bart Du Bois Tarja Systa, Empirical studies in reverse engineering: state of the art and future trends, Springer Science + Business Media, LLC, 2007.

[5] Hans Vandierendonck, Ghent University,Tom Mens, Averting the Next Software Cris”, Published by the IEEE Computer Society, 2011, pp 88-90.

[6] Jörg Rech and Klaus-Dieter Althoff, Artificial Intelligence and Software Engineering: Status and Future Trends, Special Issue On Artificial Intelligence And Software Engineering, KI, 2004, Vol. 3, pp 5-11.

[7] Barry Boehm, Some Future Trends and Implications for Systems and Software Engineering Processes, Systems Engineering, Vol. 9, No. 1, 2006 © 2006 Wiley Periodicals, Inc.

[8] Alberto Gutierrez, February 15th, 2010 http://www.makinggoodsoftware.com/2010/02/15/the-future-of-software development-are-you-ready/

[9] Pressman R.S., Software Engineering: A Practitioner’s Approach, McGraw-Hill, 2009

[10] OpenSource.org, 2008, available at www.opensource.org/. Software Engineering Trends

[11] Future of Software Engineering Research, Electronic versions of NITRD documents are available on the NCO Web site: http://www.nitrd.gov. 2011

[12] Zeeshan Anwar and Ali Ahsan, Multi-Objective Regression Test Suite Optimization with Fuzzy Logic, INMIC-2013.

[13] Cagatay Catal, A Survey of Test Case Prioritization Techniques, International Journal of Software Engineering 6: 2, 2013, pp 45-74.

ACM SIGSOFT Software Engineering Notes Page 3 March 2014 Volume 39 Number 2

DOI: 10.1145/2579281.2579291 http://doi.acm.org/10.1145/2579281.2579291