Personal notes on software development.
For Java technologies check my dedicated site

Pages

Contents:


  • Definitions (skip this section)
  • Bottom Line (summary of the previous section)
  • Software development methodologies/processes


Software Development Life Cycle

Wikipedia has a great article about this topic.

Definitions

NOTE: this section has a copy-paste of Wikipedia info! Its strongly recommended to skip to the "Bottom Line" section way down pass this section.

The area of Software engineering has a lot of terms and buzzwords that aren't always interpreted equally among authors generating confusion and controversy.
For this reason and due to the extend of the subject, it spans for a couple of articles on Wikipedia. Some examples are:


The article "Software development methodology" on wikipedia has the following definitions:
  • Software development methodology
    This concept can be used has a Noun or a Verb:
    - As a noun: is a framework that is used to structure, plan, and control the process of developing software - this includes the pre-definition of specific deliverables and artifacts that are created and completed by a project team to develop or maintain an application.
    There are a wide variety of such frameworks, each with its own recognized strengths and weaknesses. They are not necessarily suitable for use by all projects (depends on various technical, organizational, project and team considerations).
    Two examples (Noun) are: Rational Unified Process (RUP, since 1998, by IBM) and Agile Unified Process (AUP, since 2005, by Scott Ambler).

    As a verb: is an approach (used by organizations and project teams) to apply the software development methodology framework (noun).
    Some examples are:
       - Waterfall: a linear framework
       - Prototyping: an iterative framework;
       - Incremental: a combined linear-iterative framework;
       - Spiral: a combined linear-iterative framework;
       - Rapid application development (RAD): an iterative framework;
       - SCRUM;
       - Extreme Programming;

    The article also includes has "other methodologies" the following ones:
       - Object-oriented development methodologies, such as Grady Booch's object-oriented design (OOD), also known as object-oriented analysis and design (OOAD). The Booch model includes six diagrams: class, object, state transition, interaction, module, and process;
       - Top-down programming: evolved in the 1970s by IBM researcher Harlan Mills (and Niklaus Wirth) in developed structured programming.
       - Agile software development refers to a group of software development methodologies based on iterative development, where requirements and solutions evolve via collaboration between self-organizing cross-functional teams. The term was coined in the year 2001 when the Agile Manifesto was formulated.


  • Software development process (or "software development life cycle" or "software life cycle" or "software process" or even "methodologies"):
    A software development process is a framework imposed on the development of a software product. There are several models for such processes, each describing approaches to a variety of tasks or activities that take place during the process.
    A decades-long goal has been to find repeatable (try to systematize), predictable processes that improve productivity and quality. Without project management, software projects can easily be delivered late or over budget. But with large numbers of software projects not meeting their expectations in terms of functionality, cost, or delivery schedule, effective project management appears to be lacking.

    The "software development process" article in Wikipedia, says this term is also known has "software development life cycle". But, for some authors, "software development process" is often considered a subset of "systems development life cycle" (i.e. some people consider a "lifecycle model" a more general term and a "software development process" a more specific term).
    For example, there are many specific "software development processes" that 'fit' the "spiral lifecycle" model.

    This article also uses the term "software development models" to describe the "methodologies" we saw before:
       - Waterfall model;
       - Spiral model;
       - Iterative and incremental development;
       - Agile development (for example: XP and SCRUM);
       - TDD (Test Driven Development);
       - etc.

    The article expands, between others, with:
    The waterfall model shows a process, where developers are to follow these phases in order:
       - Requirements specification (Requirements analysis);
       - Software Design;
       - Integration;
       - Testing (or Validation);
       - Deployment (or Installation);
       - Maintenance;

    This takes us to another degree of detail: a process has a formal number of activities and steps to follow.

  • Software development process: activities/phases and steps
    A process has a formal number of activities and steps to follow.
    The side bar of the Wikipedia article "software development process" enumerates this activities and steps as:
       - Requirements;
       - Specification;
       - Architecture;
       - Design;
       - Implementation;
       - Testing;
       - Deployment
       - Maintenance;

    The body of the article describes the following (more general) activities:
    1. Planning
       - Extracting the requirements (requirements analysis): customers typically have an abstract idea of what they want as an end result, but not what software should do. Incomplete, ambiguous, or even contradictory requirements are recognized. Frequently demonstrating live code may help reduce the risk that the requirements are incorrect.
       - Analysis: Once the general requirements are gathered from the client, an analysis of the scope of the development should be determined and clearly stated. This is often called a scope document.
    Certain functionality may be out of scope of the project as a function of cost or as a result of unclear requirements at the start of development.

    2. Implementation, testing and documenting
       - Implementation: program the code for the project.
       - Software testing: ensures that defects are recognized as soon as possible.
       - Documenting the internal design of the software: for the purpose of future maintenance and enhancement is done throughout development.

    3. Deployment and maintenance
       - Deployment: starts after the code is appropriately tested, is approved for release and sold or otherwise distributed into a production environment.
       - Software Training and Support: it would not matter how much time and planning a development team puts into creating software if nobody in an organization ends up using it. People are often resistant to change and avoid venturing into an unfamiliar area, so as a part of the deployment phase, it is very important to have training classes for new clients of your software.
       - Maintaining and enhancing software: to cope with newly discovered problems or new requirements can take far more time than the initial development of the software. It may be necessary to add code that does not fit the original design to correct an unforeseen problem or it may be that a customer is requesting more functionality and code can be added to accommodate their requests. If the labor cost of the maintenance phase exceeds 25% of the prior-phases' labor cost, then it is likely that the overall quality of at least one prior phase is poor. In that case, management should consider the option of rebuilding the system (or portions) before maintenance cost is out of control.

    This phases/steps/activities are further extended on the Wikipedia article "Systems Development Life Cycle (SDLC)". The term is coined has: the process of creating/altering systems, and the models and methodologies that people use to develop these systems. SDLC concept underpins many kinds of software development methodologies. These methodologies form the framework for planning and controlling the creation of an information system: the software development process.
    SDLC is a process used to develop an information system, including requirements, validation, training, and user (stakeholder) ownership.
    Objective: a high quality system that meets or exceeds customer expectations, reaches completion within time and cost estimates, works effectively and efficiently and is inexpensive to maintain and cost-effective to enhance.
    The Systems Life Cycle (SLC) is a type of methodology used to describe the process for development of software in a very deliberate, structured and methodical way, reiterating each stage of the life cycle.
    The SDLC framework provides a sequence of activities for system designers and developers to follow. It consists of a set of steps or phases in which each phase of the SDLC uses the results of the previous one.

    Computer systems are complex. To manage this level of complexity, a number of SDLC models or methodologies have been created, such as "waterfall"; "spiral"; "Agile"; "rapid prototyping"; "incremental"; and "synchronize and stabilize".

    SDLC models can be described along a spectrum of: agile to iterative to sequential:
       1. On one side of this spectrum are the Agile methodologies (such as XP and Scrum): focus on lightweight processes which allow for rapid changes along the development cycle.
       2. On the middle the Iterative methodologies (such as Rational Unified Process and Dynamic Systems Development Method): focus on limited project scope and expanding or improving products by multiple iterations.
       3. On the other side of the spectrum the Sequential or big-design-up-front (BDUF) models: such as Waterfall, focus on complete and correct planning to guide large projects and risks to successful and predictable results.


    A number of system development life cycle (SDLC) models have been created: waterfall, spiral, rapid prototyping, incremental. The oldest of these, and the best known, is the waterfall model: a sequence of stages in which the output of each stage becomes the input for the next. These stages can be characterized and divided up in different ways, including the following:

       1. Project planning, feasibility study: Establishes a high-level view of the intended project and determines its goals.
       2. Systems analysis, requirements definition: Defines project goals into defined functions and operation of the intended application. Analyzes end-user information needs.
       3. Systems design: Describes desired features and operations in detail, including screen layouts, business rules, process diagrams, pseudocode and other documentation.
       4. Implementation: The real code is written here.
       5. Integration and testing: Brings all the pieces together into a special testing environment, then checks for errors, bugs and interoperability.
       6. Acceptance, installation, deployment: The final stage of initial development, where the software is put into production and runs actual business.
       7. Maintenance: What happens during the rest of the software's life: changes, correction, additions, moves to a different computing platform and more. This, the least glamorous and perhaps most important step of all, goes on seemingly forever.

