CS 1212 Lecture 1

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 17

CS 1212 SOFTWARE ENGINEERING

Lecture 1 – Introduction to Software Engineering

Yahya Hamad Sheikh, PhD


yahya.sheikh@suza.ac.tz

The State University of Zanzibar,


Department of Computer Science and Information Technology
www.suza.ac.tz
WHAT IS SOFTWARE

• Software is a set of computer programs and associated


documentation
• Computer program is a set of instructions that tells a
computer or electronic device what tasks to perform.
• Software products may be developed for a particular
customer (custom products) or for general market (generic
products)
CUSTOM VS GENERIC SOFTWARE

• Generic software is an off-the-shelf product designed for many


consumers and can meet many clients’ general requirements.
An example of generic software is a Microsoft Word.
• Custom software is a bespoke (custom-made) design
developed to meet one client’s specific needs, based on the
budget and requirements predefined by them. An example of
custom software is a Student Complaints Management System
for SUZA.
WHAT IS SOFTWARE ENGINEERING?

• Software engineering is the application of scientific


principles to the design and creation of software.
• The field uses a systematic approach to collect and analyze
business requirements in order to design, build, and test
software applications to satisfy those business
requirements.
HISTORY OF SOFTWARE ENGINEERING

• When computing began in the late 1950s, software engineering was a relatively
undefined discipline.
• The software engineering field became a discipline in the 1960s and evolved as
new technologies were developed and the approach to software development
became more scientific, transforming from ad hoc programming towards more
formal and standardized methods.
• Initially, the creation of software lacked a formal development process, making it
difficult to meet the rapidly increasing demand for computing resources and
complex software.
• This led to what is known as the “Software Crisis” which began in the mid-1960s
and lasted until the mid-1980s.
HISTORY OF SOFTWARE ENGINEERING

• During the ‘Software Crisis’ period, software development often ran over budget,
behind schedule, and consisted of unmanageable, buggy code.
• The solution to the “Software Crisis” involved transforming unorganized coding efforts
into an established engineering discipline.
• The mid 1980s also saw a rise in the growth of computer-aided software engineering or
CASE which also helped to relieve the software crisis.
• CASE tools can be divided into six categories: business analysis and modeling,
development tools such as debugging environments, verification and validation tools,
configuration management, metrics and measurement, and project management.
• Today, the development process is typically guided by the Software Development
Lifecycle or SDLC, which identifies the steps needed to develop quality software.
SOFTWARE ENGINEERS VS DEVELOPERS

• The term “software engineer” is often used interchangeably with


software developer but there are subtle differences.
• Software engineers are also developers, but the term “software
developer” is usually deemed narrower in scope than that of a
software engineer.
• A software engineer’s knowledge is usually broader. They take a
systematic, big picture approach in their thinking to software
development whereas developers may have more creative
approaches.
SOFTWARE ENGINEERS VS DEVELOPERS

• Both software engineers and software developers have specialized


knowledge, but software engineers use that knowledge to build entire
systems whereas software developers use their knowledge to write code to
implement specific functionality within a system.
• Software engineers are often employed on larger scale projects, and they are
focused on the broad structure rather than solving an immediate problem.
• Software engineers are tasked with designing, building, and maintaining
software systems. Responsibilities include writing and testing code, and
consulting with stakeholders such as clients, third party software vendors,
security specialists, and other team members.
PROFESSIONAL AND ETHICAL RESPONSIBILITIES OF
SOFTWARE ENGINEERS

• Software Engineers, and even developers, need to maintain professional and ethical
responsibilities all the time. These include:
• Confidentiality: respect confidentiality of employer, customer, and colleagues even if
there is no formal confidentiality agreement
• Competence: do not accept a work which you know is beyond your competence
• Intellectual property rights: be aware of the local laws governing the use of
intellectual property such as patents, copyright, etc. Take effort to ensure intellectual
property of employer and customer are protected.
• Computer misuse: do not use your technical skills to misuse other people computers.
Computer misuse range from relatively trivial (e.g. playing games on employers
computer) to extremely serious (e.g. dissemination of viruses).
KEY ATTRIBUTES OF GOOD SOFTWARE

• Software Quality Attributes are the benchmarks that describe system’s intended
behavior within the environment for which it was built.
• They provide the means for measuring the fitness and suitability of a product.
• Software architecture has a profound affect on most qualities in one way or another,
and software quality attributes affect architecture.
• Thus, identifying desired system qualities before a system is built allows system
designer to mold a solution (starting with its architecture) to match the desired
needs of the system within the context of constraints (available resources, interface
with legacy systems, etc.).
• When a designer understands the desired qualities before a system is built, then the
likelihood of selecting or creating the right architecture is improved.
CATEGORIES OF SOFTWARE QUALITIES

• Software qualities can be categorized into four parts:


• Runtime qualities: those which can be measured as the system
executes.
• Non-runtime qualities: those which cannot be measured as the
system executes.
• Business qualities: those which influence other quality attributes.
• Architecture qualities: quality attributes specific to the
architecture itself.
RUNTIME QUALITIES

• Functionality: the ability of the system to do the work for which it was intended.
• Performance: the response time, resource utilization, and throughput behavior of the
system. This should not be confused with human performance or system delivery time.
• Security: a measure of system’s ability to resist unauthorized attempts at usage or
behavior modification, while still providing service to legitimate users.
• Availability: the measure of time that the system is up and running correctly; the length
of time between failures and the length of time needed to resume operation after a
failure.
• Usability: the ease of use and of training the end users of the system. Sub qualities
include learnability, efficiency, helpfulness, and control.
• Interoperability: the ability to cooperate with other software at runtime.
NON-RUNTIME QUALITIES

• Modifiability: the ease with which a software system can accommodate


changes
• Portability: the ability of a system to run under different computing
environments, both hardware and software.
• Reusability: the degree to which existing applications can be reused in new
applications.
• Integrability: the ability to make the separately developed components of the
system work correctly together.
• Testability: the ease with which software can be made to demonstrate its
faults
BUSINESS QUALITIES

• Cost and Schedule: the cost of the system with respect to time to market,
expected project lifetime, and utilization of legacy and COTS systems.

• Marketability: the use of the system with respect to market competition.

• Appropriateness for Organization: availability of the human input,


allocation of expertise, and alignment of team with the software system
structure.
ARCHITECTURE QUALITIES

• Conceptual Integrity: the integrity of the overall structure


that is composed from a number of small architectural
structures.

• Correctness: accountability for satisfying all requirements


of the system
CHALLENGES FACING SOFTWARE ENGINEERING

• The major challenges facing software engineering today include:


• The legacy challenge: the challenge of maintaining and updating
including integration of software developed in the past without excessive
cost and by ways in which business services continue to be delivered
• The heterogeneity challenge: the challenge of developing techniques for
developing dependable software flexible enough to cope with
heterogeneous combinations of software and hardware
• The delivery challenge: the challenge of shortening deliver times for
large software without compromising systems quality
END OF LECTURE


You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy