Software Engineering Fundamentals: Models, Methodologies, and Life Cycles
Software Engineering: Key Concepts
- Definition of Software: The set of software programs, procedures, rules, documentation, and associated data as part of the operations of a computer system.
- Definition of Software Engineering: The application of a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software, as well as the investigation of such approaches.
- Definition of a System: A set of interrelated things contributing to a given objective.
- Concept of a Model: A representation of a system in an understandable language (modeling language).
- Concept of Methodological Principles: Elements or axioms acquired through knowledge that define the characteristics a model must have to be an adequate representation of a system.
- Concept of Heuristics: A set of empirical rules to be applied to produce models that conform to the principles.
- Concept of Tools: Tools for the representation of models, providing automatic or semi-automatic support for the application of methods.
- Concept of a Method: A sequence of activities to obtain a product (model), describing how to use the tools and heuristics.
- Life Cycle Thinking: The set of phases or stages, processes, and activities required to carry out the software production process.
- Concept of Methodology: A set of philosophies, phases, procedures, rules, techniques, tools, documentation, and training issues for developers of information systems.
Software Development Models
Models (put up here life cycle)
- Waterfall Model: Each phase begins when the previous objectives have been completed. It helps prevent writing dates and costs and is reviewed after each phase. The trouble is that it does not reflect the real process of construction.
- Prototype Model: A quick design that focuses on a representation of those aspects of the software that will be visible to the customer. This leads to the construction of a prototype that the client evaluates.
- Evolutionary Model: Software development is conducted until the final product is reached.
- Incremental Model: Lines are ever-increasing for software development; the first increase is often the core product. It is similar to the prototype model.
Important Aspects of Software Engineering
- Software Process Models: Research and application of life cycles and methodologies.
- Specification of System Requirements: Systems must be studied where these integrate software to ensure that this will contribute to achieving the overall objectives of the system.
- Software Requirement Specification: Specify the functions, requirements, and what the production process must fulfill.
- Software Design: There are two stages: architectural design, which carries out an overview of the software, and detailed design, which is more specific, with a more modular approach.
- Implementation: Includes the development of the program code and the creation of persistent data structures.
- Verification and Validation: Validation is intended to ensure correctness; verification aims to ensure that it meets the agreed-upon requirements.
- Maintenance: Attempts to debug software products, prevent, ameliorate, or adapt to changes.
- Management of the Development Process: Everything about the implementation, organization, and control.
- Software Evaluation: It is necessary to establish metrics for evaluating the qualities of software products and software processes.
- Control and Quality Improvement: Present in a transversal way along any activity of software engineering.
Software Life Cycles: Definition, Functions, and Advantages
The main functions of a life cycle are:
- Determine the order of the stages and processes involved in software development and the evolution process.
- Establish transition criteria to move from one phase to the next.
Advantages:
- Represents a guide for development staff, marking the tasks to be performed at any time.
- Ensures a phased development with a systematic approach, allowing for the detection of defects.
- Controls exceeding deadlines and excessive costs.
- Documentation is done simultaneously, formally, and standardized with development, facilitating internal communication among the development team and with users.
- Minimizes the need to redo work and fine-tune problems.
Software Methodologies
Development methodologies are developed from the framework defined by one or several life cycles. First, a life cycle is established, and then the methodology, which is the set of steps and procedures to be followed for software development. It is the way to conduct a proper life cycle.
Different Methodologies
- Conventional Methodology (1950-1970): There was a project manager who tried to control the software creation process, but there was no way to control the cost or the state, and therefore the final results were unpredictable.
- Structured Methodology (1970-): Transitioned from the construction of programs in a way that follows traditional engineering methods, laying the groundwork for systematic development.
- Object-Oriented Methodology (1985-): Based on the concept of an object, so that all the techniques, procedures, and tools used in the methodology become structured to think and develop under the object-oriented paradigm.
- Component-Oriented Methodology (2000-): Based on the concept of a component. Although this paradigm is not widely used despite existing methodologies, it is not far off from being permanently implemented.
Definition and Objectives of Software Methodologies
Objectives
- Proportionally develop a systematic approach that can track progress.
- Build an information system development team within an appropriate time and at an acceptable cost.
- Provide a way of working that satisfies everyone who makes up the information system and enables them to perform tasks following the same procedures.
- Help to identify any changes that are needed in the development process.
The methodology performs a decomposition of each phase to the level of elementary tasks or activities. For each task, a procedure is identified that defines how to execute it, and it is the vehicle of communication between users and developers, which upon completion will give the final product. To apply a procedure, different tactics can be used. For the realization of a tactic, we rely on tools that automate its application to a greater or lesser extent.
Desirable Characteristics of a Software Methodology
- Existence of predefined rules.
- Full coverage of the development cycle.
- Intermediate checks.
- Link to management processes.
- Effective communication.
- Use on a wide range of projects.
- Easy training.
- Tools.
- The methodology should include activities that best support the development process.
- Support.
- Support for software reuse.