Two heads are better than one, right?

There’s this common conception that two heads are better than one, which comes from the intuition that people working in groups are more likely to come up with the correct answer or decision faster/more often than if they were working alone. You see, when you get a bunch of people together and ask them to come up with an idea, it’s highly unlikely that they all have the same idea, right? so there’s an inherent process of brainstorming when people work in organized groups, because everyone has their own thought process and has their own ideas. Parting from there, each individual will either defend their idea, or adopt another person’s idea if it sounds like a better choice. More often than not, the surviving idea or decision will be correct because the arguments favoring that decision are often the most sound.

Two heads are better than one. Image taken from: https://www.creativeintellectuk.com/2015/wp-content/uploads/TwoheadsPartnership.jpg

Okay, sure, that sounds nice and everything, but you already know we’re here to talk about software quality, so what does that have to do with software? Well, it just so happens that software development is a process filled with decisions (button placements, text field vs dropdown menu, algorithm X vs algorithm Y, while vs do-while, etc.), so maybe this conception also applies to software development… and it turns out that it kinda does?

Code review (which we often call peer review) is a software quality assurance activity where someone checks another developer’s code while it is being written. The idea is that there’s a coder and a reviewer, and the reviewer will ask questions about the code and provide feedback on it after a piece of it is written, or sometimes while it is being written, if the reviewer thinks it is necessary (e.g. when the coder is going in a completely wrong direction). This process often results not only in the discovery of quality problems, but also better overall code quality (in most aspects), more defects are found early, more people know how a particular piece of code works (if it needs maintenance and the author isn’t there, someone else can take care of it), increased sense of collective code ownership, better solutions to problems, and more/better QA guideline compliance.

Sounds cool, right? Well, if you like the feeling of someone constantly looking over your shoulder, that is. Developers often prefer sticking to a more toned-down version of peer review, where we ask a teammate to help us review our code only when we encounter a problem, and not through the whole process. Now, since the other person was not involved in the whole development process for this piece of code that you just wrote, there’s often a brief rubber ducking process where you explain your code to your peer, and this also helps the developer clear their mind and look at the bigger picture, which can help them come up with better/faster solutions.

Of course, this process of constant feedback doesn’t only help through the coding process. Thing is, two heads are better than one for pretty much anything: planning, requirements, design, etc. You name it, two heads can do it better (probably). The thing is, what helps us the most is the constant feedback that we get from working closely together. Whether it’s planning, designing, or coding, you most likely will benefit from having different points of view. Having a larger perspective often results in taking more things in consideration, which means that you’ll probably encounter less problems along the way.

In conclusion: yes, two heads are better than one.

Verification and Validation of Software (V&V)

Have you ever been in the situation that you finally finish a feature in a project and then the next day the project owner told you that it was not what he wanted and you have to make a lot of changes or even create again that feature from zero? well you can prevent those scenarios using verification and validation of sotware.

V&V is the process of checking that the software meets all the specifications given, it fulfills the purpose of the client, making sure that the software fulfill the laws in the countries that is going to be available, it also helps to reduce the number of bugs at the moment of deploy.

So for the part of software verification you can use some tools for making test cases and see which outpút it should give to you with that input and reviewing all the logical part of the software to answer the question are we building the product right? and for the part of validation the ideal case scenario is that the client is available all the time of the development and ask continuous questions about if what the software is doing is what it wants, but this is unlikely to happen so you can use some strategies defined already to follow some steps to ensure a good communication with the owner of the product and the development team to fulfill all the requirements for example the waterfall development process or the iterative development processes that are more use nowadays because the constant change in the world of technology.

Iterative model

Talking about requirements is very important not to only focus in the functional requirements, for example you are building an app and you can have your payment methods in your account but in the non-functional requirements it’s missing the part of security, so your app functions perfect but the security that is something of great importance in that app is not implemented so anyone would use it, that’s why is important to take the time to analyse all the requirements and follow one of the cycles of software as the iterative model for ensure that the requirements and functionality are fulfilled.

An important part of these cycles are the test cases, thanks to the testing step in the cycle you can prevent and fix a lot of bugs that are not visible and at the time of deploy to production the software is more stable with less bugs and at the long term it’s going to be cheaper because it’s a lot more expensive to fix an error when the software is already in use than the cost to fix it while it was on development.

Models and Standards for Software Process Improvement

Models and standards for software at first look like something strange and unnecessary when you are working on your own, but these standards are helpful to evaluate the software quality and in this way you can see what areas of improvement you can work on and how to optimise your current project to make a better product.

There are some standards for ensure quality in software some of them are the following:

  • CMMI
  • TSP/PSP
  • ISO-15504

Capability Maturity Model Integration (CMMI):

