1.1 Introduction to Software
Software Engineering : The term is made of two words, software and engineering. Software is more than just a program code. A program is an executable code, which serves some computational purpose. Software is considered to be collection of executable programming code, associated libraries and documentations. Software, when made for a specific requirement is called software product.
Engineering on the other hand, is all about developing products, using well-defined, scientific principles and methods.
Software engineering is an engineering branch associated with development of software product using well-defined scientific principles, methods and procedures. The outcome of software engineering is an efficient and reliable software product.
Software Engineering Body of Knowledge
The Software Engineering Body of Knowledge (SWEBOK) is an international standard ISO/IEC TR 19759:2005[1] specifying a guide to the generally accepted Software Engineering Body of Knowledge.
The Guide to the Software Engineering Body of Knowledge (SWEBOK Guide) has been created through cooperation among several professional bodies and members of industry and is published by the IEEE Computer Society (IEEE).
1.2 Program vs. Software
Software is a broad term that covers the programs and components that it required to run. Software consists the files, whereas a program can itself be a file. Along with these differences, there are various other comparisons between both terms.
Aspect | Program | Software |
---|---|---|
Definition | A set of instructions for a specific task. | A collection of programs, data, and documentation. |
Scope | Single executable file. | Encompasses multiple functionalities and programs. |
Interactivity | May require user interaction. | Provides a comprehensive and interactive user experience. |
Examples | A calculator application. | Microsoft Office suite (Word, Excel, PowerPoint). |
Installation | Copying a single executable file. | May include multiple files, configurations, and dependencies. |
Updates | Manual updates or none. | May provide automatic updates. |
Usage | Serves a specific function. | Caters to diverse needs with various tools and utilities. |
Complexity | Less complex, often standalone. | More complex, involving code, data, and user interfaces. |
1.3 Software Components
User Interface (UI)
- Graphical User Interface (GUI): The visual elements through which users interact with the software.
- Command Line Interface (CLI): Text-based interface where users enter commands to communicate with the software.
Application Logic
- Algorithms and Logic: The core functionality of the software, implemented through algorithms and logical operations.
- Data Processing: Handling and manipulation of data, often involving calculations or transformations.
Data Storage
- Databases: Systems for storing, retrieving, and managing data efficiently.
- File Systems: Methods for organizing and storing data on disk storage.
Networking
- Communication Protocols: Standards for data exchange between software components or systems.
- Network Libraries: Code libraries for handling network communication.
Security Components
- Authentication: Verifying the identity of users or systems.
- Encryption: Protecting data by converting it into a secure format that requires a key for decryption.
Middleware
- Message Queues: Facilitate communication between different parts of the software.
- Remote Procedure Call (RPC): Allows a program to cause a procedure (subroutine) to execute in another address space.
Utilities
- System Utilities: Programs that provide essential functionality for managing the computer system.
- Development Utilities: Tools used during the software development process.
Libraries
- Code Libraries: Reusable code modules that provide common functions or features.
- Class Libraries: Collections of pre-written classes that can be used in software development.
Runtime Environment
- Interpreter/Compiler: Translates high-level code into machine code or an intermediate form.
- Runtime Libraries: Collections of software routines that provide low-level programming services.
Configuration Files
- Settings and Configuration: Files that store customizable parameters, options, or settings for the software.
Logging and Error Handling
- Logging Mechanisms: Recording events and activities for analysis or debugging.
- Error Handling Components: Code to manage and report errors during execution.
Updates and Maintenance
- Patch Management: Systems for applying updates, patches, or fixes to the software.
- Version Control: Tools to manage different versions of the software during development and deployment.
1.4 Characteristics of Software
1.5 Types of Software
Application Software
The most common type of software, application software is a computer software package that performs a specific function for a user, or in some cases, for another application. An application can be self-contained or a group of programs that run the application for the user.
- Examples of modern applications include office suites, graphics software, databases and database management programs, web browsers, word processors, software development tools, image editors, and communication platforms.
System Software
These software programs are designed to run a computer's application programs and hardware. System software coordinates the activities and functions of the hardware and software. It controls the operations of the computer hardware and provides an environment or platform for all the other types of software to work in.
- The OS is the best example of system software; it manages all the other computer programs.
- Other examples of system software include the firmware, computer language translators, and system utilities.
Driver Software
Also known as device drivers, this software is often considered a type of system software. Device drivers control the devices and peripherals connected to a computer, enabling them to perform their specific tasks.
- Every device connected to a computer needs at least one device driver to function.
- Examples include software that comes with nonstandard hardware, such as special game controllers, and software that enables standard hardware like USB storage devices, keyboards, headphones, and printers.
Middleware
The term middleware describes software that mediates between application and system software or between two different kinds of application software.
- Middleware enables communication between applications, such as Microsoft Windows talking to Excel and Word.
- It is used to send remote work requests between computers with different operating systems and enables newer applications to work with legacy ones.
Programming Software
Computer programmers use programming software to write code. Programming software and programming tools enable developers to develop, write, test, and debug other software programs.
- Examples of programming software include assemblers, compilers, debuggers, and interpreters.
1.6 Generic View of Software Engineering
1. Definition Phase:
The definition phase focuses on “what”. That is, during definition, the software engineer attempts to identify what information is to be processed, what function and performance are desired, what system behavior can be expected, what interfaces are to be established, what design constraints exist, and what validation criteria are required to define a successful system. During this, three major tasks will occur in some form: system or information engineering, software project planning and requirements analysis.
2. Development Phase:
The development phase focuses on “how”. That is, during development a software engineer attempts to define how data are to be structured, how function is to be implemented within a software architecture, how interfaces are to be characterized, how the design will be translated into a programming language, and how testing will be performed. During this, three specific technical tasks should always occur; software design, code generation, and software testing.
3. Support Phase:
The support phase focuses on “change” associated with error correction, adaptations required as the software’s environment evolves, and changes due to enhancements brought about by changing customer requirements. Four types of change are encountered during the support phase:
Correction. Even with the best quality assurance activities, it is likely that the customer will uncover defects in the software. Corrective maintenance changes the software to correct defects. Adaptation. Over time, the original environment (e.g., CPU, operating system, business rules, external product characteristics) for which the software was developed is likely to change. Adaptive maintenance results in modification to the software to accommodate changes to its external environment.
Enhancement. As software is used, the customer/user will recognize additional functions that will provide benefit. Perfective maintenance extends the software beyond its original functional requirements.
Prevention. Computer software deteriorates due to change, and because of this, preventive maintenance, often called software reengineering, must be conducted to enable the software to serve the needs of its end users. In essence, preventive maintenance makes changes to computer programs so that they can be more easily corrected, adapted, and enhanced.
1.7 Software Process and Software Process Model
The term software specifies to the set of computer programs, procedures and associated documents (Flowcharts, manuals, etc.) that describe the program and how they are to be used.
A software process is the set of activities and associated outcome that produce a software product. Software engineers mostly carry out these activities. These are four key process activities, which are common to all software processes. These activities are:
Software specifications: The functionality of the software and constraints on its operation must be defined.
Software development: The software to meet the requirement must be produced.
Software validation: The software must be validated to ensure that it does what the customer wants.
Software evolution: The software must evolve to meet changing client needs.
The Software Process Model
A software process model is a specified definition of a software process, which is presented from a particular perspective. Models, by their nature, are a simplification, so a software process model is an abstraction of the actual process, which is being described.
Some examples of the types of software process models that may be produced are:
A workflow model: This shows the series of activities in the process along with their inputs, outputs and dependencies. The activities in this model perform human actions.
3. A role/action model: This means the roles of the people involved in the software process and the activities for which they are responsible.
There are several various general models or paradigms of software development:
The waterfall approach: This takes the above activities and produces them as separate process phases such as requirements specification, software design, implementation, testing, and so on. After each stage is defined, it is "signed off" and development goes onto the following stage.
Evolutionary development: This method interleaves the activities of specification, development, and validation. An initial system is rapidly developed from a very abstract specification.
Formal transformation: This method is based on producing a formal mathematical system specification and transforming this specification, using mathematical methods to a program. These transformations are 'correctness preserving.' This means that you can be sure that the developed programs meet its specification.
System assembly from reusable components: This method assumes the parts of the system already exist. The system development process target on integrating these parts rather than developing them from scratch.
Programs vs Software Comparison
Point | Program | Software |
---|---|---|
Definition | A set of instructions performing a specific task. | A collection of programs, data, and documentation. |
Scope | Single executable file. | Encompasses multiple functionalities and programs. |
Interactivity | May require user interaction. | Provides a comprehensive and interactive user experience. |
Examples | A calculator application. | Microsoft Office suite (Word, Excel, PowerPoint). |
Installation | Copying a single executable file. | May include multiple files, configurations, and dependencies. |
Updates | N/A | Provides a mechanism for automatic updates. |
Usage | Serves a specific function. | Caters to diverse needs with various tools and utilities. |
Complexity | Less complex, often standalone. | More complex, involving code, data, and user interfaces. |
Software Process Framework
A process framework establishes the foundation for a complete software process by identifying a small number of framework activities that are applicable to all software projects, regardless of size or complexity. It also includes a set of umbrella activities that are applicable across the entire software process.
Some most applicable framework activities are described below
Elements of Software Process
They are different elements of software process.
1. Communication: This activity involves heavy communication with customers and other stakeholders in order to gather requirements and other related activities.
2. Planning: Here a plan to be followed will be created which will describe the technical tasks to be conducted, risks, required resources, work schedule etc.
3. Modeling: A model will be created to better understand the requirements and design to achieve these requirements.
4. Construction: Here the code will be generated and tested.
Here, a complete or partially complete version of the software is represented to the customers to evaluate and they give feedbacks based on the evaluation.
Changing Nature of Software
The nature of software has changed a lot over the years.
1.System software: Infrastructure software come under this category like compilers, operating systems, editors, drivers, etc. Basically system software is a collection of programs to provide service to other programs.
2. Real time software: These software are used to monitor, control and analyze real world events as they occur. An example may be software required for weather forecasting. Such software will gather and process the status of temperature, humidity and other environmental parameters to forcast the weather.
3. Embedded software: This type of software is placed in “Read-Only- Memory (ROM)”of the product and control the various functions of the product. The product could be an aircraft, automobile, security system, signalling system, control unit of power plants, etc. The embedded software handles hardware components and is also termed as intelligent software
4. Business software : This is the largest application area. The software designed to process business applications is called business software. Business software could be payroll, file monitoring system, employee management, account management. It may also be a data warehousing tool which helps us to take decisions based on available data. Management information system, enterprise resource planning (ERP) and such other software are popular examples of business software.
5. Personal computer software :The software used in personal computers are covered in this category. Examples are word processors, computer graphics, multimedia and animating tools, database management, computer games etc. This is a very upcoming area and many big organisations are concentrating their effort here due to large customer base.
6. Artificial intelligence software: Artificial Intelligence software makes use of non numerical algorithms to solve complex problems that are not amenable to computation or straight forward analysis. Examples are expert systems, artificial neural network,signal processing software etc
7. Web based software: The software related to web applications come under this category. Examples are HTML, Java, Perl, DHTML etc