What is Software Engineering?
Software:
“Software is the set of instructions that tell a computer what to do.”
“Computer programs and associated documentation.”
Another definition of software is as fallow
“when we write a program for the computer we named it as software.”
But software is not just a program , instruction or documentation. Some of the constituted items of software are described below.
Program: The program and code itself included in the software.
Data: The data on which the program operates is also considered as a part of software.

Documentation: All the documents related to the software are also considered as the part of software.
So software is not just a code written in any computer language. It include the data and all documentation related to the program.
There are two types of software
1. System software
2. Application software
Software engineering:The term software engineering first appeared in the 1968 NATO software engineering conference, and was meant to provoke the thought regarding the perceived “software crisis” at the time.“Software engineering is the discipline of designing, writing , maintaining , testing and implementing software.”“Software engineering is also a profession, practiced by software engineers.”“Software engineering is the discipline of providing methods and tools for the construction of quality software with the limited budget and given deadline.”
According to IEEE definition:“The application of systematic, disciplined, quantifiable approach to the development, operation and maintenance of software.”
Importance of software engineering:Software Engineering is the set of processes and tools to develop software. Software Engineering is the combination of all the tools, techniques, and processes that used in software production. Therefore Software Engineering encompasses all those things that are used in software production like:- Programming Language
- Programming Language Design
- Software Design Techniques
- Tools
- Testing
- Maintenance
- Development
So all those thing that are related to software are also related to software engineering. Some of you might have thought that how programming language design could be related to software engineering. If you look more closely at the software engineering definitions described above then you will definitely see that software engineering is related to all those things that are helpful in software development. So is the case with programming language design. Programming language design is one of the major successes in last fifty years. The design of Ada language was considered as the considerable effort in software engineering.These days object-oriented programming is widely being used. If programming languages will not support object-orientation then it will be very difficult to implement object-oriented design using object-oriented principles. All these efforts made the basis of software engineering.Software engineering has changed the world’s culture, particularly in countries whose people use computers. Email, the world-wide web and instant messaging enable people to interact in a new ways. Software lowers the cost of many important social goods and services, such as health-care and fire departments. In most systems, including telecommunication system, software is overriding component in terms of cost and complexity. Good software engineering practices and tools can therefore make a substantial difference, even to the extent that may be the driving force of the project success.In the USA, software drove 1/4 of all increase in GDP during the 1990s (about $90 billion per year), and 1/6 of all productivity growth (efficiency within GDP) during the late 1990s (about $33 billion per year). Without software engineering computer would have no functionality. Although hardware is just as important, no software mean no computer.
Role of software engineering in different fields:Undoubtedly software is playing a vital role in all the fields of life these days. We can see many software applications being operated around us in our daily routine. Some of the major areas in which software has played an important role are identified as under:
Business decision-making: Software systems have played a major role in businesses where you have to analyse your data and on the basis of that analysis you have to make business decisions. This process of data analysis and decision-making has become very accurate and easy by the use of software.
Modern scientific investigation and engineering problem solving: Scientific investigations and engineering problem solving require an intensive amount of calculations and data analysis. The accuracy of these analyses is also very important in scientific applications. This process has become very easy and accurate by the use of software. For example software systems are becoming more involved in bioinformatics and the process of DNA decoding is only possible by the use of software systems. Similarly many astronomical observations are being recorded and analysed by the software systems these days.
Games: We see many computer games these days that interests people of all ages. All these games are drive through software systems.
Embedded systems: We see many kinds of gadgets being employed in our daily used things, like small micro controllers used in our cars, televisions, microwave ovens etc.All these systems are controlled through the software.Similarly in many other fields like education, office automation, Internet applications etc.,Software is being used. Due to its central importance and massive use in many fields it iscontributing a lot in terms of economic activity started by the software products. Billions and trillions of dollars are being invested in this field throughout the world every year.
Interlink of software engineering with CS/IT:Software engineering is the specific department of CS which you get specialization in software development but in IT it’s offer as special course for those students they are interested in IT.The science concerned with putting scientific knowledge to practical use. There are many engineering fields like electrical, mechanical and civil engineering. All these branches of engineering are based on physics. Physics itself is not engineering but the use of physics in making buildings, electronic devices and machines is engineering. When we use physics in constructing buildings then it is called civil engineering. When we use physics in making machines like engines or cars then it is called mechanicalengineering. And when we apply the knowledge of physics in developing electronic devices then the process is called electrical engineering. The relation of computer science with software engineering is similar as the relation of physics with the electrical, mechanical or civil engineering or for that matter the relation of any basic science with any engineering field. So in this context we can define software engineering as: ”This is the process of utilizing our knowledge of computer science in effectiveproduction of software systems.”
Comparing Related Fields:The relationship between the software engineering and the related fields of programming, computer science and traditional engineering has been debated from many decades. Many of the similarities and differences are discussed here.
Comparing programming:Programmers emphasize the task of writing code. Software engineers work on all sizes of applications: small and large. Programming emphasizes coding to produce working software applications, independent of budget and schedule. Software engineering tries to encompass software projects more completely, including budget and schedule. Software engineering recognizes that software development fits in a large business context with relationships to marketing, sales, production, installation, training, support and operations. Software engineering emphasizes methods to construct large applications that individual programmers cannot write alone. Software engineering tries to come up with methods to write programs in a consistent way.
Comparing computer science:Many believe that (metaphorically) software engineering is to computer science and information science as traditional engineering is to physics and chemistry. While 40% of software engineers earn computer science degrees, they do not practice computer science every day, which is different than practicing software engineering every day.
Comparing traditional engineering:Some practitioners believe that they apply concepts of traditional engineering to software design and implementation . They believe this provides a structured, logical approach and subsequently, a stable final product. Other practitioners are inspired by traditional engineering, but believe that software problems need particular solutions. They believe that traditional engineering concepts may not apply , because software is fundamentally different than bridges and roads. For example, traditional engineers do not use compilers or linker to build roads. Software engineers aspire to build low-cost, reliable, safe software, which is much like what traditional engineers do. Software engineers borrow many metaphors and techniques from traditional engineering disciplines: requirements analysis, quality control and project management techniques. Traditional engineers now use software tools to design and analyse systems, such as bridges and buildings. These new kinds of design and analysis resemble programming in many respects, because the work exists as electronic documents and goes through analysis, design, implementation and testing phases just like software. The term engineering causes a lot of confusion. Some believe that it means that practitioners must be engineers. Others believe that software engineering is a metaphor. Engineers may work with a leading agency, be it a profit-seeking corporation (a business), a government (civilian or military), or non-profit agency such as school. In the U.S., there are 10 times as many software engineers as computer engineers, and the software engineering community is about 60% as large as the traditional engineering community.
Some claim that software engineering is already as predictable and reliable as many fields of engineering, such as space or biological engineering. Although large, reliable software systems can be and have been constructed, software projects that fail during construction or in service are still too common. However, failures in large traditional engineering systems, such as those preceding the disasters in three miles island, Chernobyl, Bhopal disaster, space shuttles challenger and Columbia are also too common. . Others argue that unlike in traditional engineering where practitioners analyse failures, find precise causes, and set up guidelines to avoid them in the future software engineers routinely fail to pinpoint causes of failure or delay precisely enough to avoid repeats in the future.
Future trends in software engineering:The world is changing and so are the demands on software engineering discipline. In this talk software engineering highlight some of the recent trends, namely the rise of empirical software engineering, of multi-core software engineering, of web service engineering, of secure, dependable and energy conscientious engineering.BIO: Wolfram Schulte is a principal researcher and the founding manager of Microsoft’s Research in Software Engineering (RISE) team in Redmond, WA., USA. His team focuses on improving software productivity by providing better analytic s, languages and tools for describing, analyzing, testing and executing software. Before joining Microsoft Research in 1999, he worked at the University of Ulm (1993-1999), at sd&m, a German software company (1992-1993), and at the Technical University Berlin (1987-1992).
Model-driven architecture (MDA) - Not old-style computer-aided software engineering (CASE), i.e. discredited round-trip engineering
- Capture different levels of abstraction; elaborating lower-levels, constrained by higher-levels
Software factories - Component-based libraries and frameworks
- Meta-object facility (MOF) for store and registry of component meta-data. Dependency-injection, e.g. Spring factory
- Mocks objects to complement, not replace, unit and integration testing using fixtures
Service-oriented architecture (SOA) - Continuing growth and refinement of ontology-based software engineering
- Return to not-quite components, i.e. facade for service interfaces that are Explicit growth of resource description framework (RDF), web ontology language (OWL) - semantic-description languages and extensions (hard problem!)
- Realisation that C++, Java, C#, perl, python, yacc/bison (of course) incorporate support for domain-specific languages (DSLs) by extension, genericity and composition
- Convergence of object-oriented analysis and design with design and enterprise patterns
- Combine patterns and domain ontology to give DSL independent of technology and platforms - "form follows function"
Non-trivial systems - software and systems engineering merge into concrete discipline
- integration architecture, distributed and real-time computing are increasingly seen as facets of same problem
- enterprise security, single sign on, unified data views, portals - service and system mash ups at user and data levels
- two-level development:
1) service and business levels based on business/logical processes and composite services; 2) implementations that conform to service and interface contracts can be in any technology, i.e. custom software, commercial-off-the-shelf (COTS) or free and open source software (FOSS) - well-defined registry interface - "think global over enterprise, act local" every system and application adheres to enterprise guidelines
- configurable and adaptable - constrained flexibility due to absolute need to confidently test known configurations
Cross discipline - computer science and software engineering, psychology, management
- unified analysis, richer toolkit of analytic s and heuristics
- mature processes, peer review and accreditation.
- Programming Language
- Programming Language Design
- Software Design Techniques
- Tools
- Testing
- Maintenance
- Development
- Not old-style computer-aided software engineering (CASE), i.e. discredited round-trip engineering
- Capture different levels of abstraction; elaborating lower-levels, constrained by higher-levels
- Component-based libraries and frameworks
- Meta-object facility (MOF) for store and registry of component meta-data. Dependency-injection, e.g. Spring factory
- Mocks objects to complement, not replace, unit and integration testing using fixtures
- Continuing growth and refinement of ontology-based software engineering
- Return to not-quite components, i.e. facade for service interfaces that are Explicit growth of resource description framework (RDF), web ontology language (OWL) - semantic-description languages and extensions (hard problem!)
- Realisation that C++, Java, C#, perl, python, yacc/bison (of course) incorporate support for domain-specific languages (DSLs) by extension, genericity and composition
- Convergence of object-oriented analysis and design with design and enterprise patterns
- Combine patterns and domain ontology to give DSL independent of technology and platforms - "form follows function"
- software and systems engineering merge into concrete discipline
- integration architecture, distributed and real-time computing are increasingly seen as facets of same problem
- enterprise security, single sign on, unified data views, portals - service and system mash ups at user and data levels
- two-level development:
- well-defined registry interface - "think global over enterprise, act local" every system and application adheres to enterprise guidelines
- configurable and adaptable - constrained flexibility due to absolute need to confidently test known configurations
- computer science and software engineering, psychology, management
- unified analysis, richer toolkit of analytic s and heuristics
- mature processes, peer review and accreditation.
0 comments:
Post a Comment