Software Development: Evolution, Types, and Processes
Software Development
Project
A project involves a set of interrelated activities with a defined beginning and end. It utilizes limited resources to achieve a desired goal. The two basic elements are activities and resources.
Activities
Activities are the tasks performed to achieve a preset order. Examples include collecting information, making diagnoses, designing procedures, writing program manuals, etc. A fundamental aspect of any project is the order of activities. Determining the logical sequence establishes the method, time, and cost of each operation.
Resources
Resources enable the execution of each task. These include human resources, hardware, databases, software, storage, energy, services, capital, personnel, information, money, and time. The primary purpose of developing a project is to produce a program schedule where limited resources are allocated optimally to each activity.
Software Evolution
First Era (Until the 1960s)
- Batch data processing
- Personalized customer software
- Hardware-centric development
- Minimal documentation
- Designer and user were often the same person
Second Era (Until the Late 1970s)
- Multi-use systems
- Real-time systems
- First-generation database management systems
- Software distribution across multiple domains
- Difficult software maintenance, leading to the first software crisis
Third Era (Late 1980s)
- Distributed systems
- Network expansion demanding software development improvements
- Microprocessor exploitation
- High-performance, low-cost hardware
- Impact on consumers
Fourth Era (Until Today)
- Hardware breakthroughs and application advancements
- High-power desktop systems
- Object-oriented technology
- Expert systems and artificial neural networks
- Parallel computation
Software Reuse
Initial software reuse involved libraries of routines. Object-oriented technologies (programming modules) enabled adding new functionality.
Software Application Categories
- Information content
- Information determination
Software Application Types
- System software
- Real-time software
- Management software
- Engineering and science software
- Embedded software
System Software
System software interacts with hardware at a basic level, performing concurrent tasks, managing, and sharing resources. Examples: operating systems, drivers, communication routines, compilers.
Real-Time Software
Real-time software analyzes and controls real-world events, providing responses and making decisions in real time. Examples: security systems, data collectors, industrial process controllers.
Management Software
Management software manages databases with economic and business information to support decision-making. Examples: banking and payment systems.
Engineering and Science Software
This software manages and processes digital data used in engineering and scientific fields.
Embedded Software
Embedded software has limited features for specific tasks, built into various domestic and industrial devices. Examples: GPS devices, microwaves.
Classical Artificial Intelligence
Uses non-numerical algorithms to solve complex problems. Includes rule-based expert systems and pattern recognition systems.
Computational Intelligence
An alternative approach to computing algorithms, reflecting human decision-making in uncertain environments.
- Neural networks
- Fuzzy logic
- Evolutionary computing
- Machine learning
- Probability computing
Artificial Neural Networks
Simulate the human brain’s structure and processes, learning from past experiences to make decisions.
Fuzzy Logic
Tolerates imprecision and partial truths, creating robust and low-cost solutions.
Essential Software Attributes
- Maintainability: Adaptability to meet new needs.
- Reliability: Prevents physical or economic damage from system failure.
- Efficiency: Efficient resource utilization.
- Usability: Ease of use with an appropriate user interface and documentation.
Software Process Models
A simplified description of the software development process from a particular perspective.
- Workflow Model: Represents the sequence of activities, inputs, outputs, and dependencies.
- Data Flow Model: Represents data transformations by activities, which may be human or computer-based.
- Role/Action Model: Represents the roles of people involved and their responsibilities.
General Models of Software Process
Abstractions explaining different approaches to software development.
Waterfall Model
The first software development process model, derived from other engineering processes. Also known as the software life cycle, it’s called “cascade” due to the flow from one phase to another.