Software Engineering

Summary

Software engineering is the science of software design, construction, and maintenance, including processes for managing the building of software. Software, the product of software engineering, is used in all facets of society. The most popular software is e-mail. In business, word processing and spreadsheet applications are omnipresent, and larger companies use enterprise resource planning software to reduce costs and optimize profits. Engineers and scientists have developed powerful software that runs on parallel processors for a variety of applications, from weather prediction to playing chess. Systems software, such as an operating system, provides the foundation on which all other software operates.

Definition and Basic Principles

Software engineering is the science of software development. The software development process is characterized by a number of distinct phases. First, detailed specifications for the proposed software are created with the help of those who will be using the software. Then, an analysis is done to determine the resources needed for the project and the steps involved in its development. After the analysis is completed, a formal design is created. The design usually includes descriptions of the data needed for the system and the processes that need to be performed on the data, and some charts to help understand the proposed system's structure. Those developing business-oriented systems usually refer to this process as systems analysis and design rather than software engineering. After the analysis and design phase are completed, the software system must be implemented. Sometimes programmers must write computer code, but increasingly, software is built from components that someone else has developed. The final step in program development is testing to be sure the program performs as desired. After the system is finished, it needs to be modified to reflect new requirements, and ultimately, it must be retired or updated.

89250579-78510.jpg

