The Future of Software Engineering in the 21st Century

Abstract

It is important to look at the past achievements of the software engineering, to be able to establish the roadmap that can lead to creating the steps that make certain progress for the future of software engineering. It is also imperative to address the important issues that facing the software development, that might impact the software engineering in general; and also impact such roadmap.

Introduction

One of the most important factors that can affect the software quality is the performance. Performance can be affected by middleware, hardware, communication network, and operating system, and as such; software engineering encompasses efforts to improve, and describes performance with two important approaches: a Late-cycle measurement-based approach, and an early-cycle predictive model approach. Software performance represents a problem to many organizations, and it’s often below the expectations. The future is very promising in creating the tools for measuring and modeling; that will help improving software engineering processes (Woodside and Franks, 2007).

The theoretical education of software engineering fundamentals is not sufficient to provide the skills and the knowledge required for the future of the software engineering; that can meet the expectations of the future employers. It’s found that the teaching of software engineering is lacking the environment, the time, and the resources that prepare the software engineers to the future expectations (Varol and Bayrak, 2005).    

The future of programming environments foster the integration of reusable, extensible, and automated tools that can help software engineers to promote the right quality of software (Zeller, 2007).

This paper will discuss the future of software engineering through the improvement of software performance, improving the tools used in the software development, and also the future of the software environment that fostering the integrated tools that can promote software scalability, and reusability.

Software Performance Engineering

The software performance engineering represents the core of the software design, and it can be affected by every aspect of the software development elements, such as the code, the design, and the execution environment. Any issues with software performance can create different problems for many projects, such as delaying such projects, failure to deploy the application, and cost overruns. That said; a highly disciplined approach known as Software Performance Engineering (SPE) is necessary to improve system’s performance, and also evaluate such performance. Such discipline represents a collection of software engineering activities, and its related analysis used that can be used throughout the software development lifecycle, where it can be directed toward achieving the performance requirements (Woodside and Franks, 2007).

 Woodside and Franks (2007) explained that there are two important approaches under the umbrella of the SPE:

  • Measurement-based (Late-Cycle measurement) – Where the diagnosis, testing and tuning are done late in the development lifecycle once the system can run, and can be measured.
  • Model-based approach (Early-Cycle measurement) – Where the performance models are early created in the development lifecycle, and uses the quantitative results of such models to adjust the design, and the architecture to meet the performance requirements.

The SPE process should be part of the software engineering activities, and it should have the same constrained as other project elements such as project schedules, and defined requirements. The resources of such process is the systems resources interact with the system behaviours, such as hardware (I/O, CPU, Buses, and storage), logical resource (locks, buffers, and semaphores), and processing (threads, processes). The defining factor for software performance is the resources that can offer a limited capacity, where they can potentially halt/delay the execution of computing. Quantifying the effects of such resources on the software performance is an important task of SPE (Woodside and Franks, 2007).

Woodside and Franks (2007) argued that Software Performance Engineering (SPE) represents a domain that has the following elements:

  • System Operations – Where performance requirements, workloads, and behaviours are defined.
  • Behaviour – Where behaviours scenarios specifications are defined.
  • Workloads – Where the frequency of different system operations are defined.
  • System Structure – Where the software components that might effect the performance is defined.
  • Resources – Where the information about software, and hardware are defined.

Woodside and Franks (2007) described the activities involved in the SPE process, and it includes the following activities:

  • Identify Concerns – Where the important resources, and the system operations that might affect the system performance are identified.
  • Define and analyze requirements – Where workload intensities, operational profiles, throughput requirements, and delay are identified and their behaviours are described.
  • Predicted Performance – Where scenarios, architecture, details design, and system behaviours can predict the performance of the system.
  • Performance testing – Where the performance is tested with parts of the system, or all parts of the system under stress, and normal loads.
  • Maintenance and evaluation – Where the addition, and the potential changes can be predicted with their effects in the system.
  • Total system analysis – Where the complete, and final deployed system are planned.

The performance engineering is gaining its attention from the results of the applications’ performance that usually below the expectations of what companies usually expect of their applications. In the past such problem usually discovered at the late stage of the software development, where the performance validation represented the last activities before the software release.  Even with the Agile processes the problem still persistent, and might be worse than the traditional development lifecycle (Waterfall). The future of performance engineering is in the right direction in implementing better tools for measuring and modeling such process. Using the right tools that can improve the performance engineering, such as tools that can do tracing where it captures CPU demands, and also the tools that can trace CPU operations to the various I/O devices, will be a great improvement for the SPE process (Woodside and Franks, 2007).

