You are on page 1of 15

History Of Software Engineering

In the history of software engineering the software engineering has evolved steadily from its founding days in the 1940s until today. Applications have evolved continuously. The ongoing goal to improve technologies and practices, seeks to improve the productivity of practitioners and the quality of applications to users.

Software engineering (SE) is a profession dedicated to designing, implementing, and modifying software so that it is of higher quality, more affordable, maintainable, and faster to build. The term software engineering first appeared in 1968 at NATO Software Engineering Conference, and was meant to provoke thought regarding the perceived "software crisis" at the time.

History Of Software Engineering


When the first modern digital computers appeared in the early 1940s, the instructions to make them operate were wired into the machine. Practitioners quickly realized that this design was not flexible and came up with the "stored program architecture" or von Neumann architecture. Thus the first division between "hardware" and "software" began with abstraction being used to deal with the complexity of computing. Programming languages started to appear in the 1950s and this was also another major step in abstraction. Major languages such as Fortran, ALGOL, and COBOL were released in the late 1950s to deal with scientific, algorithmic, and business problems respectively

History Of Software Engineering


A software system for managing the hardware called an operating system was also introduced, most notably by Unix in 1969. In 1967, the Simula language introduced the object-oriented programming paradigm. These advances in software were met with more advances in computer hardware. In the mid 1970s, the microcomputer was introduced, making it economical for hobbyists to obtain a computer and write software for it. This in turn led to the now famous Personal Computer (PC) and Microsoft Windows. The Software Development Life Cycle or SDLC was also starting to appear as a consensus for centralized construction of software in the mid 1980s. The late 1970s and early 1980s saw the introduction of several new Simula-inspired object-oriented programming languages, including Smalltalk, Objective-C, and C++

1945 to 1965: The origins The term software engineering first appeared in the late 1950s and early 1960s. Programmers have always known about civil, electrical, and computer engineering and debated what engineering might mean for software. The NATO Science Committee sponsored two conferences on software engineering in 1968 and 1969, which gave the field its initial boost. Many believe these conferences marked the official start of the profession of software engineering.

1965 to 1985: The software crisis


Software engineering was spurred by the so-called software crisis of the 1960s, 1970s, and 1980s, which identified many of the problems of software development. Many software projects ran over budget and schedule. Some projects caused property damage. A few projects caused loss of life. The software crisis was originally defined in terms of productivity, but evolved to emphasize quality. Some used the term software crisis to refer to their inability to hire enough qualified programmers. Cost and Budget Overruns: The OS/360 operating system was a classic example. OS/360 was one of the first large software projects. Property Damage: Software defects can cause property damage. Poor software security allows hackers to steal identities, costing time, money, and reputations

1985 to 1989: No silver bullet


For decades, solving the software crisis was paramount to researchers and companies producing software tools. Seemingly, they trumpeted every new technology and practice from the 1970s to the 1990s as a silver bullet to solve the software crisis. Tools, discipline, formal methods, process, and professionalism were touted as silver bullets: Tools: Especially emphasized were tools: Structured programming, object-oriented programming, CASE tools, Ada, documentation, and standards were touted as silver bullets. Discipline: Some pundits argued that the software crisis was due to the lack of discipline of programmers Formal methods: Some believed that if formal engineering methodologies would be applied to software development

Continued
then production of software would become as predictable an industry as other branches of engineering. They advocated proving all programs correct Process: Many advocated the use of defined processes and methodologies like the Capability Maturity Model Professionalism: This led to work on a code of ethics, licenses, and professionalism The search for a single key to success never worked. All known technologies and practices have only made incremental improvements to productivity and quality. Yet, there are no silver bullets for any other profession, either. Others interpret no silver bullet as proof that software engineering has finally matured and recognized that projects succeed due to hard work.