Bottom Line
People are using different terms to specify the same thing. Despite of all the confusion this may generate, lets focus on the main things: 

  • Problem:
    Without project management (structure, plan and control of the development), software projects can easily be delivered late (due to the lack of productivity), over budget or fail to meet their expectations in terms of functionality.
  • Main Objective:
    be able to consistently deliver high quality systems that meets or exceeds customer expectations, reaches completion within time and cost estimates, works effectively and efficiently, is inexpensive to maintain and cost-effective to enhance;

  • Solution:
    computer systems are complex and in order to achieve or main objective (in every software project), we'll want to develop software in a very deliberate, structured and methodical way: one that guarantees the achievement  of or goal,  instead of doing things in an ad doc way where things can go right but most certainly will go wrong (we wont be able to predict it).

    This is why we need software development methodologies/processes: they provide a sequence of activities/steps/phases  for developers to follow, that help planing and controling the creation of software.

    But this solution is no silver bullet, in fact, a decades-long goal has been to find repeatable (try to systematize), predictable processes that improve productivity and quality. In result we now have a wide variety of methodologies/processes, each with its own recognized strengths and weaknesses. They are not necessarily suitable for use by all projects: it will depend on various technical, organizational, project and team considerations.

Software development methodologies/processes

The main existing methodologies/processes can be separated in a spectrum of 3 sets (follow the links to go to the specific article):
  1. On one side of this spectrum are the Agile methodologies (such as SCRUM and XP): focus on lightweight processes which allow for rapid changes along the development cycle.
  2. On the middle, the Iterative methodologies (such as Rational Unified Process (RUP) and Dynamic Systems Development Method): focus on limited project scope and expanding or improving products by multiple iterations.
  3. On the other side of the spectrum, the Sequential or big-design-up-front (BDUF) models: such as Waterfall, focus on complete and correct planning to guide large projects and risks to successful and predictable results.

SCRUM

  • Scrum in 10 minutes youtube video by Axosoft check their SCRUM software and the blog;
  • Introduction to Scrum - An Agile Process excelent online resource;
  • ScrumAlliance lots of information. This section links to other notable Scrum resources like books, downloadable PDFs etc.;
  • Outsystems Agile Platform is used by IT teams to quickly develop and manage flexible web applications and Business Processes using agile methodologies. It includes all tools needed to Integrate, Develop, Deploy, Manage and Change web applications and business processes. The Community Edition is free for personal use or to seed small businesses. Other editions of the platform (Basic, Professional and Enterprise) provide additional functionality and are subscription based.

UML - Unified Modeling Language


Design patterns / architecture

When planning the design and architecture of your application you may want to review things like OOAD (Object-oriented analysis and design) and Design Patterns

No comments:

Post a Comment