Software development models and methodologies (Part 2)
Tags: computerscience, devops, productivity, devlive
Published: 2020-04-09 20:20:43

To comply with the software life cycle, some methodologies that guarantee success have been studied and implemented. These methodologies can be classified into **traditionals** (seen in the previous post: https://bit.ly/2Vfutgb ) and **agile**.

As we could see, in the **traditional ones**, **it is not possible to go from one stage of the life cycle before completing the previous one**.

In the **agile methodology**, rapid and effective development is required, where the requirements and stages of implementation can be done simultaneously.

## **Agile methodology**

They are those that allow adapting the way of working to the conditions of the project, achieving flexibility and immediacy in the response to mold the project and its development to the specific circumstances of the environment.

#### Principles of agile methodology
- Valuing individuals and their interaction (developers and
customers).
- Develop software that works, above exhaustive documentation.
- Collaboration with the client.
- Response to change before following up on a plan.

Within these methodologies we find: 

### **Extreme Programming (XP)**
Four structural activities are established.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/535pb0ssxo12pyo4qbev.png)

##### Planning
- It is done in stages, that is, it is iterative.
- There can be no planning without prior communication with the client. In this meeting with the client, he establishes his requirements which makes the software team understand what are the features and functionality needed.
- Each planning meeting is coordinated by the manager of the project.
- When the developer understands what he hears from customer, this can do the use cases, in which the client can assign priorities between all software functions.
- Developers will turn each feature into assignments lasting a maximum of 3 days so that the entire presentation does not require more than two weeks
- The number of presentations that will be part of each iteration is decided among all. This is called **project speed**.
- At the end of each iteration there will be a meeting of
planning so that the client values ​​the result, if not accepted, the non-accepted features will have to be added to the next iteration, and the client must rearrange the missing presentations to respect the speed of the project.

##### Design
- It is the guide for the implementation of the system, therefore it must be clear, and to be clear you need simplicity as it will not only be understood by the programmer but also on many occasions for the user.
- In the layout you can also assign the responsibilities and modules of each person in the team.
- It will be used a manual CRC type card (class, responsabilities, collaboration) for each system object, in which appears the name of the class, of the superclass, of subclasses, class responsibilities, and collaborating objects.
- The developers will meet regularly and have an overview and detail through these cards.

##### Coding and testing
- Developers agree on standards encoding (variable names, indentations, alignments, etc.), which must be followed.
- It is advisable to create **unit tests** before your own code to get a clearer idea of ​​what is going to be encoded.
- One of the best mechanisms for correct coding is the union of two people from the team, that is, **programming in couples**, each of these people, with characteristics different and specialized in different areas can take care of different tasks within the same code.
- Unit tests are the measure of verification of the functionality of each of the modules or system components, these can be executed at daily and provide information on the progress of the draft. 

Let's see the advantages and disadvantages:

|Advatages   	|Drowbacks   	|
|---	|---	|
|This methodology has techniques and tools that make it easier for you to reach a goal which is to satisfy customer by timely delivery of software quality.|Constant testing could lead to loss of time in design, so development could become not so light  |
|One of the best used software systems is free software, which does not have an excellent documentation, but if, in many cases, excellencequality.  	|    |


### **SCRUM**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/x5m39dl7elaxv9wez5nb.png)

It is an incremental and iterative methodology. A cross-functional team is intended participate to carry out the project in such a way that the different activities to be carried out overlap much. Accepting that the problem cannot be understood completely from the beginning, the team tries
be able to deliver a functional version of the software at the end of each sprint and go thus responding to the changes that occur.

The main **roles** in Scrum are:
- **Scrum Master**: that maintains the processes and works similar to the project manager.
- **Product Owner**: representing stakeholders (external or internal stakeholders).
- **Team**: which includes developers.

**Work planning** is done on what is known like **Sprint**, whose duration is recommended to be always the same. We can set sprints of one week, fifteen days or, at most, one month.

The goal of daily meetings is for the team to present the progress made and the results obtained, as well as to justify why certain tasks have not been completed. Plan the next day's development process and come up with ideas.

Let's see the advantages and disadvantages:

|Advatages   	|Drowbacks   	|
|---	|---	|
|**Management of user expectations**. Users can participate in each of the stages of the process and propose solutions. In fact, the whole process is intended for a type of joint evaluation.|It works more than anything with small teams.|
|**Anticipated results**. Each stage of the process produces a series of results. Therefore, it is not necessary for the client to wait until the end to see the result.|It requires an exhaustive definition of the tasks and their deadlines. When these two aspects are not properly defined, Scrum vanishes. Remember that the division of labor at each stage (and of these into specific tasks) are the essence of this methodology.|
|**Flexibility and adaptation to contexts**. It adapts to any context, area or sector of management. That is, it is not an exclusive technique of any discipline. |It requires that those who use it have a high qualification or training    |
|**Systematic risk management**. In the same way, the problems that appear during the management processes that may affect a project are managed at the same moment of its appearance. This is possible because the intervention of the work teams can be immediate. |    |

In these two publications, I have reviewed both traditional and modern teamwork methodologies. Knowing how to choose the right one for our team will be much easier now. I hope you can take advantage of this knowledge.