52
Jennifer ‘Jannah’ Contreras (LECTURER) E-MAIL: [email protected] TOPIC 1 WHAT IS SOFTWARE ENGINEERING?

Introduction Software engineering

Embed Size (px)

Citation preview

Page 1: Introduction   Software engineering

Jennifer ‘Jannah’ Contreras(LECTURER)E-MAIL: [email protected]

TOPIC 1

WHAT IS SOFTWARE ENGINEERING?

Page 2: Introduction   Software engineering

2

Learning Outcomes

Understand Software Engineering• Define computer science and software

engineering and how the two are different.• Be familiar with the importance of software

engineering.• Be familiar with disciplines that are related to

software engineering.• Understand the role of a software engineer.• Be familiar with the various software engineering

principles and concepts

At the end of this lesson, Students will be able to:

Page 3: Introduction   Software engineering

Software Engineering• The economies of ALL developed nations are

dependent on software.

More and more systems are software controlled

Page 4: Introduction   Software engineering

What is Software?• Computer programs and associated documentation such as

requirements, design models and user manuals.

• Software products may be developed for a particular customer or may be developed for a general market.

• Software products may be– Generic - developed to be sold to a range of different customers e.g.

PC software such as Excel or Word.– Bespoke (custom) - developed for a single customer according to

their specification.• New software can be created by developing new programs,

configuring generic software systems or reusing existing software.

Page 5: Introduction   Software engineering

What is Engineering?• Engineering is …

– The application of scientific principles and methods to the construction of useful structures & machines

• Examples– Mechanical engineering– Computer engineering– Civil engineering– Chemical engineering– Electrical engineering– Nuclear engineering– Aeronautical engineering

Page 6: Introduction   Software engineering

What is Software Engineering?

• Software engineering is an engineering discipline that is concerned with all aspects of software production.

• Software engineers should adopt a systematic and organised approach to their work and use appropriate tools and techniques depending on the problem to be solved, the development constraints and the resources available.

Page 7: Introduction   Software engineering

Build software is like we build bridges

…but

Page 8: Introduction   Software engineering

Software Engineering Definition (IEEE)

• Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software

Page 9: Introduction   Software engineering

Software Engineering

• Method: refers to a formal procedure; a formal “recipe” for accomplishing a goal that

is typically independent of the tools used

• Tool: an instrument or automated system for accomplishing something in a better way

• Procedure: a combination of tools and techniques to produce a product

• Paradigm: philosophy or approach for building a product (e.g., OO vs structured

approaches)

Page 10: Introduction   Software engineering

What does a Software Engineer do?

Software engineers should adopt a systematic and organised

approach to all aspects of software development.

use appropriate tools and techniques depending on

the problem to be solved, the development constraints and the resources available

Understand and communicate processes for improved software development within their organizationBe effective team members and/or leaders.Can be very technical or more managerial depending on organizational need.

Page 11: Introduction   Software engineering

Where Does the SW Engineer Fit

in?

• Computer science: focusing on computer hardware, compilers,

operating systems, and programming languages

• Software engineering: a discipline that uses computer and software

technologies as a problem-solving tools

Where Does the Software Engineer Fit In?

Page 12: Introduction   Software engineering

Where Does the SW Engineer Fit in? (continued)

• Relationship between computer science and software engineering

Page 13: Introduction   Software engineering

Software Engineering ≠ Software Programming

• Software programming– Single developer– “Toy” applications– Short lifespan– Single or few stakeholders

• Architect = Developer = Manager = Tester = Customer = User

– One-of-a-kind systems– Built from scratch– Minimal maintenance

Page 14: Introduction   Software engineering

Software Engineering ≠ Software Programming

• Software engineering– Teams of developers with multiple roles– Complex systems– Indefinite lifespan– Numerous stakeholders

• Architect ≠ Developer ≠ Manager ≠ Tester ≠ Customer ≠ User– System families– Reuse to amortize costs– Maintenance accounts for 60%-80% of overall

development costs

Page 15: Introduction   Software engineering

Why Is Software Engineering Important?

• It is very expensive and horrendous to design software systems that do not work or that include bugs a errors and run wrongly.

• The developing entity of such a software system could get bankrupt and loose business.

• Such a software developer could be involved in legal cases in court that cost them a huge amount of money.

Page 16: Introduction   Software engineering

Related disciplines to software engineering include the following:

• Web Engineering• Programming Languages• Operating Systems• Database Management Systems• Artificial Intelligence• Theoretical Models• Management Science• Systems Engineering

Page 17: Introduction   Software engineering

Web Engineering• Web Engineering is a recent and new

discipline for development of web-based systems. It has emerged lately to address a process and a systematic approach to development of high quality web-based systems.