The amount and variety of software produced since the invention of the computer in the 1940s is truly phenomenal. World Wide Web browsers, email, and personal productivity software (such as Microsoft Office) are used by people at home and at work. Operating systems, middleware, and integrated development environments (such as Microsoft's Visual Studio) are used by professional programmers to produce new computer applications every day. Web development systems are used to produce web services that support applications on desktops and mobile devices.

Background and History

John von Neumann is credited with inventing the concept of a stored program for a computer. He recognized that it was possible to store a program in the memory of a computer along with the data. Von Neumann's programs were written in a binary code, called machine language, that was hard for people to understand. A real breakthrough in the development of computer programs was the introduction of compilers, which allowed programmers to write code in high-level languages.

In the 1970s, Niklaus Wirth released Pascal, the first structured programming language. Pascal was designed to produce more reliable programs and had a great influence on the development of other programming languages. In the early 1970s, Dennis Ritchie introduced the C language, which became the programming language for applications development for the next few years. In the twenty-first century, program development uses many modern languages. The two most popular languages are Java and C++.

As more and more programs were developed, many recognized the need to develop a methodology for the program development process. In 1966, Corrado Böhm and Giuseppe Jacopini published “Flow Diagrams, Turing Machines, and Languages with Only Two Formation Rules” in the journal Communications of the ACM, thereby laying the foundation for structured programming. At the same time, Terry Baker at IBM applied the basics of structured programming to systems development, thereby providing the first steps in developing the science of software development, later called software engineering.

How It Works

The principal activity of software engineering is the production of software. There are a number of different approaches to developing software, and the best way to understand these approaches is to study the software development life cycle for each approach.

Waterfall Model. The waterfall model of software development is characterized by a sequential software development life cycle. The key characteristic of the waterfall model is that each step of the software development life cycle is completed before going to the next step. The first step is to perform an initial study of the problem to be sure it is feasible. In the second step, a detailed analysis of what the project entails is completed. This is one of the most important components of the waterfall model and often uses a specialist called a systems analyst. In the third step, the information contained in the systems analyst's report is transformed into a formal design. For the waterfall model, this often includes a dataflow diagram, a system chart, and structured flowcharts or pseudo-code. In the forth step, the software is implemented. For most of the software being developed with the waterfall model, the implementation step requires that a program be written in a computer language such as COBOL (very popular in the mainframe era), Java, or C++. In the fifth step, the code is fully tested. Ideally, every conceivable set of inputs should be tried in the program to be sure that it always works. After the initial testing of the program, it is deployed and further testing is performed. The sixth, and final, step in the waterfall model is maintaining the system. This may include some small changes to the original program, correcting bugs discovered in the program, and determining when a new version of the system is needed.

Iterated Waterfall and Spiral Model. The iterated waterfall model is, as its name indicates, a modification of the waterfall model that allows programmers to redo a step of the waterfall model. When personal computers became a mainstay in the business world, programmers often had to return to earlier steps in the waterfall model and could not finish each step completely.

The spiral model of software development, introduced by Barry Boehm in 1987, was the next modification of the waterfall model. Boehm observed that rather than iterating the steps of the waterfall model, it made more sense to view the process of software development as a spiral of steps, many of which were the steps of the waterfall model. By placing the steps in a spiral, Boehm was able to select subsets of the waterfall model to repeat that more closely followed the actual software development process.

Object-Oriented Model.Object-oriented programming was first used with the Smalltalk language, developed at the Xerox PARC (later PARC) laboratories in the 1970s. The object-oriented model for software development was popularized by Grady Booch, James Rumbaugh, and Ivar Jacobson with their introduction of the Universal Modeling Language (UML) in 1997. Object-oriented software development uses the steps of the iterated waterfall model, but at all stages, it works with objects, their properties, and their methods. The key to software development with the UML is the development of a set of use cases during the analysis step that illustrate the threads of functionality of the software. During the design phase, developers create an object diagram and scenario diagrams for each use case to make coding in an object-oriented language such as Java easy.

Applications and Products

A vast amount of software has been developed for computers since the 1960s. Applications software, especially that designed for personal computers, dominates the software that has been developed. However, communications and systems software, designed to enable the operation of computers and networks, have also been important.

Applications Software. The personal computer was popularized by an article in the January 1975 issue of Popular Electronics about kits used to build personal computers, such as the Altair 8800. These early computers had little software other than a simple command-line operating system. Programs were written in assembly language until 1975, when Bill Gates and Paul Allen ported a BASIC interpreter to the Altair. Simple word processors, based on a text-editing system for the Xerox Star (Xerox 8010 Information System) and IBM's Mag Card technology, were the first software made available for personal computers. In 1979, Dan Bricklin and Bob Frankston developed VisiCalc, the first spreadsheet for personal computers. Gary Durbin developed a simple database for personal computers in 1970, but it was the release of dBASE in 1980 that led to the popularity of personal computer databases. PowerPoint was released for the Macintosh in 1984, and with its release, the main components of Microsoft Office were all in place. Versions of Microsoft Office for Windows and the Macintosh were released in the 1990s, and they have dominated the personal productivity software market since then.

Gates and Allen founded Microsoft in 1975. When IBM entered into a contract with Microsoft to produce the software for the IBM personal computer in 1981, Microsoft began its transformation into the leading software company in the world. In the early twenty-first century, its Windows operating system still dominated the operating system market, Microsoft Office dominated the personal productivity software market, and Outlook Express was a leader for email use on personal computers. Microsoft's Internet Explorer was a leading desktop internet browser until it was pahased out in 2022. Its successor was Microsoft Edge.

In addition to Microsoft, Adobe is a leading producer of personal computer software. Adobe Acrobat is a powerful document production system. The Adobe reader is installed on most personal computers, and Adobe portable document format (PDF) files have become the standard for file exchange. Adobe's graphics and photo enhancement programs, such as Photoshop, are also widely used, and its Dreamweaver Web page editor also is popular.

Software for entertainment is also important. Thousands of game programs are available for the personal computer, and numerous games can be played over the Internet. Many people listen to their favorite songs on their computers, watch their favorite television shows, or enjoy the latest films after downloading or streaming them from one of the many online distributors or streaming networks. Mobile devices such as smartphones make use of many web applications. Users can check their email, get updates on the weather, and follow the latest developments in sports. Users of mobile devices also can use cloud computing to execute applications such as word processing on demand.

Many applications have been developed to support the storage of data. Initially, data storage software was a function of the operating systems. IBM's IMS hierarchal database, first released in 1970 and still in use, was the early leader in databases. In 1970, Edgar F. Codd published a paper describing a relational model for a database. It was used as the basis for Oracle in 1979 and IBM's DB2 in 1983. Powerful database-driven programs developed by SAP in 1972 and PeopleSoft in 1987 (PeopleSoft was acquired by Oracle Corporation in 2005) formed the basis of enterprise resource planning software, integrated systems that consolidate all business functions, including manufacturing, financials, human resources, supply chain management, project management, and customer relationship management.

Communications Software. One of the earliest uses of computer networks was to exchange files with messages. By the twenty-first century, email had become the most popular program used on computers. Tim Berners-Lee developed a web browser in 1990 while working at CERN (now the European Particle Physics Laboratory). Since then, web browsers have become one of the world's main communications mediums. Much software has been developed for the web, with the Google search engine being one of the most famous and most often used. In 1995, Ward Cunningham introduced the first Wiki, a set of online documents that are created and modified by those who use the documents. The online encyclopedia Wikipedia was created in 2001 and has since become a source of information for many topics.

Early computer software used to play music was limited to WAV (binary waveform audio file format) and textual MIDI (musical instrument digital interface) files and, while interesting, was not widely used. Better file formats, in particular, MP3 (MPEG-1 audio layer 3) files, have produced high-quality reproductions that are small enough to download and store easily, and this has greatly increased audio player software. Early video software also was limited by file formats (such as Microsoft's audio video interleave, or AVI), low-speed networks, and slow processors. By 2000, network speed had increased, processors were faster, and the Windows media video (WMV) and QuickTime file formats made it practical to view streaming videos. In 2021, Microsoft's Media Player and QuickTime's player were two of the most popular video display software, but many more players were available for download.

Software to support social networking by building a virtual community (such as Facebook and Instagram) has had a profound impact on everyday lives, with billions of users across the globe. Although this can be seen as a simple extension of earlier instant messaging and message board software, the increased online communications represented by this software have proven to be an important step forward in the evolution of communications.

Systems Software. Computers need software to function, and the most important software is the operating system. In the 1960s, IBM developed the first major operating system, the OS/360, for its System/360 line. In the 1970s, it introduced the MVS system, a descendant of the OS/360. It was reliable and provided solid support for the business and scientific applications of the 1970s. In addition, it supported multitasking and multiprogramming, and had good security. The UNIX operating system, originally developed at Bell Labs in 1969, provided a friendly interactive environment. It became very popular with systems programmers and scientists in the 1970s and 1980s but was not widely adopted for business.

The Xerox Star, released in 1981, was the first operating system to use a mouse and have a graphical user interface (GUI). In the early 1980s, Steve Jobs and Steve Wozniak produced the Macintosh computer for Apple. The Macintosh's operating system, which was based on the Xerox Star, was the first successful commercial Windows operating system. In 1992, Microsoft released Windows 3.1 and, in 1995, Windows 95. These systems made Windows the most popular operating system for both business and home computers. Microsoft’s updated Windows systems remained popular well into the twenty-first century.

Middleware is the software used to network computers. It includes network-enabled operating systems and the underlying communications software, such as implementations of TCP/IP (transmission control protocol/Internet protocol), and router software, such as CISCO's IOS (originally Internetwork Operating System) software. Mainframe and server software provide support for many network and web applications. In addition to data storage, server-based applications provide support for audio, video, and images. An interesting web server application is eBooks, which stores digital copies of books that can be rented or purchased and displayed on a wide range of communication devices.

The software development environment has improved considerably since the early days of computing. Most early computer programs were written in assembly (or machine) language. With the development of languages such as FORTRAN, BASIC, and COBOL, programs became easier to develop. In the 1980s, Borland introduced an Integrated Development Environment (IDE) that made it easy to develop programs, especially Pascal. Microsoft released its first IDE, Visual Studio, in 1997, and it has dominated the market since then. There are a large number of systems to support building web applications. The leader is Microsoft's Visual Studio, but Eclipse and Android Studio are also used by many developers.

Careers and Course Work

A major in computer science is the traditional way to prepare for a software engineering job. Courses in ethics, mathematics, and physics are required at the outset of a computer science degree program, followed by about thirty-six hours of computer hardware and software courses. Those with a computer science degree often take software engineering jobs in systems programming and scientific programming. Job tasks could include, for example, developing a new module for Microsoft Word or a new networking application for CISCO.

A major in information systems is another way to prepare for a software engineering job. First, students take courses in mathematics and business, then they take about thirty hours of courses on information systems development. Those with degrees in computer information systems often take software engineering jobs as systems analysts, business applications developers, or system managers. A typical job task includes helping implement a new enterprise resource management system for a university or local grocery chain.

Some schools offer a degree in software engineering. Students need a good background in mathematics and management for this degree. The degree emphasizes understanding how to build systems rather than building a strong programming background. Students taking this degree should choose a strong minor in science or business to prepare for a specific job after graduation. Students with a software engineering degree and an appropriate minor can get almost any software engineering job. In 2021, the median salary of a software developer was $110,140 per year, according to the US Bureau of Labor Statistics.

Social Context and Future Prospects

The future of software engineering is bright, with good jobs available in the computer industry, scientific laboratories, and businesses, and a projected growth in employment of 22 percent into the 2020s. All the traditional applications programs, such as payroll, supply chain management, or protein identification, need to be maintained and, in some cases, rewritten. However, a number of completely new applications are developing and show great promise as areas of employment. The development of an electronic health record (EHR) for each person is a huge software project, as is making the electronic health record portable. The creation of an electronic health record program will be one of the largest international software engineering projects ever conceived. New software programs will also be needed for health and medical insurance carriers to manage healthcare policy enrollment. The use of mobile devices to access computing from web services is another important area of applications development. When accessing web services in a browser or with an application on a computer is added to this mix, it becomes cloud computing, which will probably be the dominant form of software use in the future.

Although cloud computing offers an easy way to do computing, much work must be done to ensure that the data processed by these applications is secure and private. Standards for encrypting and signing data being transferred between mobile devices and cloud services do exist, but successfully implementing these standards will require much programming effort. Ensuring that individual and corporate data privacy issues are addressed in software implementations will require programmers to exercise great care in their program development and system management. In fact, many software engineering positions in the future are likely to be security and privacy analysts.

Bibliography

Hiltzik, Michael. Dealers of Lightning: Xerox PARC and the Dawn of the Computer Age. 1999. HarperBusiness, 2007.

Pressman, Roger S. Software Engineering: A Practitioner's Approach. 7th ed., McGraw-Hill, 2010.

Richards, Mark, and Neal Ford. Fundamentals of Software Architecture: An Engineering Approach. O'Reilly, 2020.

"Software Developers." US Bureau of Labor Statistics, 1 Sept. 2020, www.bls.gov/ooh/computer-and-information-technology/software-developers.htm. Accessed 29 Mar. 2021.

Lyndersay, Sean. "The Future of Internet Explorer on Windows 10 is in Microsoft Edge." Microsoft, 19 Mar. 2021, blogs.windows.com/windowsexperience/2021/05/19/the-future-of-internet-explorer-on-windows-10-is-in-microsoft-edge/. Accessed 7 June 2022.

"Software Developers, Quality Assurance Analysts, and Testers." U.S. Bureau of Labor Statistics, 8 Sept. 2021, www.bls.gov/ooh/computer-and-information-technology/software-developers.htm. Accessed 7 June 2022.

Stair, Ralph, and George Reynolds. Principles of Information Systems. 9th ed., Course Technology, 2010.

Whitten, Jeffrey L, and Lonnie D. Bentley. Systems Analysis and Design Methods. 7th ed., McGraw-Hill, 2007.

Yourdon, Edward, editor. Classics in Software Engineering. Yourdon, 1979.