Adaptive Software Engineering - Introduction to Software

Introduction to Software Engineering

Aim and Objectives

  • Aim: To familiarize students with the basic concept and nature of software.

  • Instructional Objectives:

    • Demonstrate characteristics of software.

    • Describe failure curves for hardware and software.

    • List out the failures for hardware and software.

    • Describe the importance of software engineering.

  • Learning Outcomes:

    • Define software.

    • Describe the importance of Software Engineering and Software Application Domains.

    • Summarize Software and New Challenges.

Agenda

  • Introduction

  • Characteristics of Software

  • Failure curves for hardware

  • Failure curves for Software

  • Software Application Domains

  • Importance of Software Engineering

  • Software - New Challenges

  • Unique Nature of WebApps

Introduction to Software

Software is defined as:

  1. Instructions (computer programs) that, when executed, provide desired features, function, and performance.

  2. Data structures that enable the programs to adequately manipulate information.

  3. Documentation that describes the operation and use of the programs.

Characteristics of Software

  • Software is developed or engineered, not manufactured in the classical sense.

  • Software doesn't "wear out."

    • It remains as fresh as the day it was installed, regardless of how many times it's used.

  • Most software continues to be custom-built, though there's a move toward component-based construction.

Failure Curves for Hardware

  • The relationship, often called the "bathtub curve," indicates the typical failure rate of individual components within a large batch.

  • Early failure rates are attributed to:

    • Poor or unrefined initial design. Correcting this results in much lower failure rates for successive batches of the product.

    • Manufacturing defects, such as defects in the product brought about by poor assembly/materials during production.

  • Both types of failure can be corrected, which leads to the failure rate dropping to a steady-state level for some period of time.

  • As time passes, however, the failure rates rise again as hardware components suffer from the cumulative effects of dust, vibration, abuse, temperature extremes, and many other environmental maladies.

  • The hardware begins to wear out.

Failure Curves for Software

  • Wear vs. Deterioration (Worse)

  • Undiscovered defects in the first engineered version of the software cause high failure rates early in the life of a program.

  • However, these are corrected (hopefully without introducing other errors), and the curve flattens.

  • Software doesn't wear out but deteriorates with maintenance.

Software Failure

  • Defect: Bugs introduced by programmers in the code due to programmatic mistakes.

  • Failure: When these defects are executed during testing, it results in software failure.

  • Difference between hardware and software failure curves:

    • Hardware failure is random and increases at the last stage.

    • Software failure is systematic and does not have an increasing failure rate.

Nature of Software

  • Software as a Product:

    • Transforms information, produces, manages, acquires, modifies, displays, or transmits information.

    • Delivers computing potential of hardware and networks.

  • Software as a vehicle for delivering a product:

    • Controls other programs (operating system).

    • Effects communications (networking software).

    • Helps build other software (software tools & environments).

Software Application Domains

  • System software: Operating systems (mac OS, GNU/Linux, Android, Microsoft Windows), computational science software, game engines, search engines, industrial automation, and software as a service applications.

  • Application software: Microsoft Word, spreadsheets, VLC media player, Firefox or Google Chrome, accounting applications, photo editor, mobile apps (video games, WhatsApp, etc.).

  • Engineering/scientific software: MATLAB, AUTOCAD, PSPICE, ORCAD, etc.

  • Embedded software: Motion detection systems in security cameras, traffic control systems in traffic lights.

  • Product-line software

  • WebApps (Web applications)

  • AI software

Importance of Software Engineering

  • Reduces complexity: Big software is complex, and software engineering decreases the complexity.

  • Minimizes software cost: Planning reduces unnecessary elements, lowering production costs.

  • Decreases time: Reduces the time needed to get the ultimate running code.

  • Handling big projects: Provides an approach to handle large projects effectively.

  • Reliable software: Ensures the delivered software works for its given time.

  • Effectiveness: Software is more effective when made according to standards.

  • Productivity: Programmers improve code to maintain standards.

Legacy of Software: Why Must It Change?

  • Software must be adapted to meet the needs of new computing environments or technology.

  • Software must be enhanced to implement new business requirements.

  • Software must be extended to make it interoperable with other more modern systems or databases.

  • Software must be re-architected to make it viable within a network environment.

Software - New Challenges

  • Open-world computing: Pervasive, distributed computing.

    • Pervasive computing is associated with embedding microprocessors in day-to-day objects.

  • Ubiquitous computing: Wireless networks; existing everywhere.

  • Net sourcing: The Web as a computing engine, requiring target marketing.

  • Open source: "Free" source code open to the computing community.

  • Other challenges include:

    • Data mining

    • Grid/Cloud computing

    • Cognitive machines

    • Software for nanotechnologies

Web Apps

  • Modern Web Apps are more than hypertext files with pictures.

  • They use tools like XML and Java for interactive computing.

  • Web Apps may be standalone or integrated with corporate databases and business applications.

  • Semantic web technologies (Web 3.0) have evolved into sophisticated applications using semantic databases with web linking, flexible data representation, and APIs.

  • The aesthetic nature of the content remains important.

Unique Nature of Web Apps

  • Network intensiveness: Web Apps reside on a network and serve diverse clients.

  • Concurrency: Many users may access the Web App at one time.

  • Unpredictable load: User numbers may vary greatly.

  • Performance: Users may leave if they wait too long.

  • Availability: Users often demand "24x7x365" access.

  • Data-driven: They use hypermedia to present various content.

  • Content-sensitive: Quality and aesthetics of content are important.

  • Continuous evolution: Unlike conventional software, Web applications evolve continuously.

  • Immediacy: Web Apps have a quick time to market.

  • Security: It is difficult to limit end-user access.

  • Aesthetics: Look and feel are crucial.