CMMI was developed at Carnegie Mellon University. It is required by many U.S Government contracts, just by that you can see how important are these models to ensure that software being developed by certain company have all the requirements of quality needed, this model focus in the part of product and service development, service establishment, management and product and service acquisition, this is important as well because thanks to this best practices that this model propose is easier to maintain the software.

The Personal Software Process (PSP) provides a operational framework with the objective of helping a person in how they manage their own time, productivity. This help teams of managers and engineers to organize small projects or large projects. PSP has as objective to improve the levels of quality and productivity of the team developing those projects. In this framework or model each team manage itself, they do their own plans, how they track their work and are responsible of the quality of their work, but before someone can take part on a team is necessary to learn about TSP(Team Software process) because in each team there are roles to ensure the quality and organization of the team.

Software Process Improvement Capability Determination (ISO/IEC 15504) has the following objectives:

  • Create an standar to evaluate software processes.
  • Measure and evaluate customer-supplier, supporting, management.

Now this standard measure the following processes in the business organization, management, engineering, acquisition and supply, support and operations. This standard is a framework for continuous improvement, their analyze each process capability and see what areas of improvement are available and is divided in 6 levels.

  • Incomplete( Level 0): The process is not implemented or fails to achieve its purpose.
  • Performed(Level 1): The process is performed and achieves its purpose.
  • Manages(Level 2): The process is managed and results are specified, controlled and maintained.
  • Established(Level 3): A standard process is defined and used throughout the organization.
  • Predictable(Level 4): The process is executed consistently within defined limits.
  • Optimizing(Level 5): The process is continuously improved to meet current and projected business goals.

So as we can see these models are standards that can be used for ensure quality and a framework to always keep improving how the workflow, the processes and the organization of a business works together to create software that meets the criteria so in the future that software can be modified, scaleted and improved.

Software Testing

Hello everyone, in this new post we’ll be talking about software testing. This one will contain a little more content because this is a huge topic to talk about.

What is Software Testing?

It is defined as the process of executing a program or application with the intent of identifying bugs. Also the process of validating a piece of software meets its business and technical requirements.

A plan for adequate testing is always needed, no matter methodology.

Types and levels of testing

Levels of testing
Types of testing

To know more about levels and types for testing, click on it.

Activities and roles in testing

  • Test lead/manager
    • Defines the testing activities for subordinates.
    • Responsible for testing planning.
    • Checks if the team has all necessary resources.
    • Checks if testing is going hand in hand with software development.
    • Interaction with customer.
    • Status report of testing activities.
  • Test engineers/QA testers/QC
    • Read documents and understand what needs to be tested.
    • Decide how it is going to be tested.
    • Develop test cases and prioritize testing activities.
    • Execute all the test cases and report defects.
  • Software Tester and Test Manager Roles.
  • To know more of each one the roles click here.

Testing environments

A test environment is a server that allows you to run the test cases that are already defined. It also involves hardware and network configuration.

Types of testing environments

To get details about the testing environments click here.

Test Case Design techniques

Is a procedure for determining test conditions, test cases and test data during software testing.

Test design techniques always include test selection criteria determining when to stop designing more test cases. They differ from test creation, which are based on the test data adequacy criteria by selecting appropriate test data in order to reduce the risks to an acceptable level.

Test case techniques

To know more about Test Case Design techniques click here.

Process for control and management of defects in artifacts

Process for control and management of defects in artifacts

Click here to know more.

If you’ve reach until here, I want to thank you for taking the time of reading my blog.

Software Testing

  1. Software testing process
  2. Types and levels of testing
  3. Activities and roles in testing
  4. Testing environments
  5. Test Case Design techniques (open and closed views)
  6. Process for control and management of defects in artifacts

Software testing process

Is a process conducted for acquiring information about the quality of the software in hand. It should yield a perspective from the user side that can work as a path to understand how the product would behave in a real environment, and what undesired effects could occur. To put this in practice a component of the system must be executed to evaluate some properties of interest. And it could yield a result composed of one of the following:

  • meets the requirements that guided its design and development,
  • responds correctly to all kinds of inputs,
  • performs its functions within an acceptable time,
  • is sufficiently usable,
  • can be installed and run in its intended environments
  • achieves the general result its stakeholders desire.

Levels of testing

There are three main levels of testing:

Unit testing


Unit testing refers to tests that verify the functionality of a specific section of code, usually at the function level. In an object-oriented environment, this is usually at the class level, and the minimal unit tests include the constructors and destructors.

These types of tests are usually written by developers as they work on code, to ensure that the specific function is working as expected. One function might have multiple tests, to catch corner cases or other branches in the code. Unit testing alone cannot verify the functionality of a piece of software, but rather is used to ensure that the building blocks of the software work independently from each other.

