Software has become the heart of every complex system. The result: exploding demand for faster, more accurate and economical programming technologies. The goal: adaptable software architectures made of optimally matched, reusable components.
Siemens programmer Kai Tödter assembles the software that drives a new avatar. Java-based modular techniques and a program that simulates the functions of a real phone accelerate the development process
It was a long road from the abacus of ancient times to the first programmable calculating machines, which were built in the 1930s and 40s in Germany, the U.S. and Great Britain. As a discipline in its own right, computer science has only been around for a few decades. Initially an academic tool, software has rapidly evolved to become an important part of the economy. As a result, demand for improved software development productivity is steadily increasing.
All of this may have a downside, however. According to Dr. Lothar Borrmann, head of the Software Architecture department at Siemens Corporate Technology (CT) in Munich, "Our methods and tools are getting better and better, but the demands on software architects and project management are growing by leaps and bounds as well. Its no longer possible for any one person to program todays complex software systems."
New methods have taken the place of the machine-level programming of earlier years, which has been pushed to the back burner. Today, it is not even possible to create the desktop of a modern personal computer with simple programming techniques. And theres enough "intelligence" in any laptop on the market to make the mainframe computers of the founding years look like bumbling museum pieces.
Program code is found in every circuitin everything from cars to mobile phones to power plants. At Siemens alone, software engineers produce several billion lines of code each year. Initially, the lines of a program were laboriously written out by hand. Today, prefabricated software components and "design patterns" (templates) provide the basic structural framework. "There are already programming environments that generate powerful operations with just a few instructions," says Siegfried Zopf of Program and Systems Engineering (PSE) in Vienna, Austria. A Siemens-owned software and electronics company with branches in several countries and more than 5,000 employees, PSE works almost exclusively for the Siemens Groups.
A glance at the variegated world of development environments makes it clear that writing software entails a daunting number of choices. There are over 200 programming languages. Some professionals swear by Perl, Basic, Eiffel or Smalltalk, while others work with Delphi, C/C++, Java or Ada. Even the "veterans" among the programming languages, like Cobol and Assembler, are still in service, with no prospect of being retired any time soon. At Siemens, there is no prescribed programming language in use throughout the company. Usually, though, Siemens opts for solutions based on established techniques. "It makes no sense to program with unusual languages for two years and then be left at the end of the day with an isolated solution," explains Borrmann. As a rule, Siemens experts work with mainstream languages like C/C++ and Java or platforms like J2EE (Java 2 Enterprise Edition) or Microsofts .Net. "But every approach has its strengths and weaknesses; each is suitable for different purposes," says Zopf.
In the early days, programmers tended to work in assembler languages, which describe each instruction in detail. Soon afterward, procedural languages became popular. In these languages, a program is broken up into smaller subtasks called "procedures" that are later linked together into an overall system. This approach is geared to making source code reusable and to achieving a high degree of clarity in regard to overall program structure. "Researchers and developers have learned very quickly," says programming expert Douglas C. Schmidt of Vanderbilt University in Nashville, Tennessee. "The level of abstraction of programming routines has been increased from year to year, increasing the degree to which they can be automated."
Encapsulated and Reusable. Improvements in existing languages and techniques (see Software Trends and Tools) as well as fundamental changes in the way developers approach and think about software have gone a long way toward expanding what software architects can do. Object-oriented development caused a sensation 20 years ago; but today it is firmly established. Its most important hallmark: Rules, commands and functions are prefabricated and "encapsulated" in building blocks that have been pre-tested for quality. These blocks contain clearly defined interfaces that are used to link them with other components, and they have instructions governing their interaction with other program elements. "The trend is toward the development of reusable code," summarizes Borrmann colleague Christa Schwanninger. What this means is that, even when developing unusual applications, software engineers are increasingly using program libraries that contain large numbers of prefabricated templates and prototypes.
An alternative is to design objects using graphic modeling languageswhat experts call Model Driven Development (MDD). "In MDD, we describe the real world we want to automate using symbols and then model the corresponding procedures in a data-processing system," explains Zopf. The conversion into working program code is done in part automatically by the development tools.
The model-based approach reduces the amount of work required for individual pieces of software, particularly the amount of programming. Even complicated functions are portrayed by manageable symbols in a diagram. A structure is created, and is then increasingly adapted to the requirements of the particular application in subsequent phases of the development process. The underlying model is composed of encapsulated, reusable system components that can be linked like Lego blocks to form various applications (system families).
Experts anticipate that model driven development has a bright future. Already, "generative" and "aspect-oriented" development tools are emerging, and these new approaches promise even better, more reliable and more secure software. "We expect these agile software processes to produce more customer satisfaction at lower costs," says Schwanninger. The new architectures make possible a high degree of modification and extension, and they dont adhere to a rigid development model as before. As a result of better project management with shorter release cycles and planning thats based on defined objectives, working program parts are available to the user at a very early stage in the process. That means users are able to pass on requests to the appropriate teams, even as the development process moves forward, and immediately receive modified versions.
Software Machines. Schmidt expects that model-based programming languages that automatically generate the appropriate machine code will soon be part of the standard repertoire of many development departments. A German-Spanish company known as CARE Technologies already offers a machine that writes software fully automatically and faster than any human programmer. The secret: prefabricated data flowcharts that define the processes involved. The user describes task with graphic symbols and links them to the diagrams. A software generator then provides working source code assembled from existing building blocks.
In spite of such advances, code at the push of a button and self-organizing software arent likely to be common for a while. Still missing is an adequate technical and scientific basis for versatile software components. CAREs software generator, for instance, can only manage rudimentary tasks. Large software systems with parts that have to meet high reliability and security standards will continue to be planned by teams of specialistsalthough at a highly abstract level. "It still takes the knowledge and cooperation of many experts to get a system up and running," says Borrmann.
Andreas Beuthner