Test me!

“Testing is the process of evaluating a system or its component(s) with the intent to find whether it satisfies the specified requirements or not.” (TutorialsPoint, 2016)

Software needs to be tested to determine if all requirements were met. If there are any errors, bugs, mistakes, or gaps in the system.

Who does testing?

The more the better. Different points of view are required in this process: Normally, there is a software testing team; however, software developers, managers, and users also participate.

It is important to implement this phase throughout the development.

Why? To save time, reduce costs and errors.

Testing never ends

This means that there is always some improvement to the system; therefore, testing is needed to see if there is something to be improved.

Types of testing:

There are lots of testing types including compatibility, performance, usability, security, recovery, comparison, stress, unit, load, regression, system, etc.

Most known testing types are alpha testing which is done at the end of the development phase, where the software is almost complete; beta, where end-users are the ones testing the system supposedly finished; and black-box which tests if the system covers requirements.

Video:

Complete tutorial:

https://www.tutorialspoint.com/software_testing/index.htm


Building software

What is it?

“The software architecture of a program or computing system is a depiction of the system that aids in the understanding of how the system will behave.” (SEI|CM, 2016)

Basically, Software architecture is the process of creating a blueprint of your program. What will be its functionalities, applications, method, designs, etc. The main difference between Software Architecture and Software Design is that the architecture will demonstrate what the system will do, and the design will show how it will do it. Software architecture is represented on a high-scale abstract style; henceforth, is just a guide to show developers what the system is intended to do, and what it needs to work.

Video:

References

http://www.sei.cmu.edu/architecture/


Beautifully covering requirements

What am I talking about? Software design. Helping the programmer in software implementation, it is a process that transform user requirements into a suitable form.

What we know?

If you’ve been following my blog posts, we’ve already talked about SDLC, and SRS where we discussed that a document is created to specify user and software requirements. It is important to make it specific, and make use of software terms. The first step in SDLC is Software Design, which changes the view of problem into solution.

Levels

slide_7

  • The architectural design is the most superficial and abstract version of the system. It identifies software as a bunch of components that interact with one another. This is were developers take an idea of a proposed solution.
  • The high-level design breaks the “multiple components” concept of the architectural design, where a view of modules is portrayed and it shows where they interact with each other.
  • The detailed design deals with the implementation part, and its sub-systems, bringing together both previous designs. Defines the logical structure of each module.

Modules?

Modularization is used to divide a system into multiple and independent modules. These modules are expected to carrying out independent functions, and may work as the base for the entire system.

Want to know more?

Read this blog post, where there is a more thorough explanation on the topic.

Video:

Reference

https://www.tutorialspoint.com/software_engineering/software_design_basics.htm


UML stands for Unified Modelling Language

Born in 1994, UML is a technique for system specification in every phase. Created by Grady Booch, James Rumbaugh, and Ivar Jacobson, it covers all main aspects of previous designing methods. The first version of UML was released in 1997, and it has been successfully used in a number of different systems for different industries. (UNAM, n.d.)

Benefits of using UML:

  • Improves development time
  • Establishes concepts and executables
  • Creates a modelling language used by humans and machines
  • Improves support and control for project management
  • High reuse and reduced costs
  • Models systems using object oriented concepts

Types of UML diagrams

Types of UML diagrams with structure diagrams coming first and behavioral diagrams starting from position 8. Click on any diagram type to visit that specific diagram type’s description (Creately, 2012).

  1. Class Diagram
  2. Component Diagram
  3. Deployment Diagram
  4. Object Diagram
  5. Package Diagram
  6. Profile Diagram
  7. Composite Structure Diagram
  8. Use Case Diagram
  9. Activity Diagram
  10. State Machine Diagram
  11. Sequence Diagram
  12. Communication Diagram
  13. Interaction Overview Diagram
  14. Timing Diagram
uml-diagram-types1

UML diagram types (Creately, 2012)

References:

http://creately.com/blog/diagrams/uml-diagram-types-examples/

http://profesores.fi-b.unam.mx/carlos/aydoo/uml.html

 


Non-functional requirements matter too

Defining requirements can be difficult because there needs to be a distinction between functional and non-functional requirements; however, both of these requirements are important to the system, and without them the system can crash or fail. The problem is when people miss these non-functional requirements, either they know about it or not.

What is a functional requirement?

Refers mainly to the expected function of the product. Product or system features, or what the program does is what the functional requirements are. Definitely it is easier to determine the functional requirements than the non-functional because they are almost obvious.

What is a non-functional requirement?

These requirements refer mainly to the attributes that include performance, security, usability, etc. Developers usually miss these requirements because they focus mainly on the functional requirements. When addressing incorrectly these non-functional requirements, the system actually fails. For example, the lack of usability or performance can lead to frustration or system problems. This is why non-functional requirements are so important for a system to succeed.

Example

functional-and-non-functional-testing

Both of them are needed specifications.

References:

  1. http://searchsoftwarequality.techtarget.com/answer/Differentiating-between-Functional-and-Nonfunctional-Requirements

What about the waterfall method?

Briefing:

Known as linear-sequential life cycle model, the waterfall method was the first process model to be introduced. Basically, no further phase can begin if the previous one hasn’t finished. This means that phases never overlap each other.