Page 18: Introduction   Software engineering

Web Engineering

• Web engineering objective is to establish and use of sound scientific, engineering and management principles and disciplined and systematic approaches to the successful development, deployment and maintenance of high quality Web-based systems and applications.

Page 19: Introduction   Software engineering

Programming Languages• Programming languages are used by the

software programmers to develop the code of the software systems and hence, they are the central tools used in software development.

• Programming languages affect the quality and efficiency of the product. The software process and software engineering principles also affect the development of programming languages.

Page 20: Introduction   Software engineering

Operating System• Operating Systems are examples of

software systems and therefore they were the first instances of software that needed to be engineered.

• The development of these operating systems follows the software engineering process. The operating systems strongly affect and influence software engineering.

Page 21: Introduction   Software engineering

Database Management System

• Database Management Systems are large software systems. Database management systems influence and are influenced by software engineering.

• Some of the new ideas learned through the development of database management systems are the discovery of new design techniques such as data independence, which is an example of separation of concern (separation of specification from implementation).

Page 22: Introduction   Software engineering

Artificial Intelligence• Artificial intelligence systems are very

complex software systems. • They are built with only a vague notion of

how the system is going to work. • Artificial intelligence systems use new

software engineering techniques in dealing with specifications, verification, and reasoning in the presence of uncertainty.

Page 23: Introduction   Software engineering

Theoretical Models • Theoretical models discipline is

concerned with the development of a number of models.

• These models are used as tools and models in software engineering.

• An example of these models is the finite state machines (used as techniques for software specifications and as models for software design and structure).

Page 24: Introduction   Software engineering

Management Science• Technical Management and Personnel Management

of software projects is an essential part of the software engineering.

• Technical management includes project estimation, project scheduling, human resource planning, task decomposition and assignment, and project tracking.

• The personnel management involves hiring personnel, motivating people, and assigning the right people to the right tasks.

Page 25: Introduction   Software engineering

Systems Engineering• System Engineering is the field

concerned with studying complex systems.

• Since software engineering is concerned with the studying of complex software system it becomes a sub-field of systems engineering.

• System engineering tries to discover common theories that apply to diverse commercial, industrial, business, military and other systems.

Page 26: Introduction   Software engineering

1.4 Who Does Software Engineering? (continued)

• Participants (stakeholders) in a software development project

Page 27: Introduction   Software engineering

1.5 System Approach

• Hardware, software, interaction with people

• Identify activities and objects

• Define the system boundary

• Consider nested systems, systems interrelationship

Page 28: Introduction   Software engineering

1.5 System ApproachThe Element of a System

• Activities and objects

– An activity is an event initiated by a trigger

– Objects or entities are the elements involved in the activities

• Relationships and the system boundaries

– A relationship defines the interaction among entities and activities

– System boundaries determine the origin of input and destinations of the output

Page 29: Introduction   Software engineering

1.5 System ApproachThe Element of a System (continued)

• A computer system must also be clearly described: System definition of a paycheck

production

Page 30: Introduction   Software engineering

1.5 System ApproachInterrelated Systems

• Some systems are dependent to other systems

– The interdependencies may be complex

• It is possible for one system to exist inside another system

• If the boundary definitions are detailed, building a larger system from the smaller

ones is relatively easy

Page 31: Introduction   Software engineering

1.6 Engineering ApproachBuilding a System

• Requirement analysis and definition

• System design

• Program design

• Writing the programs

• Unit testing

• Integration testing

• System testing

• System delivery

• Maintenance

Page 32: Introduction   Software engineering

1.7 Members of the Development Team

• Requirement analysts: work with the customers to identify and document the requirements

• Designers: generate a system-level description of what the system us supposed to do

• Programmers: write lines of code to implement the design

• Testers: catch faults

• Trainers: show users how to use the system

• Maintenance team: fix faults that show up later

• Librarians: prepare and store documents such as software requirements

• Configuration management team: maintain correspondence among various artifacts

Page 33: Introduction   Software engineering

1.7 Members of the Development Team (continued)

• Typical roles played by the members of a development team

Page 34: Introduction   Software engineering

What are the key challenges facing software engineering?

• Heterogeneity, delivery and trust.• Heterogeneity

– Developing techniques for building software that can cope with heterogeneous platforms and execution environments;

• Delivery– Developing techniques that lead to faster delivery of software;

• Trust– Developing techniques that demonstrate that software can be

trusted by its users.

Page 35: Introduction   Software engineering

Professional and ethical responsibility

• Software engineering involves wider responsibilities than simply the application of technical skills.

• Software engineers must behave in an honest and ethically responsible way if they are to be respected as professionals.

• Ethical behaviour is more than simply upholding the law.

Page 36: Introduction   Software engineering

