Wiki-2b

From Expertiza_Wiki
Revision as of 00:50, 27 October 2012 by Rbyredd (talk | contribs)
Jump to navigation Jump to search

Automated Testing

Every software development group tests its products but still defects are always present in delivered software. Test engineerings always try to catch these errors but they always creep in and they often reappear, even with the best manual testing processes. Automated software testing is the best way to increase the effectiveness, efficiency and coverage of software testing. Automation Testing is the use of software to control the execution of tests, the comparison of actual outcomes to predicted outcomes, the setting up of test preconditions, test design, and other test control and test reporting functions. usually, test automation involves automating a manual process already in existence that uses a formalized testing process. There are many tools available to perform automation testing today.

Manual Testing

Manual testing is the method in which testing of the software is done manually. In this type of testing, a tester acts like an end-user. All features of a software are tested to know if the behavior of the software is exactly according to the expectations of the customer. The tester uses a test plan. Other than test plan, there are test cases written, which are used for implementing the test plan. Although manual tests may find many defects in a software application, it is a laborious and time consuming process. In addition, it may not be effective in finding certain classes of defects.

Why Automation Testing

Automated software testing has long been considered critical for big software development organizations but is often thought to be too expensive or difficult for smaller companies to implement. Many companies are recognizing the importance of automating the work of testers and including the auto-test as part of the regular build process. The results of the automatic test are seen as a measure of the current quality of the software. Combined with a code coverage tool it gives the answer to the all-elusive question: "How much of my code is currently running ok?."

The below factors make automation testing important:

Automated Testing is both Time and Money Saving

During software development cycle, software tests have to be repeated very often to ensure quality. Software tests need to be repeated, every time a change in the source code happens. For each release of the software it may be tested on all supported operating systems and hardware configurations. Repeating these tests manually is costly and time consuming. Once created, automated tests can be run over and over again at no additional cost and they are much faster than manual tests. The time to run these repetitive tests is reduced from days to hours by automated software testing. Saving the time directly translates into cost savings.

Improves Accuracy

Manual testers are bound to make mistakes during monotonous manual testing. With Automated tests, the probability of errors occuring is relatively low. Automated tests perform the same steps precisely every time they are executed and never forget to record detailed results.

Increases Test Coverage

Automated software testing can increase the depth and scope of tests to help improve software quality. Lengthy tests that are difficult to be conducted manually can be run unattended in Automation testing. They can even be run on multiple computers with different configurations. Automated software tests can easily execute thousands of different complex test cases during every test run providing test coverage that is impossible with manual tests.

Automated Software Testing Does What Manual Testing Cannot

A controlled web application test with thousands of users cannot be performed by even the largest software departments. Automated testing can simulate tens, hundreds or thousands of virtual users interacting with network or web software and applications.

Helps Developers and Testers

Shared automated tests can be used by developers to find problems quickly before sending the code for Quality assurance. Tests would run automatically whenever source code changes are checked in and in case of failure error reports would be automatically sent to the team or the developer. Features like these save developers time and increase their confidence.

Improves Team Morale

Automating repetitive tasks with automated software testing gives the project team , time to spend on more challenging and rewarding projects. Team members improve their skill sets and confidence and, in turn, pass those gains on to their organization.

Approaches to Test Automation

  • Code-driven testing: With the help of a variety of input arguments, the public (usually) interfaces to classes, modules or libraries are tested to validate that the results that are returned are correct.
  • Graphical user interface testing: User interface events such as keystrokes and mouse clicks are generated by testing framework, and observes the changes that result in the user interface and validates whether the observable behavior of the program is correct or not.
  • Code-driven testing

    Code driven test automation is a key feature of agile software development, where it is known as test-driven development (TDD). Unit tests are written to define the functionality before the code is written. Only when all tests pass is the code considered complete. Proponents argue that it produces software that is both more reliable and less costly than code that is tested by manual exploration. It is considered more reliable because the code coverage is better, and because it is run constantly during development rather than once at the end of a waterfall development cycle. The developer discovers defects immediately upon making a change, when it is least expensive to fix. Finally, code refactoring is safer; transforming the code into a simpler form with less code duplication, but equivalent behavior, is much less likely to introduce new defects.

    Graphical User Interface (GUI) testing

    A variation on this type of tool is for testing of web sites. Here, web page is the “interface”. Such a framework utilizes entirely different techniques because it is reading HTML instead of observing window events. Another variation is scriptless test automation that does not use record and playback, but instead builds a model of the Application Under Test (AUT) and then enables the tester to create test cases by simply editing the test parameters and conditions. Test-case maintenance is easy, as there is no code to maintain .As the AUT changes the software objects can simply be re-learned or added. It can be applied to any GUI-based software application. The problem with this model is that AUT is actually implemented using test scripts, which have to be constantly maintained whenever there's change to the AUT.

    Conclusion

    In a nutshell, Database Migration is a very efficient way to handle the discrepancies that occur between databases. i.e. changes made in one database not reflecting in other. It is a convenient way to alter the database in structured and organized manner. Rails migrations are mostly similar to version control of databases. Rails migrations are database independent but SQL scripts are not.

    References

    <references/>

    Additional Reading

    1. http://guides.rubyonrails.org/migrations.html#anatomy-of-a-migration
    2. http://www.ibm.com/developerworks/java/library/j-cb08156/index.html
    3. http://jacqueschirag.wordpress.com/2007/08/12/rants-about-rails-database-migrations
    4. http://www.oracle.com/technetwork/articles/kern-rails-migrations-100756.html
    5. Agile Web Development With Rails, Fourth Edition, Sam Rooby, Dave Thomas, David Heinemeier Hansson.