Continued
However, it could also be said that there are, in fact, a range of silver bullets today, including lightweight methodologies, spreadsheet calculators, customized browsers, in-site search engines, database report generators, integrated design-test coding-editors with memory/differences/undo, and specialty shops that generate niche software, such as information websites, at a fraction of the cost of totally customized website development. Nevertheless, the field of software engineering appears too complex and diverse for a single "silver bullet" to improve most issues, and each issue accounts for only a small portion of all software problems

Software Characteristics
Some of the important characteristics are : Software does not wear out : Software becomes reliable overtime instead of wearing out. Software is not manufactured : It is one time development effort and continuous maintenance effort to keep it operational Reusability of components: Efforts have been made to design standard components that may be used in new projects Software is flexible : A program can be developed to do almost anything. Sometimes this characteristics may be the best and may help us to accommodate any kind of change.

Software Applications
Software has become integral part of most of the fields of human life. We name a field and we find the usage of software in that field. Software applications are grouped in to eight areas for convenience. System Software : Infrastructure software come under this category like compilers, operating systems, editors, drivers, etc. Basically system software is a collection of programs to provide service to other programs. Real Time software : These software are used to monitor, control and analyze real world events as they occur. Example: software required for weather forcasting. Such software will gather and process the status of temperature, humidity and other environmental parameters to forecast the weather.

Embedded software : This type of software is placed in ReadOnly-Memory(ROM) of the product and control the various functions of the product. The product can be an aircraft, automobile security system, signalling system, control unit of power plants etc. It is also termed as intelligent software as it handles hardware components. Business Software : This is the largest applications area. The software designed to process business applications is called business software. Business software could be payroll file monitoring system, employee management, account management. MIS, ERP are popular examples of business software. Personal Computer Software: The software used in personal computers are covered in this category. Examples are word processors, computer graphics, multimedia and animating tools, database management, computer games etc.

Artificial Intelligence Software: AI Software makes use of nonnumerical algorithms to solve complex problems that are not amenable to computation or straight forward analysis. Examples are expert systems, artificial neural network, signal processing software etc. Web Based Software : The software related to web applications come under this category. Examples are HTML, Java, Perl, DHTML etc. Engineering and Scientific Software : Scientific and engineering application software are grouped in this category. Huge computing is normally required to process data. Examples are CAD/CAM package, SPSS, MATLAB etc.

Some Terminologies
Some terminologies which are frequently used in software engineering are : Deliverables and Milestones : Different deliverables are generated during software development. Examples are source code, user manuals, operating procedures manuals etc. Milestones are the events that are used to ascertain the status of the project. Finalisation of specification is a milestone. Completion of design documentation is another milestone. The milestones are essential for project planning and management Product and Process : what is delivered to the customer, is called a product. It may include source code, specification document, manuals, etc. Basically it is a set of deliverables.

Process : Process is the way in which we produce software. It is the collection of activities that leads to ( a part of ) a product. An efficient process is required to produce good quality products. Measures, Metric and Measurement : These terms are often used interchangeably. A measure provides a quantitative indication of the extent, dimension, size, capacity, efficiency, productivity or reliability of some attributes of a product or process. Measurement is the act of evaluating a measure. A metric is a quantitative measure of the degree to which a system, component, or process possesses a given attribute. Software Process and Product Metrics : Software metrics are used to quantitatively characterise different aspects of software process or software products. Process Metrics quantify the attributes of the software development process and environment; whereas product metrics are measures

for the software product. Examples of Process Metric are productivity, quality, failure rate etc. Ex of Product metrics are size, reliability, complexity, etc. Productivity and Effort: Productivity is defined as the rate of output, or production per unit of effort, i.e the output achieved with regard to the time taken but irrespective of the cost incurred. Hence, there are two issues for deciding the unit of measure i) Quantity of output ii) period of time In software, one of the measure for quantity of output is lines of code (LOC) produced. Time is measured in days or months. Hence most appropriate unit of effort is Person Months (PMs), meaning thereby number of persons involved for specified months. So, productivity may be measured as LOC/PM (Lines of code produced/person month)