Saturday, May 14, 2011

Software Development - a Practical Approach to Software Metrices


Free E Book Quality and Testing.pdf at Guru of Testing


Thursday, May 12, 2011

Software Testing Hierarchy in IT


Þ      Associate Test Engineer

§         Manual testing of Web and Windows-based applications (Unit Testing, Integration Testing, System Testing, Regression Testing, Compatibility testing, GUI etc.).
§         Analyze functional specifications and write manual test cases (positive, negative, boundary, etc.) from the functional specifications or requirements
thoroughly tests software to ensure proper operation and freedom from defects.

Þ      Senior Test Engineer

§         Participate in Requirement Gathering Sessions.
§         Be involved in preparation of Test Plan document.
§         Preparation of RTM, Test Cases and Test Scenarios. Smoke testing, Functional testing, Retesting and Regression Testing, End to End Testing, User Acceptance Testing, Automation tools.
§         Bug Logging, Prioritizing, Tracking and Reporting.
§         Participate in Peer Reviews and Lead reviews.

Þ      Team Leader

§         Onsite / Offshore Coordination and Client Facing.
§         Have profound Knowledge of SDLC, Software Testing Life Cycle and well versed with the testing concepts.
§         Be involved in Black Box Testing involving Functionality, Usability, Regression and Sanity testing.
§         Be involved in Test Case Design, Test Case Review, Test Case Execution, Test Results reporting, Defect Reporting and Tracking.
§         Project Management and Process Improvement.
§         Execution of test cases.
§         Defect tracking and reporting.
§         Execution of Test Management tool like Quality Center 9.2 and Clarify.

Þ      Manager QA

§         Advise Project Lead and Project Manager on adherence to project process and quality objectives.
§         Conduct work products audits and attend end phase assessment meetings/close out meetings.
§         Facilitate the project team as per defined process.
§         Constant monitoring of the established quality system (QMS).
§         Focus on continuous improvement .
§         Constant monitoring of quality system performance and achievement of objectives  Participate in project review, end phase meetings, etc.
§         Reviews the process modifications and improvement activities carried out along with the MR/SEPG head.
§         Confirm measurement objective (Determined by management perception, client requirements, problems we face) .
§         Define scope of measurement(Boundaries of measurement, type of projects / processes)
§         Analyze project metrics.
§         Analyze and fine tune metrics, processes (Analyze data sanity, do root cause analysis, decide process / metric fine tuning)

Þ      Project Manager/Delivery Manager

§         Responsible for project Management.
§         Resource Management.
§         People Management activities.
§         Automation Architecture Designing.
§         Automation Framework Development.
§         CoE [Center of Excellence].


Guru of Testing: Practical Implementation of Data Structures in Com...

Guru of Testing: Practical Implementation of Data Structures in Com...: "Practical Usage of Data Structures in Computers Stack - any recursive call Queue, Circular Queue - all the FIFO algo use this ..."

Practical Implementation of Data Structures in Computers


Practical Usage of Data Structures in Computers

  1. Stack - any recursive call
  2. Queue, Circular Queue - all the FIFO algo use this
  3. Linked List, Doubly Linked list, Circular Linked list - all the RDBMS
  4. Tree, Binary Search Tree - Where searching is required. Memory is stored in B tree
  5. Graph - Google Maps

Data structure is a particular way of storing and organizing information in a computer so that it can be retrieved and used most productively.
Different kinds of data structures are meant for different kinds of applications, and some are highly specialized to specific tasks.
Data structures are important for the following reasons:
  1. Data structures are used in almost every program or software system.
  2. Specific data structures are essential ingredients of many efficient algorithms, and make possible the management of huge amounts of data, such as large integrated collection of databases.
  3. Some programming languages emphasize data structures, rather than algorithms, as the key organizing factor in software design.

Stack
Undo functions use this to pop most recent action off top of stack, then second most recent, etc.
Queue
Process Scheduling normally uses a queue (how processes or threads are accessed after the initial work varies though). A queue is often used to save a group of data in an organized structure so that it is easily accessed immediately when needed since its a FIFO (First in first out). However; when filling information into that queue when that queue is FULL the rest of the information is lost. To combat this circular queue is used, which overwrites the other elements so that recent data is NOT lost.
                           An example of this like you mentioned would be the queue of resources of a computer. Because a computer does not have infinite resources a queue has to be used in order to allocate resources to those that need it. For instance a process would request some resources and it would be thrown into the queue and be given a priority level, based on this information the OS would then make a decision how many resources it needs and how much time it will be given. In order to allow multiple processes to make use of this, any process that has processing that needs to be done will put in a request in that queue.