Successful software requires performance diagnosis that can use models for insight into the source of the performance problems. The operational profiles; and workload modeling are the key part of both predictive; and testing modeling. The future should bring the dynamic optimization tools into play, where it can perform measurements that can be fed back to compilers for off-line placing code, tuning and cache analysis. Finally, creating the performance models can be used to describe how the system operations use resources, and how the resources contention affects operations. However, the future can bring better models that can add better usage of the SPE process (Woodside and Franks, 2007).

Applied Software Engineering Education

The theoretical teaching of software engineering fundamentals do not provide the knowledge, and the skills expected for the future employers; and it is not sufficient for the predicted future of the improvement of the software technologies. As the technologies improved a lot during the last decades, software architectures and software analysis become essential part of the software development lifecycle. Today, we can witness a lot of improvement in the educational system where the Computer Science departments starting to offer a real-life client sponsored programs; that allow the undergraduate students to get a better understanding of the technologies, and how such technologies can be applied in the real life environment. The real goal of such programs is to motivate students to succeed in their projects, and also understand the importance of the analysis and design documents as part of the development lifecycle, software engineering process, and the software requirements specifications (Varol and Bayrak, 2005).

The Future of Programming Environments

The improvement in the software development definitely will bring a better future to the software engineering and programming environment. The future of integration for the software engineering environment is the future of tools, because the more reusable, useful, and extensible the tools will be, the more likely such improvement will increase the productivity of the development project, and enhance the software engineering process. Some of the improvements that can be done through these tools are; the general techniques of how these tools can work within the development environment. Such tools can support extensibility and reusability through different features such as, supporting automation, separating functions from presentation, automate testing, and automate reconstruction.  Finally, the improvement in such tools, will increase the chances of improving the software engineering process in the future, and also increase productivity, and software quality (Zeller, 2007).  

Conclusion

Software Performance Engineering (SPE) needs further development to keep up with the changes in the software technology, and the market requirements. Such process needs testing, and measurements technology, and also improvement in prediction. By implementing the right performance models, it will add a better views, better ways of measuring data, and exploring increments in the system design. Further automation of the data collection; and better method for measuring will improve the predictions of performance issues through the SPE process. The future is promising, that SPE expands its process from the development phase into the system deployment and management phases (Woodside and Franks, 2007).

Creating the right educational programs that allow the students of the software engineering to practice their knowledge through program sponsored by different employers, is such a great idea that can improve the future of the software engineering. Such programs allow students to understand the real demands of the outside world, and how the concepts of the software engineering are used in real life.

Finally, improving the development environment will have a huge impact on improving the software engineering process. The integration of the software development tools within the development environment, will increase the enhancement of the software development process, and also provide the support for the programmers, designers, and software engineers during the software development process. With better adaptive, rationales, and optimizing, the software development cycle will be shorter, the productivity, and the quality of the software will be greater, and the resource allocation will be better (Zeller, 2007).      

References

Woodside, M. & Franks, G.(2007) ‘The Future of Software Performance Engineering’, 2007 FOSE, IEE Proceedings, pp. 171, IEEE Journal [Online]. Available from: http://ieeexplore.ieee.org.ezproxy.liv.ac.uk/stamp/stamp.jsp?tp=&arnumber=4221619 (Accessed: 09 May 2011).

Varol, C. & Bayrak, C. (2005) ‘Applied Software Engineering Education’, ITHET 2005, IEE Proceedings, pp. T3C/25, IEEE Journal [Online]. Available from: http://ieeexplore.ieee.org.ezproxy.liv.ac.uk/stamp/stamp.jsp?tp=&arnumber=1560250&tag=1 (Accessed: 09 May 2011).

Zeller, A. (2007) ‘The Future of Programming Environment’, FOSE 2007, IEE Proceedings, pp. 316, IEEE Journal [Online]. Available from: http://ieeexplore.ieee.org.ezproxy.liv.ac.uk/stamp/stamp.jsp?tp=&arnumber=4221629&tag=1 (Accessed: 09 May 2011).

Advertisements

1 Comment »

  1. Many thanks for your informative posts. Taking into consideration that you are writing about software development, I would like to add some words.. It would be useful to learn something new in this direction, check our solutions and experience bearing in mind that we provide premium custom software development services, useful tips and information for developers.


RSS Feed for this entry

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: