02 Why Software Engineering?
Upcoming SlideShare
Loading in...5
×
 

02 Why Software Engineering?

on

  • 7,250 views

Software Engineering

Software Engineering

Statistics

Views

Total Views
7,250
Views on SlideShare
7,247
Embed Views
3

Actions

Likes
3
Downloads
271
Comments
1

1 Embed 3

http://www.slideshare.net 3

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Thanks for sharing your gift of wisdom....software engineering
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    02 Why Software Engineering? 02 Why Software Engineering? Presentation Transcript

    • In this Module, we look at • what we mean by software engineering • software engineering’s track record • what we mean by “good software” • why systems approach is important • how software engineering has changed since the 1970s
    • Typical formal definitions of software engineering are: • - "the application of a systematic, disciplined, • quantifiable approach to the development, • operation, and maintenance of software". • - "an engineering discipline that is concerned with • all aspects of software production” • - "the establishment and use of sound engineering • principles in order to economically obtain software • that is reliable and works efficiently on real • machines"
    • • - “ is a theory and practice that an individual or a • group of software developers or software • engineers having the knowledge of computer and • computing to help solve problems especially • problems with which are related to a computer or Other meanings of software engineering: • an existing computer system". • As Dijkstra pointed out, the terms software engineering and software engineer have, at times, also been misused in a much wider sense, particularly in America. The term has been used less formally:
    • • - as the informal contemporary term for the broad • range of activities that was formerly called • programming and systems analysis • - as the broad term for all aspects of the practice of • computer programming, as opposed to the theory • of computer programming, which is called - as the term science; the advocacy of a specific computer embodying • • • approach to computer programming, one that urges that it • be treated as an engineering discipline rather than an art • or a craft, and advocates the codification of recommended • practices in the form of software engineering methodologies.
    • • The discipline of software engineering encompasses knowledge, tools, and methods for defining software requirements, and performing software design, software construction, software testing, and software maintenance tasks. • Software engineering also draws on knowledge from fields such as computer engineering, computer science, management, mathematics, project management, quality management, software ergonomics, and systems engineering.
    • • As of 2004, the U. S. Bureau of Labor Statistics counts 760,840 software engineers holding jobs in the U.S.; for comparison, in the U.S. there are some 1.4 million practitioners employed in all other engineering disciplines combined. The term software engineer is used very liberally in the corporate world. Very few of the practicing software engineers actually hold engineering degrees from accredited universities. • There are estimated to be about 1.5 million practitioners in the E.U., Asia, and elsewhere SE pioneers include Barry Boehm, Fred Brooks, C. A. R. Hoare, and David Parnas.
    • • David Parnas has said that software engineering is, in fact, a form of engineering. Steve McConnell has said that it is not, but that it should be. • Donald Knuth has said that programming is an art and a • science. The U.S. Bureau of Labor Statistics classifies computer • software engineers as a subcategory of "computer specialists", along with occupations such as computer scientist, programmer, and network administrator. The BLS classifies all other engineering disciplines, including computer hardware engineers, as "engineers".
    • • The U.K. has seen the alignment of the Information Technology Professional and the Engineering Professionals. Software engineering in Canada has seen some contests in the courts over the use of the title "Software Engineer
    • • Software is often found in products and situations where very high reliability is expected, even under demanding conditions, such as monitoring and controlling nuclear power plants, or keeping a modern airliner aloft. Such applications contain millions of lines of code, making them comparable in complexity to the most complex modern machines. For example, a modern airliner has several million physical parts (and the space shuttle about ten million parts), while the software for such an airliner can run to 4 million lines of code.
    • • Software engineers advocate many different technologies and practices, with much disagreement, which has originated a debate that has gone on for over 60 years. Software engineers use a wide variety of technologies: compilers, code repositories, text editors. They also use a wide variety of practices to carry out and coordinate their efforts: pair programming, code reviews and daily stand up meetings. In spite of the enormous economic growth and productivity gains enabled by software, persistent complaints about the quality of software remain.
    • Most software engineers work as employees or contractors. Software engineers work with businesses, government agencies (civilian or military), and non-profit organizations. Some software engineers work for themselves as freelancers. Some organizations have specialists to perform each of the tasks in the software development process. Other organizations required software engineers to do many or all of them. In large projects, people may specialize in only one role. In small projects, people may fill several or all roles at the same time.
    • Specializations include: in industry (analysts, architects, developers, testers, technical support, managers) and in academia (educators, researchers ). There is considerable debate over the future employment prospects for Software Engineers and other IT Professionals. For example, an online futures market called the Future of IT Jobs in America attempts to answer whether there will be more IT jobs, including software engineers, in 2012 than there were in 2002 .
    • Certification of software engineers is a contentious issue. Some see it as a tool to improve professional practice. Most successful certification programs in the software industry are oriented toward specific technologies, and are managed by the vendors of these technologies. These certification programs are tailored to the institutions that would employ people who use these technologies.
    • The ACM had a professional certification program in the early 1980s, which was discontinued due to lack of interest. As of 2006, the IEEE had certified over 575 software professionals. In Canada the Canadian Information Processing Society has developed a legally recognized professional certification called Information Systems Professional (ISP).
    • Many students in the developed world have avoided degrees related to software engineering because of the fear of offshore outsourcing (importing software products or services from other countries) and of being displaced by foreign visa workers. Although government statistics do not currently show a threat to software engineering itself; a related career, computer programming does appear to have been affected. Often one is expected to start out as a computer programmer before being promoted to software engineer.
    • Thus, the career path to software engineering may be rough, especially during recessions. Some career counselors suggest a student also focus on "people skills" and business skills rather than purely technical skills because such "soft skills" are allegedly more difficult to offshore. It is the quasi-management aspects of software engineering that appear to be what has kept it from being impacted by globalization.
    • Software engineering has evolved steadily from its founding days in the 1940s until today in the 2000s. Applications have evolved continuously. PIONEERING ERA - The ongoing goal to improve technologies and practices, seeks to improve the productivity of practitioners and the quality of applications to users. - Hardware vendors gave away systems software for free as hardware could not be sold without software. A few companies sold the service of building custom software but no software companies were selling packaged software.
    • 1945 TO 1965: THE ORIGINS - The term software engineering first appeared in the late 1950s and early 1960s. - NATO Science Committee sponsored conferences in 1968 and 1969 that marked the official start of the profession of SE. 1965 TO 1985: THE SOFTWARE CRISIS - 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 causing over budget and schedules, property damage and loss of life.
    • Cost and Budget Overruns: The OS/360 operating system was a classic example. This decade-long] project from the 1960s eventually produced one of the most complex software systems at the time. OS/360 was one of the first large (1000 programmers) software projects. Fred Brooks claims in The Mythical Man Month that he made a multi- million dollar mistake of not developing a coherent architecture before starting development. • Property Damage: • Software defects can cause property damage. Poor software security allows hackers to steal identities, costing time, money, and reputations.
    • • Life and Death: • Software defects can kill. Some embedded systems used in radiotherapy machines failed so catastrophically that they administered lethal doses of radiation to patients. 1985 TO 1989: NO SILVER BULLET - From 1970s to 1990s researchers and companies produced software tools as a “silver bullet” to solve the software crisis. Tools: Especially emphasized were tools: Structured programming, object-oriented programming, CASE tools, Ada, Java , documentation, standards, and Unified Modeling Language were touted as silver
    • • 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, 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.
    • 1990 TO 1999: THE INFORMATION SUPERHIGHWAY - Rise of the Internet - The growth of Browser usage running on the HTML Language - Search engines system - Human multi-language translation system 2000 TO PRESENT: LIGHTWEIGHT METHODOLOGIES - With the expanding demand for software in many smaller organizations, the need for inexpensive software solutions led to the growth of simpler, faster methodologies that developed running software, from requirements to deployment, quicker & easier.
    • - The use of rapid-prototyping evolved to entire lightweight methodologies, such as Extreme Programming (XP), which attempted to simplify many areas of software engineering, including requirements gathering and reliability testing for the growing, vast number of small software systems.
    • • Emergence as a Profession • Role of Women • Processes and Methodology • Cost of Hardware
    • ASPECTS Aspects help software engineers deal with - ilities by providing tools to add or remove boilerplate code from many areas in the source code. Aspects describe how all objects or functions should behave in particular circumstances. For example, aspects can add debugging, logging, or locking control into all objects of particular types. Researchers are currently working to understand how to use aspects to design general-purpose code. Related concepts include generative programming and templates.
    • AGILE Agile software development guides software development projects that evolve rapidly with changing expectations and competitive markets. Proponents of this method believe that heavy, document-driven processes (like TickIT, CMM and ISO 9000) are fading in importance. Some people believe that companies and agencies export many of the jobs that can be guided by heavy- weight processes. Related concepts include Extreme Programming and Lean software development
    • EXPERIMENTAL Experimental software engineering is a branch of software engineering interested in devising experiments on software, in collecting data from the experiments, and in devising laws and theories from this data. Proponents of this method advocate that the nature of software is such that we can advance the knowledge on software through experiments only. MODEL-DRIVEN Model Driven Software Development uses (both textual and graphical) models as primary development artifacts. By means of model transformation and code generation a part or complete applications are generated.
    • SOFTWARE PRODUCT LINES Software Product Lines is a systematic way to produce families of software systems, instead of creating a succession of completely individual products. This method emphasizes extensive, systematic, formal code reuse, to try to industrialize the software development process.
    • In 2006, Money Magazine and Salary.com rated software engineering as the best job in America in terms of growth, pay, stress levels, flexibility in hours and working environment, creativity, and how easy it is to enter and advance in the field.
    • ICSE The biggest and oldest conference devoted to software engineering is the International Conference on Software Engineering. This conference meets every year to discuss improvements in research, education, and practice. COMPSAC The Annual International Computer Software and Applications Conference was first held in Chicago in 1977 and is designated as the IEEE Computer Society signature conference on software technology and applications.
    • ESEC The European Software Engineering Conference. FSE The Foundations of Software Engineering conference is held every year, alternating between Europe and North America. It emphasizes theoretical and foundational issues. CUSEC Conferences dedicated to inform undergraduate students like the annual Canadian University Software Engineering Conference are also very promising for the future generation.
    • SEPG The annual Software Engineering Process Group conference, sponsored by the Carnegie Mellon Software Engineering Institute (SEI), is a conference and exhibit showcase for systems and software engineering professionals. The four-day event emphasizes systematic improvement of people, processes, and technology. INFORMATICS-INFORMATIQUE The annual Canadian information technology, data processing and software engineering symposium, sponsored by the Canadian Information Processing Society. First held in 1958.
    • ICALEPS International Conference on Accelerator and Large Experimental Physics Control Systems Conference. Biennial conference covering software engineering for large scale scientific control systems. First held in 1987. APSEC Asia Pacific Software Engineering Conference. UYMS National Software Engineering Symposium (in Turkish: Ulusal Yazilim Muhendisligi Sempozyumu) (not available in English). Biennial symposium first held in İzmir, Turkey in 2003.
    • • Association for Computing Machinery (ACM) • Australian Computer Society (ACS) • British Computer Society (BCS) • Canadian Information Processing Society (CIPS) - Information Systems Professional certification. • IEEE Computer Society • Lero, the Irish Software Engineering Research Centre • Russian Software Developers Association (RUSSOFT) • Software Engineering Institute (SEI) • Software Industry Professionals • The Safety and Reliability Society
    • (SHORT VERSION) PREAMBLE Software engineers shall commit themselves to making the analysis, specification, design, development, testing and maintenance of software a beneficial and respected profession. In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight Principles:
    • 1. PUBLIC Software engineers shall act consistently with the public interest. 2. CLIENT AND EMPLOYER Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest. 3. PRODUCT Software engineers shall ensure that their products and related modifications meet the highest professional standards possible. 4. JUDGMENT Software engineers shall maintain integrity and independence in their professional judgment.
    • 5. MANAGEMENT Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance. 6. PROFESSION Software engineers shall advance the integrity and reputation of the profession consistent with the public interest. 7. COLLEAGUES Software engineers shall be fair to and supportive of their colleagues.
    • 8. SELF Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
    • Problem solving technique must have two parts: 1. ANALYZING Solving problems must begin investigating it by analyzing it, that it, by breaking the problem into pieces to determine its nature 2. SYNTHESIZING Synthesis is putting together of a large structure from small building blocks.
    • The process of analysis
    • The process of synthesis
    • To use efficient and productive approaches to generate effective solutions to problems, SE may employ the use of: 1. METHOD Method or technique is a formal procedure for producing some result. 2. PARADIGM Paradigm represents a particular approach or philosophy for building software.
    • 3. TOOL Tool is the instrument or automated system for accomplishing something in a better way. The “BETTER WAY” can mean that the tool makes us accurate, more efficient, or more productive or that it enhances the quality of the resulting product. 4. PROCEDURE A combination of tools and techniques that, in concert, produce a particular product.
    • QUALITY – degree of excellence; high standard Five different perspectives of quality (Garvin 1984) 1. The Transcendental View Where the quality is something we can recognize but not define 2. The User View Where the quality is fitness for purpose
    • 3. The Manufacturing View Where the quality is conformance to the specification 4. The Product View Where the quality is tied to inherent product characteristics 5. The Value-Based View Where the quality depends on the amount the customer is willing to pay for it
    • Software Quality must be consider in at least 3 ways 1. QUALITY OF THE PRODUCT - Users judge software to be of high quality if it is easy to use and easy to learn - number of failures and type of failures - must be judge according who are designing and writing the code and who maintain the program after they are written
    • McCall’s Quality Model
    • 2. THE QUALITY OF THE PROCESS - One of the advantages of modeling the process is we can examine it and look for ways to improve it. - “Where and when are we likely to find a particular kind of fault? - “How can we find faults earlier in the development process?” - “How can we build in fault tolerance so that we minimize the like hood that a fault became a failure?” - “Are there alternative activities that can make our process more effective or efficient at assuring quality?”
    • 3. THE QUALITY IN THE CONTEXT OF BUSINESS ENVIRONMENT - Quality is viewed in terms of the products and services being provided by the business in which the software is embedded. - Technical value of the product rather than the Business value. - Improving technical quality will automatically translate into business value. - Return of Investment (ROI) derived from financial community, describes the investment in terms of what is given up for other purposes. That is, the “investment must not only return the original capital but enough more to at least equal what the funds would have earn elsewhere, plus the allowance of risk.”
    • - ROI includes training, schedule, risk, quality, productivity, process, customer, cost and business - ROI Business models such as “Payback Model”, “Accounting-Rate of Return Model”, “Discounted Cash Flow Model”
    • Terms included in industry definition of ROI
    • • Boundaries – what is included in the project and what is not. • Elements of a System 1. Activities are something that happens in the system 2. Objects or entities are the element involve in the activities 3. Relationships 4. The System Boundary
    • • System is a collection of things, a set of entities, a set of activities, a description of relationships among entities and activity and a definition of a system boundary. • Interrelated System • Incremental Development Approach may incorporated a series of stages, each of which frees the previous system from another such constraint
    • • Two different ways to view the system 1. Statically Static view tells us how the system is working today. 2. Dynamically Dynamic view shows us how the system is changing into what it will eventually became.
    • • A popular collection of programming tools is called the Programmer’s Workbench • Software projects progress in a way similar to the house-building
    • Building a House Building a System Determining & analyzing Requirement analysis & the requirements definition Producing & documenting System Design the overall design of the house Producing detailed Program Design specifications of the house Identifying & designing Writing the programs the components (Program implementation) Building each component Unit Testing / Module of the House Testing
    • Building a House Building a System Testing each component Integration Testing of the house Integrating the System Testing component Making final modifications System Delivery after the residents have moved in Continuing maintenance Maintenance by the residents of the house