Tree
Directory traversal
Binary Search Tree
Searching quickly for a given element
Graph
Stores data so that you can think of it as a mathematical "plane" where the data is plotted. It is effective at representing (possibly) very complicated relationship between data, since (if you look at the image in the link) multiple "links" can exist between more than two pieces of data, as opposed to a linked list where you can only have a link to your left and to your right.
Hash Map
Searching for certain blocks of memory (i.e. when using many pointers) Hashing occurs when you have, say, an address book on your computer. It might use a hash map so that when you enter John Smith, his phone number and other information are available. This is because there is a hashing function that points to a certain location in memory when "John Smith" is entered. It would be a headache entering a memory address every time you wanted to access some simple information.
Linked List
Singly linked list offers movement in one direction between elements, doubly linked list offers movement back and forth between elements, and Circular linked list offers Circular navigation of similar objects (processes are one example) Use this when you want to be able to navigate between elements, because each element is linked to the next one and the one before it (for circular. noncircular linked lists have a beginning and an end). Imagine your web browser...you click "back" to go to the previous page, and you can click "forward" to go to the next. You can think of this as a linear linked list. A photo slide show that goes to the next or previous photo and then eventually starts at the beginning can be thought of as a circular linked list. (They're not necessarily implemented like that but it's a good way to visualize it)
A linked list has many applications that it’s not really possible to simplify it into one. For instance, you could link accounts (objects) through the queue of the nodes of an element in the linked list. In a linked list, a node has a previous and a next node, which effectively links all the elements together so that they can be traversed. Depending on the style of the linked list, this allows forward traversal backward traversal, or both directions. One thing to note is that a linked list can be dynamic in terms of size since all that needs to be done to add a new note is just attach it to the end of the list. However; in terms of performance the speed of that would be O (N) which means that the performance is heavily dependent on the size of the list.

Two data structures that are primarily used in a file cabinet are:-

1>Arrays

2>Link Lists

ARRAYS:-

Arrays are linear data structures consisting of a group of elements that are accessed by indexing. In most programming languages each element of array has the same data type and the array occupies a contiguous area of storage.

By data types we refer to integers, characters etc.

Integer arrays can be used to store numbers and similar numerical values.

Similarly character arrays can be used to store series of characters and so can be used to store names, address, and other strings.

So as a file cabinet consists of different files with variety of information, these arrays can be used to store variety of data.

Implementation of arrays is easy(can be implemented by several programming languages including C and C++)

We can also assign memory to arrays statically and dynamically.

Arrays are also used to implement mathematical vectors and matrices, as well as other kinds of rectangular tables. In early programming languages, these were often the applications that motivated having arrays.

Because of their performance characteristics, arrays are used to implement other data structures, such as heaps, hash tables, queues, deques, stacks, strings, lists etc .So am major tool to implement several other data structures.

 LINK LISTS:-

A linked list is one of the fundamental data structures and can be used to implement other data structures. It consists of a sequence of nodes, each containing arbitrary data fields and one or two references ("links") pointing to the next and/or previous nodes. The principal benefit of a linked list over a conventional array is that the order of the linked items may be different from the order that the data items are stored in memory or on disk, allowing the list of items to be traversed in a different order. A linked list is a self-referential data type because it contains a pointer or link to another datum of the same type. Linked lists permit insertion and removal of nodes at any point in the list in constant time, but do not allow random access. Several different types of linked list exist: singly-linked lists, doubly-linked lists, and circularly-linked lists.

Linked lists can be implemented in most languages. Languages such as Lisp and Scheme have the data structure built in, along with operations to access the linked list. Procedural or object-oriented languages such as C, C++, Java typically rely on mutable references to create linked lists.


Linked lists are used as a building block for many other data structures, such as stacks, Queues and their variations.

The "data" field of a node can be another linked list. By this device, one can construct many linked data structures with lists.


It is necessary to emulate these types of data structures as these are the basic data structure types and other compels data structures can be built from this.
These data structures are excellent means of storing and accessing data.

