Tools for Version Control

Version control is a way to keep a track of the changes in the code so that if something goes wrong, we can make comparisons in different code versions and revert to any previous version that we want.

One of the most used tools is Git, which has amongst other, the next features:

  • Provides strong support for non-linear development.
  • Distributed repository model.
  • Compatible with existing systems and protocols like HTTP, FTP, ssh.
  • Capable of efficiently handling small to large sized projects.
  • Cryptographic authentication of history.
  • Pluggable merge strategies.
  • Toolkit-based design.
  • Periodic explicit object packing.
  • Garbage accumulates until collected.

As every tool, Git has some Pros and some Cons, let’s review them:

Pros

  • Super-fast and efficient performance.
  • Cross-platform
  • Code changes can be very easily and clearly tracked.
  • Easily maintainable and robust.
  • Offers an amazing command line utility known as git bash.
  • Also offers GIT GUI where you can very quickly re-scan, state change, sign off, commit & push the code quickly with just a few clicks.

Cons

  • Complex and bigger history log become difficult to understand.
  • Does not support keyword expansion and timestamp preservation.

Now let’s see what about CVS:

Features

  • Client-server repository model.
  • Multiple developers might work on the same project parallelly.
  • CVS client will keep the working copy of the file up-to-date and requires manual intervention only when an edit conflict occurs
  • Keeps a historical snapshot of the project.
  • Anonymous read access.
  • ‘Update’ command to keep local copies up to date.
  • Can uphold different branches of a project.
  • Excludes symbolic links to avoid a security risk.
  • Uses delta compression technique for efficient storage.

Pros

  • Excellent cross-platform support.
  • Robust and fully-featured command-line client permits powerful scripting
  • Helpful support from vast CVS community
  • allows good web browsing of the source code repository
  • It’s a very old, well known & understood tool.
  • Suits the collaborative nature of the open-source world splendidly.

Cons

  • No integrity checking for source code repository.
  • Does not support atomic check-outs and commits.
  • Poor support for distributed source control.
  • Does not support signed revisions and merge tracking.

SVN is yet another tool for Version Control:

Features

  • Client-server repository model. However, SVK permits SVN to have distributed branches.
  • Directories are versioned.
  • Copying, deleting, moving and renaming operations are also versioned.
  • Supports atomic commits.
  • Versioned symbolic links.
  • Free-form versioned metadata.
  • Space efficient binary diff storage.
  • Branching is not dependent upon the file size and this is a cheap operation.
  • Other features – merge tracking, full MIME support, path-based authorization, file locking, standalone server operation.

Pros

  • Has a benefit of good GUI tools like TortoiseSVN.
  • Supports empty directories.
  • Have better windows support as compared to Git.
  • Easy to set up and administer.
  • Integrates well with Windows, leading IDE and Agile tools.

Cons

  • Does not store the modification time of files.
  • Does not deal well with filename normalization.
  • Does not support signed revisions.

Finally, why should we use one of these? Well, it allows you to revert selected files back to a previous state, revert the entire project back to a previous state, compare changes over time, see who last modified something that might be causing a problem, who introduced an issue and when, and more. Using a VCS also generally means that if you screw things up or lose files, you can easily recover. In addition, you get all this for very little overhead.

Bibliography:

Git – About Version Control. (n.d.). Git. https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control

Top 5 BEST Version Control Software (Source Code Management Tools). (2020, November 13). Software Testing Help. https://www.softwaretestinghelp.com/version-control-software/

Software Testing

Software testing is a process for the evaluation of the functionality of a software application with the intent of determining whether or not the software developed meets specified requirements and identifying defects to ensure that the product is free of defects so a quality product can be produced.

According to ANSI/IEEE 1059 standard – A process of analyzing a software item to detect the differences between existing and required conditions (i.e., defects) and to evaluate the features of the software item.

Why do we need Software Testing?

Because this allows us to ensure that our work is being done correctly and it is delivering the expected results, like, who wants a software that doesn’t work or that it doesn’t do what it is supposed to, after all the testing is the process or group of processes that checks how everything is working, every button, every page, every interface, it all needs testing.

