Introduction to Software and Software
Overview
This unit provides a foundational understanding of software, its types, and the importance of software engineering. It addresses the challenges faced in software development, known as the software crisis, and dispels common myths surrounding the field. The unit also outlines the software development process, commonly referred to as the Software Development Life Cycle (SDLC), and introduces key process models such as Waterfall and evolutionary models.
Learning Objectives
Upon completion of this unit, you should be able to:
1. Describe the term software and its types.
2. Define Software Engineering and explain its significance in software development.
3. Illustrate the phases involved in the Software Development Life Cycle (SDLC).
4. Describe generic process models of software development.
Key Terms
- Software: A set of instructions along with associated documentation and configuration data used to acquire inputs and manipulate them to produce the desired output as determined by the user.
- Software Engineering: The application of a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software, as well as the study of these approaches.
- Software Product: Software systems delivered to a customer, accompanied by documentation that describes installation and usage.
- *SDLC (Software Development Life Cycle): A combination of various activities involved in the development of software.
- Process: A-framework for a set of key process areas essential for the effective delivery of software engineering technology.
Learning Activities
Activity 1 - Software
Introduction
This activity covers the definition of software, its types and classes, the software crisis, and common software myths.
What is Software?
Software encompasses not only the programs but also all associated documentation and configuration data necessary for operation. According to Agarwal et al., software is a set of instructions that manipulates inputs to produce desired outputs based on user-defined functions and performance. Key components of software include:
- Instructions: Computer programs that provide specified functions and performance when executed.
- Configuration Files: Used to set up programs and manage data structures for adequate information manipulation.
- System Documentation: Describes the system's structure.
- User Documentation: Explains how to use the programs and system.
Software Crisis
Software projects often fail to meet expectations regarding time, budget, and quality due to various factors:
- Techniques suitable for small systems are ineffective for larger projects.
- Major projects frequently experience significant delays and cost overruns.
- Developed software can be unreliable, perform poorly, and be difficult to maintain.
These issues contribute to what is known as the software crisis, highlighting persistent problems encountered during software development.
Problems and Causes in Software Development
Problems Encountered
Software development faces several significant challenges, including:
1. Inaccurate Estimates: Schedule and cost estimates are often grossly inaccurate.
2. Productivity Issues: The productivity of software professionals has not kept pace with the growing demand for their services.
3. Quality Concerns: The quality of software is sometimes inadequate.
4. Evaluation Difficulties: Without solid indications of productivity, evaluating the efficiency of new tools, methods, or standards becomes problematic.
5. Poor Communication: Communication between customers and software developers is often lacking.
6. Maintenance Overheads: Software maintenance tasks consume the majority of software budgets.
Causes of Problems
The underlying causes of these issues include:
1. Reliance on Historical Data: Many developers use historical data, which can lead to poor software quality.
2. Scheduling Delays: Delays in any process or stage (analysis, design, coding, testing) create mismatches between scheduling and actual timing.
3. Communication Breakdown: Misunderstandings about the unique challenges of software development can lead to communication issues among managers, developers, and support staff.
4. Resistance to Change: Software professionals may resist changes in processes or tools, especially when new ideas are introduced.
Software Crisis from the Programmer’s Perspective
From the perspective of programmers, several issues arise:
- Compatibility Problems: Difficulty in ensuring that software works across different platforms.
- Portability Challenges: Issues with moving software between different environments.
- Documentation Deficiencies: Lack of adequate documentation hampers understanding and maintenance.
- Piracy Concerns: Issues related to software piracy complicate the landscape.
- Coordination Difficulties: Challenges in coordinating work among different team members.
- Maintenance Issues: Proper maintenance of software can be overwhelming.
Software Crisis from the User’s Perspective
Users face their own set of challenges, including:
- High Costs: The expense associated with acquiring and maintaining software.
- Hardware Deterioration: Aging hardware can affect software performance.
- Lack of Specialization: Insufficient specialization in software development can lead to poor outcomes.
- Version Conflicts: Problems arising from different versions of the same software.
- User Experience Issues: Variability in user interface and experience.
- Bugs: Persistent software bugs that affect usability.
## Software Myths
Several myths contribute to the difficulties in software development, including:
1. Sufficiency of Standards: Believing existing standards and procedures are enough to guide software development.
2. Incomplete Objectives: Assuming that vague objectives are sufficient to start coding.
3. Adding Programmers to Catch Up: The misconception that adding more programmers can resolve delays.
4. Rushing to Code: The belief that coding must begin immediately, regardless of planning.
5. Flexibility in Changes: Assuming that continuous project requirement changes can be easily accommodated.
6. Quality Assessment: The idea that quality can only be assessed after the software is completed.
7. Competence Equals Capability: The belief that any competent engineer can write effective programs.
8. Testing Sufficiency: Thinking that a few test cases are enough to ensure software quality.
9. Documentation Neglect: The notion that documentation is unnecessary if the programmer understands the code.
10. Expectations of Modern Tools: Assuming that merely having modern tools guarantees effective software development.
Conclusion
To address the problems encountered during software development, an engineering approach must be applied consistently. This approach encompasses procedures for planning, development, quality control, validation, and maintenance, collectively termed "Software Engineering." By applying these principles, software development can be more structured and reliable, ultimately leading to better outcomes for both developers and users.
Activity 2 - What is Software Engineering
Introduction
This sub-unit introduces the concept of applying engineering principles to software development, which is the essence of "Software Engineering."
Definition
As defined by Pollice and IEEE, software engineering is:
>"The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches."
Key Criteria for Software Engineering
1. Well-defined Methodology: A structured approach to software development.
2. Predictable Milestones: Clear timelines for project phases.
3. Traceability: The ability to trace requirements through to implementation.
4. Documentation: Comprehensive records of the development process.
5. Maintainability: Ensures the software can be updated and improved over time.
Software engineering is concerned with both the development process and the final product. A balanced focus on both aspects is essential for successful outcomes.
## Software-Engineering Principles
Software-engineering principles emphasize the interplay between process and product:
- The correct process aids in producing a quality product.
- The nature of the desired product influences the choice of the process.
- Both aspects are crucial, and software engineers should utilize appropriate methods and specific techniques to ensure desired properties in both processes and products.
Software Product Characteristics
Software products delivered to customers come with documentation detailing installation and usage. Critical characteristics include:
- Usability: The software should be useful and enhance users' lives.
- Flexibility: Software should accommodate changes easily.
- Maintainability: It should be possible to evolve the software to meet changing needs.
- Dependability: Software must be reliable, secure, and safe to avoid potential harm.
- Efficiency: Software should use system resources judiciously.
Conclusion
To build effective systems, a well-defined development process is essential, involving clear phases, methods, techniques, and tools. Optimizing all software characteristics can be challenging, as some may conflict with others. As software becomes increasingly integral to society, the potential risks associated with software failures also rise.
Doomsday Scenario
Consider a scenario where a critical healthcare software system fails due to a code error, leading to incorrect dosages being administered to patients. This could result in severe health complications or fatalities, highlighting the importance of rigorous software engineering practices.
---
Activity 3 – Software Applications
Areas of Software Applications
Software applications can be categorized into eight areas for convenience:
1. System Software
This includes programs that help run the computer system and support other software. Examples are compilers, editors, utilities, operating systems, and device drivers.
2. Real-time Software
Real-time software interacts with a changing environment, collecting and processing data for immediate response. Key components include data gathering, analysis, control/output, and monitoring to ensure timely actions.
3. Embedded Software
Embedded software is designed to perform specific functions within hardware. It resides in Read-Only Memory (ROM) and is used in a wide range of products like cars, appliances, and industrial systems.
4. Businesss Software
Designed for processing business applications, this software includes systems for accounting, inventory management, and other operational tasks.
5. Personal Computer Software
This category encompasses applications like word processors, spreadsheets, multimedia tools, and personal finance software.
6. Artificial Intelligence Software
This type uses non-numerical algorithms to sol e complex problems that require specific analysis. Examples include expert systems and pattern recognition applications.
7. Web-based Software
Web-based software includes languages and tools used for web development, such as HTML, Java, and Perl.
8. Engineering and Scientific Software
These applications are tailored for specific engineering or scientific tasks, utilizing principles and formulas relevant to their fields.
Conclusion
Software is integral to many aspects of life, influencing commerce, culture, and daily activities. Through software engineering, complex software systems can be developed efficiently and with high quality, accommodating the needs of various applications.
Comments
Post a Comment