Issues of professional responsibility

• Confidentiality – Engineers should normally respect the

confidentiality of their employers or clients irrespective of whether or not a formal confidentiality agreement has been signed.

• Competence – Engineers should not misrepresent their level

of competence. They should not knowingly accept work which is outwith their competence.

Page 37: Introduction   Software engineering

Issues of professional responsibility

• Intellectual property rights – Engineers should be aware of local laws governing the use of

intellectual property such as patents, copyright, etc. They should be careful to ensure that the intellectual property of employers and clients is protected.

• Computer misuse – Software engineers should not use their technical skills to

misuse other people’s computers. Computer misuse ranges from relatively trivial (game playing on an employer’s machine, say) to extremely serious (dissemination of viruses).

Page 38: Introduction   Software engineering

ACM/IEEE Code of Ethics• The professional societies in the US have

cooperated to produce a code of ethical practice.

• Members of these organisations sign up to the code of practice when they join.

• The Code contains eight Principles related to the behaviour of and decisions made by professional software engineers, including practitioners, educators, managers, supervisors and policy makers, as well as trainees and students of the profession.

Page 39: Introduction   Software engineering

Code of ethics - preamble

• Preamble– The short version of the code summarizes aspirations at a high

level of the abstraction; the clauses that are included in the full version give examples and details of how these aspirations change the way we act as software engineering professionals. Without the aspirations, the details can become legalistic and tedious; without the details, the aspirations can become high sounding but empty; together, the aspirations and the details form a cohesive code.

– 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:

Page 40: Introduction   Software engineering

Code of ethics - principles

• PUBLIC – Software engineers shall act consistently with the public interest.

• 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.

• PRODUCT – Software engineers shall ensure that their products and related

modifications meet the highest professional standards possible.

Page 41: Introduction   Software engineering

Code of ethics - principles

• JUDGMENT – Software engineers shall maintain integrity and independence in

their professional judgment.• MANAGEMENT

– Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.

• PROFESSION – Software engineers shall advance the integrity and reputation of

the profession consistent with the public interest.

Page 42: Introduction   Software engineering

Code of ethics - principles

• COLLEAGUES – Software engineers shall be fair to and

supportive of their colleagues.• 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.

Page 43: Introduction   Software engineering

Ethical dilemmas• Disagreement in principle with the policies

of senior management.• Your employer acts in an unethical way

and releases a safety-critical system without finishing the testing of the system.

• Participation in the development of military weapons systems or nuclear systems.

Page 44: Introduction   Software engineering

How Has Software Engineering Changed?

The Nature of the Change

• Before 1970s

– Single processors: mainframes

– Designed in one of two ways

• as a transformation: input was converted to output

• as a transaction: input determined which function should be performed

• After 1970s

– Run on multiple systems

– Perform multi-functions

Page 45: Introduction   Software engineering

How Has SE Changed?

Wasserman's Seven Key Factors1. Critically of time-to-market

2. Shifts in the economics of computing

3. Availability of powerful desktop computing

4. Extensive local- and wide-area networking

5. Availability and adoption of object-oriented technology

6. Graphical user interfaces

7. Unpredictability of the waterfall model of software development

Page 46: Introduction   Software engineering

How Has SE Changed?

Wasserman's Seven Key Factors (continued)The key factors that have changed the software development

Page 47: Introduction   Software engineering

How Has SE Changed?

Wasserman's Discipline of Software

Engineering• Abstractions

• Analysis and design methods and notations

• User interface prototyping

• Software architecture

• Software process

• Reuse

• Measurement

• Tools and integrated environments

Page 48: Introduction   Software engineering

How Has SE Changed?

Software Architecture• A system’s architecture describes the system in terms of a set of architectural

units and relationships between these units

• Architectural decomposition techniques

– Modular decomposition

– Data-oriented decomposition

– Event-driven decomposition

– Outside-in-design decomposition

– Object-oriented decomposition

Page 49: Introduction   Software engineering

How Has SE Changed?

Software Process

• Many variations

• Different types of software need different processes

– Enterprise-wide applications need a great deal of control

– Departmental applications can take advantage of rapid development

Page 50: Introduction   Software engineering

How Has SE Changed?

Software Reuse• Commonalities between applications may allow reusing artifacts from previous developments

– Improve productivity

– Reduce costs

• Potential concerns

– It may be faster to build a smaller application than searching for reusable components

– Generalized components take more time to build

– Must clarify who will be responsible for maintaining reusable components

– Generality vs specificity: always a conflict

Page 51: Introduction   Software engineering

Thank you!

Any Questions?

Page 52: Introduction   Software engineering

REFERENCES• Henry Petroski, Design Paradigms: Case

Histories of Error and Judgement in Engineering