And what if there is no software testing in the software development process?

Everything is changing rapidly and no one wants to be left behind, our lives are improving and we count on technology everyday, so think about this: we access our bank online, we do shopping online, we order food online, and many more, now what if these systems turn out to be defective. We all know that one small bug shows a huge impact on business in terms of financial loss and goodwill.

Some of the reasons why testing has become a very significant and integral part of the field of information technology are as follows:

  1. Cost-effectiveness
  2. Customer Satisfaction
  3. Security
  4. Product Quality
Software Testing and Methodologies | by Miktad Öztürk | The Startup | Medium

Testing Team

Test Manager: The test manager is hired when there are many testing groups. The number of testers and testing groups depends on the software testing workload. The test manager has below major roles:

  • Prepares test strategy
  • Prepare the test budget
  • Define test levels and test cycles
  • Develop strategy for estimating test effort
  • Develop strategy for test documentation, metrics and reporting
  • Guides and controls the testing teams

Test Leader: The test leader performs the roles of test manager in absence of test manager. In addition to that, test leader roles and responsibilities are listed below:

  • Prepare the test plan at each test level based on test strategy
  • Define the objectives, test items, approaches, risk, contingencies in testing process
  • Assign roles and provide schedule to testers
  • Identify the test specifications test activities for testers
  • Gather metrics and track the testing progress
  • Define entry and exit criteria

Testers (themselves): The testers group can comprise of entry level testers, senior testers, performance testers, automation testers and testers performing specific tests. Some of the responsibilities of a typical tester are listed below:

  • Gather the test requirements
  • Review the project documents to understand the requirements and identify the errors
  • Assist the test lead to prepare the test plan
  • Create the test documents like traceability matrix, test data and test cases
  • Set up and verify the test environment
  • Test the software at different levels and record the results
  • Identify, report and track the defects


Test Case Design Technique

Following are the typical design techniques in software engineering:

1. Deriving test cases directly from a requirement specification or black box test design technique. The Techniques include:

  • Boundary Value Analysis (BVA)
  • Equivalence Partitioning (EP)
  • Decision Table Testing
  • State Transition Diagrams
  • Use Case Testing

2. Deriving test cases directly from the structure of a component or system:

  • Statement Coverage
  • Branch Coverage
  • Path Coverage
  • LCSAJ Testing

3. Deriving test cases based on tester’s experience on similar systems or testers intuition:

  • Error Guessing
  • Exploratory Testing

References

Faculty, P. S. (2018, March 29). DIFFERENT ROLES IN A SOFTWARE TESTING TEAM. H2kinfosys Blog. https://www.h2kinfosys.com/blog/different-roles-software-testing-team/

Test Case Design Technique – Tutorialspoint. (n.d.). TutoPoint. Retrieved November 30, 2020, from https://www.tutorialspoint.com/software_testing_dictionary/test_case_design_technique.htm

R. (2020, November 28). What Is Software Testing | Everything You Should Know. Software Testing Material. https://www.softwaretestingmaterial.com/software-testing/

Software Reviews

Software reviews may be divided into three categories:

  • Software peer reviews are conducted by the author of the work product, or by one or more colleagues of the author, to evaluate the technical content and/or quality of the work.
  • Software management reviews are conducted by management representatives to evaluate the status of work done and to make decisions regarding downstream activities.
  • Software audit reviews are conducted by personnel external to the software project, to evaluate compliance with specifications, standards, contractual agreements, or other criteria.

The most obvious value of software testing (especially formal testing) is that it can identify problems earlier and at a lower cost than would be identified through testing or through field use (the defect detection process) [citation needed]. The cost of finding and correcting a defect through a well-conducted examination can be one to two orders of magnitude less than when the same defect is found through testing or in the field [citation needed].

A second, but ultimately more important, value of software reviews is that they can be used to train technical authors to produce documents with extremely low defects, and also to identify and eliminate process deficiencies that foster defects (the defect prevention process).

This is particularly true for peer reviews if they are done in advance and often on work samples, rather than waiting for the work to be completed. Early and frequent reviews of small work samples can identify systematic errors in the Author’s work processes, which can be corrected before other defective work is done. This improvement in the Author’s skills can dramatically reduce the time needed to develop a high quality technical document, and dramatically decrease the error rate in the use of the document in subsequent processes.

Different types of Peer reviews

  • Code review is a systematic examination (often as a peer review) of computer source code.
  • Peer programming is a type of code review in which two people develop code together on the same workstation.
  • Inspection is a very formal type of peer review in which reviewers follow a well-defined process for finding defects.
  • Peer review is a form of peer review in which the author directs members of the development team and other interested parties to review a software product and the participants ask questions and comment on the defects.
  • Technical review is a form of peer review in which a team of qualified personnel examines the suitability of the software product for the intended use and identifies discrepancies with respect to specifications and standards.
What is Software Review and its Different Types? |Professionalqa.com

1028-2008 – 1028-2008 – IEEE Standard for Software Reviews and Audits – IEEE Standard. (2008, August 15). IEEE. https://ieeexplore.ieee.org/document/4601584

 Weinberg, Gerald M. (1971). The Psychology of Computer Programming. Van Nostrand Reinhold.

Verification and Validation of Software

Verification and Validation is the process of investigating that a software system satisfies specifications and standards and it fulfills the required purpose. Barry Boehm described verification and validation as the following:

Verification: Are we building the product right?
Validation: Are we building the right product?

Verification is the process of verifying that a software achieves its objective without errors. It is the process to ensure whether the product that is developed is correct or not. Check if the developed product meets the requirements we have. Verification is a static test.

Activities involved in verification:

  1. Inspections
  2. Reviews
  3. Walkthroughs
  4. Desk-checking

Validation:
Validation is the process of checking whether the software product is up to scratch or, in other words, whether the product has high-level requirements. It is the process of checking the validation of the product, that is, it checks that what we are developing is the right product. It is the validation of the real and expected product. Validation is the dynamic test.

Activities involved in validation:

  1. Black box testing
  2. White box testing
  3. Unit testing
  4. Integration testing

The main standard for Quality, V&V is the IEEE, Software verification and Validation (V&V) processes, which determine whether developments products of a given activity conform to the requirements of that activity, and whether the software satisfies its intended use and user needs, are described. This determination may include analysis, evaluation, review, inspection, assessment, and testing of software products and processes. V&V processes assess the software in the context of a system, including the operational environment, hardware, interfacing software, operators and users.

IEEE. (1998). IEEE. https://people.eecs.ku.edu/~hossein/Teaching/Stds/1012.pdf

Software Engineering | Verification and Validation. (2019, April 17). GeeksforGeeks. https://www.geeksforgeeks.org/software-engineering-verification-and-validation/

Verification vs Validation. (2020, September 10). SOFTWARE TESTING Fundamentals. https://softwaretestingfundamentals.com/verification-vs-validation/

Models and Standards for Software Process Improvement

Capability Maturity Model Integration(CMMI)

Capability Maturity Model Integration (CMMI) evolved from Capability Maturity Model (CMM). CMM was proposed and research began by the Software Engineering Institute (SEI) in 1986. CMMI defines processes that should be implemented in an organisation, but it does not describe the way the processes should be implemented. CMM assists to improve product quality, organisation’s processes, productivity and project development life-cycle. CMMI is successfully applied in safety critical environments like healthcare. Also it is widely deployed in government and military projects. CMMI is widely used in large enterprises, also possible for small teams to incorporate with a little modification of the processes.

Comparison with CMMI & ISO/IEC 15504,SPICE

Similarities

Similar systematic evaluation: Both of them provide a structured approach with different level to get software process improvement. They represent a continuous conception in software process improvement. Software organization follows the first level at the beginning to achieve goals in each stage, to get the highest level at last.

Similar coverage area: Compared the structure of CMMI & ISO/IEC 15504, it is not difficult to find most of coverage of their key processes are the same. That means we can find corresponding CMMI process in 15504 process, and also can find corresponding 15504 process in CMMI process.

