CS 1212 Lecture 1
CS 1212 Lecture 1
CS 1212 Lecture 1
• 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
• 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
• 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
• Cost and Schedule: the cost of the system with respect to time to market,
expected project lifetime, and utilization of legacy and COTS systems.