Integration testing

Integration testing is any type of software testing that seeks to verify the interfaces between components against a software design. Software components may be integrated in an iterative way or all together . Normally the former is considered a better practice since it allows interface issues to be located more quickly and fixed.

System testing

System testing tests a completely integrated system to verify that the system meets its requirements. For example, a system test might involve testing a login interface, then creating and editing an entry, plus sending or printing results, followed by summary processing or deletion of entries, then logoff.

There is a fourth level that may be included by developers. This may be in the form of operational acceptance testing or be simple end-user (beta) testing, testing to ensure the software meets functional expectations. Based on the ISTQB Certified Test Foundation Level syllabus, test levels includes those four levels, and the fourth level is named acceptance testing. Tests are frequently grouped into one of these levels by where they are added in the software development process, or by the level of specificity of the test.

Acceptance testing

Commonly this level of Acceptance testing include the following four types:

  • User acceptance testing
  • Operational acceptance testing
  • Contractual and regulatory acceptance testing
  • Alpha and beta testing

Roles in testing

Manager

Responsible for:

  • Defining the testing activities
  • Test planning
  • Check the team has the necessary resources to perform the testing activities
  • Verify testing is going hand in hand with the development at all phases
  • Prepare the status report of testing activities
  • Interactions with customers
  • Updating the project manager about the status of testing activities

Test Engineer

Responsible for:

  • Understanding what needs to be tested
  • Decide how it is going to be tested
  • Inform the test lead about what resources will be required for the testing activities
  • Develop test cases and prioritize testing activities
  • Execute test cases and report defects, defining severity and priority for each defect
  • Carry out regression testing

Testing environments

  1. Setup of test server with support of needed applications
  2. Network setup
  3. Test PC setup for running the software product
  4. Provide bug reporting tools
  5. Create test data for testing environment

Test case design techniques

  • Boundary Value Analysis (BVA): based on testing at the boundaries between partitions.
  • Decision Table Based Testing: for every function, a table is created to list down all types of combinations of inputs and its respective outputs.
  • State Transition: the testing team provides both positive and negative input test values to evaluate the system behavior.
  • Error guessing: the test analysts use their experience to guess potential problematic parts of the application and write test cases to expose those errors.

Defect Management Process

A defect management cycle contains 6 stages:

  1. Discovery of defect
  2. Defect categorization
  3. Fixing of defect by developers
  4. Verification by testers
  5. Defect closure
  6. Defect reports

Pan, Jiantao (Spring 1999). “Software Testing”(coursework). Carnegie Mellon University. RetrievedNovember 21, 2017.

Software Review

(Peer Review and/or Code Inspection)

  1. Definition and characteristics of review
  2. Activities and roles for each review
  3. How to review the key work products: plans, requirements, design, and code

Software Review is systematic inspection of a software by one or more individuals who work together to find and resolve errors and defects in the software during the early stages of Software Development Life Cycle (SDLC). Software review is an essential part of Software Development Life Cycle (SDLC) that helps software engineers in validating the quality, functionality and other vital features and components of the software. It is a whole process that includes testing the software product and it makes sure that it meets the requirements stated by the client.

Usually performed manually, software review is used to verify various documents like requirements, system designs, codes, test plans and test cases.

Objectives of Software Review:
The objective of software review is:

  1. To improve the productivity of the development team.
  2. To make the testing process time and cost effective.
  3. To make the final software with fewer defects.
  4. To eliminate the inadequacies.


Process of Software Review:

Types of Software Reviews:
There are mainly 3 types of software reviews:

  1. Software Peer Review:
    Peer review is the process of assessing the technical content and quality of the product and it is usually conducted by the author of the work product along with some other developers.
    Peer review is performed in order to examine or resolve the defects in the software, whose quality is also checked by other members of the team. Peer Review has following types:
    • (i) Code Review:
      Computer source code is examined in a systematic way.
    • (ii) Pair Programming:
      It is a code review where two developers develop code together at the same platform.
    • (iii) Walkthrough:
      Members of the development team is guided but author and other interested parties and the participants ask questions and make comments about defects.
    • (iv) Technical Review:
      A team of highly qualified individuals examines the software product for its client’s use and identifies technical defects from specifications and standards.
    • (v) Inspection:
      In inspection the reviewers follow a well-defined process to find defects.
  2. Software Management Review:
    Software Management Review evaluates the work status. In this section decisions regarding downstream activities are taken.
  3. Software Audit Review:
    Software Audit Review is a type of external review in which one or more critics, who are not a part of the development team, organize an independent inspection of the software product and its processes to assess their compliance with stated specifications and standards. This is done by managerial level people.