Differences

Different goal: CMMI and ISO/IEC 15504 have the different goals. CMMI’s goal is to improve the whole process capability in one’s organisation, but it depends on an assumption, process is the base of product’s quality. CMMI tells the company HOW TO improve the process and its capability.

Different method for evaluation: CMMI evaluates the capability of software process in according with data collection and analysis. The data collection and analysis of 15504 is based on each process, evaluate their properties.

Different structure: CMMI is a concept model on levels. For each level, they are associated with each other. And there is different concentration on each level. To reach one level, the organisation should achieve accomplish goals in all key process areas.

Qué es CMMI y por qué es importante para el Desarrollo de Software

The future of CMM and ISO

All standards have a reputation for being process and document heavy, and for getting «in the way» of the development process. IS0 9000/9001 in particular is seen as a paper exercise and a good example of the «certification doesn’t guarantee good product» issue mentioned previously.

For any of the standards, figuring out how they can be mapped to Agile methods is a significant challenge. Some work has been done on this already, but it is yet to achieve widespread adoption. In fact, it may never be widely adopted as it is not necessary.

Herbsleb, Anita Carleton, et al., Benefits of CMM-Based Software Process Improvement Initial Results (CMU/SEI-94-TR-13). Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University.

Mapping TSP and CMMI, McHale and Wall, 2004.

Software Quality

Let’s begin by defining this topics main concept: according to ASQ «Software quality is defined as a field of study and practice that describes the desirable attributes of software products. There are two main approaches to software quality: defect management and quality attributes.» (ASQ, 2020).

This approach to software quality is best exemplified by fixed quality models, such as ISO/IEC 25010:2011. This standard describes a hierarchy of eight quality characteristics, each composed of sub-characteristics:

  1. Functional suitability
  2. Reliability
  3. Operability
  4. Performance efficiency
  5. Security
  6. Compatibility
  7. Maintainability
  8. Transferability
ISO/IEC 25010:2011 Software Quality Model

The standards are a good measure for the software quality process so, some of them are:

ISO/IEC 9126

This standard deals with the following aspects to determine the quality of a software application −

  • Quality model
  • External metrics
  • Internal metrics
  • Quality in use metrics

ISO/IEC 9241-11

Part 11 of this standard deals with the extent to which a product can be used by specified users to achieve specified goals with Effectiveness, Efficiency and Satisfaction in a specified context of use.

ISO/IEC 25000:2005

ISO/IEC 25000:2005 is commonly known as the standard that provides the guidelines for Software Quality Requirements and Evaluation (SQuaRE). This standard helps in organizing and enhancing the process related to software quality requirements and their evaluations.

Software Testing – ISO Standards – Tutorialspoint. (n.d.). Tutorialspoint. https://www.tutorialspoint.com/software_testing/software_testing_iso_standards.htm

What is Software Quality? | ASQ. (2020). ASQ. https://asq.org/quality-resources/software-quality

Let’s stop everything and remember…

Well, this semester is at its end, we’ve come a long way, what a time we have had, for sure they have been quite an exciting but at the same time harsh six months, let’s recapitulate each experience…

First, I thought (and keep thinking) that every day was an opportunity to keep working on the things I love, so I took a moment to think about it and continue moving towards my goals; classes related I really enjoyed all the topics in this subject, all of them were really important for us to understand and implement in the creation of our projects.

Photo by Breakingpic on Pexels.com

Topics that were really interesting for me were like Software Development related, Software Cycle of Life, Use Cases, Testing, UML, etc.

Each one made me create new knowledge webs and interconnections inside my head, now I know a lot more about creating and deploying well developed products.

Photo by Pixabay on Pexels.com

Also, during this semester I had the opportunity of being in 3 representative teams and wow, were they quite a challenge, but hey, I really enjoyed being part of them and ended up with great results in all of them; I had 4 sold out concerts and it was extremely rewarding, all my passions were fulfilled during this moments.

Diego Gasca‘s Photo

I’m really thankful with everyone that helped me during this past months, because without them I couldn’t have done everything that I achieved during this beautiful semester.