Model design:

To ensure the success of the project, the waterfall method was the first SDLC to be used. As a Software Development Life Cycle, it divides the process into phases, where the outcome of each phase works as an input for the next phase.

sdlc_waterfall_model

1. Requirements needed for the software to be developed.

2. Requirements are studied, and designing a system.

3. Inputting the design of the system, programs (or units) are created

4. All units are combined into a single system to test the software system.

5. The product is released into the market for customers to buy.

6. Release patches to fix issues in customers systems, enhance the functionality of the product.

Greatest benefits:

It is very simple to use and document. Also, each phase has a specific product and review process. Clearly defined objectives, goals, milestones, purposes, etc. Processes are easily arranged. Each phase is completed one at a time, which ensure success for that specific phase.

References:

  1. http://www.tutorialspoint.com/sdlc/sdlc_waterfall_model.htm

Software Development Processes

Processes VS life cycles

Software Development Processes are often confused with software life cycle; and although, it is a series of steps to follow, processes is referred to as all the approaches or models for different types of tasks.

Activities & Steps:

  • Requirement analysis: Mostly analyzing requirements for desired product or software: skills, money, etc.
  • Specifications: Precisely describing what a software is to do.
  • Software architecture: Abstractedly representing the architecture of a software system.
  • Implementation: Actual coding, and implementation of architecture.
  • Testing: Testing the code, or codes.
  • Documentation: In order, to create a safe maintenance ambiance for the software.
  • Training and support: Develop training classes for intended users, so that the software is not new for them, and they notice the transcendence of the system.
  • Maintenance: Enhancing, upgrading, and deleting bugs mostly.

There are several models and methodologies that try to improve quality, and productivity.

Examples of methodologies:

  1. Waterfall processes (Soon blog about this method)
  2. Iterative processes (Soon blog about this method)

2 hours long tutorial explaining more about this topic, and about more methodologies.

References:

http://www.selectbs.com/analysis-and-design/what-is-a-software-development-process


What is SCM?

Great post about SCM

Julia

barcelona-sprint-1What

Configuration management refers to a discipline for evaluating, coordinating, approving or disapproving, and implementing changes in artifacts that are used to construct and maintain software systems.
According to the
Technopedia
SCM helps in i
dentifying individual elements and configurations, tracking changes, and version selection, control, and baselining. One of the most widely used SCM is
Git
, created by Linus Tovalds in 2005.

Why

How
• Identify and store artifacts in a secure repository.
• Control and audit changes to artifacts.
• Organize versioned artifacts into versioned components.
• Organize versioned components and subsystems into versioned subsystems.
• Create baselines at project milestones.
• Record and track requests for change.
• Organize and integrate consistent sets of versions using activities.
• Maintain stable and consistent workspaces.
• Support concurrent changes to artifacts and components.
• Integrated early and often.
• Ensure reproducibility of software builds
(Pearson, https://www.pearsonhighered.com/samplechapter/0321200195.pdf)

figure_08Why is…

View original post 92 more words


Software life cycle

What is software life cycle?

To develop the desired software product, a certain series of steps need to be followed. These steps are known as the Software Development Life Cycle (SDLC).

These steps are:

Communication: The user initiates the process, where he contacts a software developer to request a specific software product.

Requirement gathering: The software development team tries to gather all possible information on requirements for the product by contacting stakeholders.

Feasibility study: The teams start plans for software process, and determine if the solution is practically, financially, and technologically possible by analyzing most possible algorithms.

System analysis: Developers try to come up with the best model for the product.

Software design: This is the moment when the designing of the product begins, combining the analysis, and the requirement knowledge.

Coding: This is the programming stage, where the software design is implemented.

Testing: At this point it is very important to review the code for all possible existing errors. It is one of the most important phases.

Integration: Include all needed data to implement the software product.

Implementation: This means to install the software and actually run the product on user machines.

Operation & Maintenance: Further analysis of the product needs to be done to improve the efficiency of the product and avoid more errors.

Disposition: If software becomes obsolete, this process needs to eliminate or archive all data regarding to the product, or if possible upgrade totally the product.

sdlc

Refereneces:

http://www.tutorialspoint.com/software_engineering/software_development_life_cycle.htm


Be an agile software developer

What is agile software development?

“Agile Development” is an umbrella term for several iterative and incremental software development methodologies.

There are many methodologies: Extreme Programming XP, Scrum, Crystal, Dynamic Systems Development Method DSDM, Lean Development, and Feature-Driven Development FDD. Each one of them has a unique characteristic; however, they all share the same approach to the incorporation of iteration and feedback that helps to improve and deliver a final software system.

What does that mean?

Software development is taken more seriously because, to develop a software system, these methodologies involve continuous testing, planning, integration, and evolution of software. These methodologies force people to collaborate and make decisions together in a more efficient, and effective way.

This isn’t new, however:

These practices have been around for several years. Basically, these methodologies have packaged and implemented various management, engineering, and customer aimed practices to help, and guide teams into making quick and efficient solutions. Planning and delivering. This trend has been evolving and improving constantly.

VIDEO

References:

https://www.versionone.com/agile-101/