I would use this type of program in a typical project like a railway reservation project or a library system. Here we need to store a lot of data and need to frequently access these data. So these data structures can come handy.

10 Tips for Decreasing Web Page Load Times

10 Tips for Decreasing Web Page Load Times
Patience is a virtue, but for many, it is often a difficult concept to practice. That is especially true for web users visiting a website that takes a long time to load. Users are enamored with speedy websites, and when a site responds slowly, visitors lose their patience and are less likely to come back.
Improving the speed of your website is important not only to users, but to search engine rankings as well. Last April, Google announced that they are now including website speed in their search ranking algorithms.


While this inclusion doesn’t hold the same weight as many of Google’s other ranking signals, it is still something that should be considered when planning out your website’s SEO efforts.
The following are some tips for decreasing your web page loading times.

1. Check the Current Speed of the Website

The first thing you will want to do is to analyze your current page speed. This allows you to track your improvement and ensure that any changes you make positively improves your page load times.
There are many free tools out there for checking how long it takes to load your website. Here are a few of them:
  • Pingdom offers an easy-to-use site speed test that mimics that way a page is loaded in a web browser.
  • Page Speed is an open source Firefox add-on that helps you assess the performance of your web pages. It also provides suggestions on how to fix performance issues.
  • Web Page Test is another great tool that shows you the speed and performance of your website in different browsers.

2. Optimize Your Images

Know when to use the appropriate file format for your images. Changing to a different file format can dramatically decrease the file size of an image.
  • GIF is ideal for images with few colors like logos.
  • JPEG is great for images with lots of colors and details like photographs.
  • PNG is the choice when you need high quality transparent images.

3. Don’t Scale Down Images

Avoid using a larger image than you need just because you can set the width and height attributes of <img> elements in HTML.
If you need a 100x100px image and you have a 700x700px image, use an image editor like Photoshop or one of these web-based image editors to resize the image to the needed dimensions. This lowers the file size of the image, thus helping to decrease page loading times.

4. Compress and Optimize Your Content

The task of compressing your website content can have a huge impact on reducing load times. When using HTTP compression, all of your web page data is sent in a single smaller file instead of a request that is full of many different files. For more information, see this Wikipedia article on HTTP Compression.
You can also optimize and compress your JavaScript and CSS files by combining them and minifying the source code.

5. Put Stylesheet References at the Top

Moving your stylesheet references to the <head> of your HTML document helps your pages feel like it is loading faster because doing so allows your pages to render the styles progressively. In addition, it doesn’t hurt that it’s the W3C standard.

6. Put Script References at the Bottom

Browsers can only download two components per hostname at the same time. If you add your scripts towards the top, it would block anything else below it on the initial loading of the page. This makes it feel like the page is loading slower.
To avoid this situation, place script references as far down the HTML document as possible, preferably right before the closing <body> tag.

7. Place JavaScript and CSS in External Files

If your JavaScript and CSS are directly in your HTML document, they are downloaded every time an HTML document is requested. This, then, doesn’t take advantage of browser caching and increases the size of the HTML document.
Always place your CSS and JavaScript in external files; it’s a best practice and makes your site easier to maintain and update.

8. Minimize HTTP Requests

When visiting a new web page, most of the page-loading time is spent downloading components of that page (e.g. images, stylesheets, and scripts).
By minimizing the number of requests a web page needs to make, it will load faster. To reduce HTTP requests for images, one thing you can do is to use CSS sprites to combine multiple images.
If you have multiple stylesheets and JavaScript libraries, consider combining them to reduce the number of HTTP requests.

9. Cache Your Web Pages

If you use a content management system that dynamically generates your web pages, you should statically cache your web pages and database queries so that you can decrease the strain on your server as well as speed up page rendering times.
When you cache your page, it saves a static version of it to be presented to the user instead of recreating it every time it’s requested.
For WordPress, check out WP Super Cache and W3 Total Cache (also read this WordPress codex entry on optimizing/caching WordPress). Drupal core has native caching.

10. Reduce 301 Redirects

Every time a 301 redirect is used, it forces the browser to a new URL which increases page-loading times. If possible, avoid using 301 redirects.

Conclusion

Web page speed is a metric that should not be ignored if you are concerned about providing an optimal user experience.
Want more information on decreasing your website’s page load times? Read Google’s section on page speed, which provides tools, articles, and community feedback regarding website speed. Good luck and happy optimizing!