I think that one of the best parts of remembering experiences is to feel inside them again, try it anytime soon, it really makes you feel goosebumps and filled with happiness each time you do it.

At this time I cannot leave without wishing you a very Merry Christmas and Happy Holidays!

Photo by Kris Lucas on Pexels.com

Thanks for being part of this, and know this is not the end…

-RC

Those glasses again… O-O and Agile

Is Object Oriented tied to Agile? Well, this is quite a big question and we should discuss a lot about Scrum or even Extreme Programming in order to get an answer, anyways, I don’t think it would end up being an objective one, I will just present some data, you make your own conclusions.

Photo by hitesh choudhary on Pexels.com

The principles of object-oriented design (OOD) address the need to minimize the complexity and impact of change by minimizing dependencies through the use of loosely coupled and highly cohesive classes, interfaces, and packages. These are the logical containers of software functionality.

Agile Development and Object-Oriented Programming share many similarities as trends in the software community.

Photo by Christina Morillo on Pexels.com

The first aspects of Object-Oriented Programming originated in the 1960’s with Simula. Smalltalk carried it forward into the 70’s and 80’s. It finally crossed the chasm and hit the mainstream in the early 90’s. C++ and Java helped greatly in driving its adoption.

Object-Oriented Programming and the principles it promotes make a big difference in creating large scale, maintainable code. It allows developers to design and write code in more productive ways than were possible with procedural languages.

Agile Development as a trend is about a decade behind Object-Oriented Programming. According to Wikipedia, adaptive software approaches were described in a paper as early as 1974. Scrum got started in the mid 80’s. XP and several other Agile variants were used in the 90’s. But it all sort of came together in 2001 when the Agile manifesto was written.

Agile Development attacks things at a higher level than object-oriented: our processes and approach. Its principles can greatly improve the productivity of a development team. As it has evolved, we’ve learned that it can also help in creating highly productive large scale teams.

Photo by fauxels on Pexels.com

Both can easily be misused. Many people thought they were doing object-oriented development just because they used C++ (even though they continued to use it like C). In Agile, the same is also true. Just because you’re doing a daily stand up, doesn’t mean you’re getting all you can out of it.

So, it goes all into your consideration, do you think they are correlated as much as its needed for them to be considered as tied concepts?

-RC

TDD, how to develop by testing

Test Driven Development (TDD) is an evolutionary approach to development which combines test-first development where you write a test before you write just enough production code to fulfill that test and refactoring.

Photo by Startup Stock Photos on Pexels.com

Steps?

The first step is to quickly add a test, basically just enough code to fail.  Next you run your tests, often the complete test suite although for sake of speed you may decide to run only a subset, to ensure that the new test does in fact fail. You then update your functional code to make it pass the new tests. The fourth step is to run your tests again. If they fail you need to update your functional code and retest. Once the tests pass the next step is to start over.

TDD completely turns traditional development around. When you first go to implement a new feature, the first question that you ask is whether the existing design is the best design possible that enables you to implement that functionality.

There are two levels of TDD:

  1. Acceptance TDD (ATDD).  With ATDD you write a single acceptance test, or behavioral specification depending on your preferred terminology, and then just enough production functionality/code to fulfill that test. The goal of ATDD is to specify detailed, executable requirements for your solution on a just in time (JIT) basis. ATDD is also called Behavior Driven Development (BDD).
  2. Developer TDD. With developer TDD you write a single developer test, sometimes inaccurately referred to as a unit test, and then just enough production code to fulfill that test. The goal of developer TDD is to specify a detailed, executable design for your solution on a JIT basis. Developer TDD is often simply called TDD.
Photo by mentatdgt on Pexels.com

Why using TDD?

A significant advantage of TDD is that it enables you to take small steps when writing software. This is a practice that I have promoted for years because it is far more productive than attempting to code in large steps.

To learn more visit Agile Data Page: Introduction to Test Driven Development (TDD) or watch the next video.

-RC

Diseña un sitio como este con WordPress.com
Comenzar