Advantages of Software Review:

  • Defects can be identified earlier stage of development (especially in formal review).
  • Earlier inspection also reduces the maintenance cost of software.
  • It can be used to train technical authors.
  • It can be used to remove process inadequacies that encourage defects.

GeeksForGeeks (2019). Software Engineering | Software Review. Retrieved from: https://www.geeksforgeeks.org/software-engineering-software-review/

Models and Standards for Software Process Improvement

  1. CMMI
  2. TSP/PSP
  3. ISO-15504
  4. MOPROSOFT
  5. IDEAL method

CMMI

Capability Maturity Model Integration (CMMI) is a model that helps organizations to improve their processes.

This model evaluates three specifics sections:

  • Process and service development.
  • Service establishment and management.
  • Product and service acquisition.


It has a behavioral model that can classify the organizations, so they identify different levels of maturity which indicates how an organization will act on different situations:

  • Initial
  • Managed
  • Defined
  • Quantitatively managed
  • Optimizing
  • Initial

TSP/PSP


PSP (Personal Software Process) and TSP (Team Software Process) are based on stablishing goals, concrete a plan, measure of work, however, PSP focuses on personal processes while TSP focuses on multiple individuals observed as a whole team work while using the same principles of PSP with additional steps.

psp/tsp

ISO-15504

It is the international standard known as Software Process Improvement Capability Determination. It is a tool with the objective of proposing and developing a model for the evaluation of software processes. It establishes the requirements for an evaluation of processes and the models of evaluation, spanning the areas of process improvement, capability, and maturity.

It is conformed by:

  1. Vocabulary and concepts
  2. Realization of an evaluation
  3. Conducting an evaluation
  4. Guide about the use for the improvement of the process and the determination of its capability
  5. An example of an evaluation model of processes in the life cycle of software
  6. An example of an evaluation of the life cycle of the system
  7. Evaluation of organizational maturity
  8. An example model of evaluation of processes for the management of IT services
  9. Profiles of objective process
  10. Security extension

MOPROSOFT

It’s a model for the constant improvement and evaluation of development processes and system maintenance . It was developed by “Asociación Mexicana para la Calidad en Ingeniería de Software” with the collaboration of UNAM

Characteristics:

  • Facilitates the compliance of other models
  • It’s simple to adopt
  • Low cost on implementation

This model focuses more in management and it has three categories:

  • High Management (Management of business)
  • Management (Management of processes, projects and resources)
  • Operation ( Management of specific projects and development and maintenance)

IDEAL method

An improvement model for the CMMI product suite, serving as a roadmap for initiating, planning, and implementing process improvement actions in this standard. It is named after the five phases required to perform a change initiative:

Initiating

Lay the groundwork for a successful improvement. Current way of doing business needs to change, and the appropriate resources to do so are allocated.

Diagnosing

Where you are vs where you want to be. Analysis to determine what are the current practices and highlight potential areas of improvement opportunities.

Establishing

Plan how objectives will be reached. Recommendations of the analysis phase are prioritized, and plans are developed to conduct these activities.

Acting

Do the work that was established in the plan. Implement the designed activities.

Learning

Learn from the experience and improve. Collect lessons that can be applied to future rounds of the IDEAL life cycle.

Gerardo Salgado. (2017). MoProSoft: Un modelo para mejorar la calidad del software en México. 2020, November 1, Conogasi.org Retrieved from: http://conogasi.org/articulos/moprosoft-un-modelo-para-mejorar-la-calidad-del-software-en-mexico/

Version Control

  1. Tools for version control
  2. Tools for testing
  3. Tools for process administration of V&V

Version control can be broken down to managing changes done to a product, monitoring the state at which a configuration is. This ‘process’ is used in the software development industry to develop a project in the best way possible, since any modification is easy to compare with previous code or edition.

Tools for version control

Git

When you need a software to do everything mentioned above git should come to mind, a free software available on all platforms, capable of handling any project’s size and in any shape, multiple workflows and local branches. It also is open source and completely free!

Tools for testing

Selenium

Selenium was designed as a software testing environment for web based apps, really easy to learn since it doesn’t require a scripting language for testing, thanks to its record/play feature. Developed in Java and also open source, seems like a good tool to try.

Tools for process administration of V&V

WinA&D

It is a software design tool for drawing process (DFD), data (ERD), class and screen models. These are the most popular models in structured analysis & design, information modeling, UML and user interface design.
It supports code generation, integrated code browsing, linked text specifications or foreign documents and data dictionary. Using WinTranslator to generate diagrams from source code.

  1. Data Flow Diagrams
  2. Data Models
  3. Class Diagrams
  4. Screen Models
  5. Data Dictionary

Collins-Sussman, Ben; Fitzpatrick, B.W. and Pilato, C.M. (2004). Version Control with Subversion. O’Reilly.