When you create applications for millions of people world-wide, you can not leave anything to chance. Google’s success in the app market can be attributed to the high quality of software they deliver. Google uses a unique ACC based testing strategy to align their testing efforts with development.

In our webinar session, “How To log bugs the Google way”, we have covered the testing strategies used by Google to successfully test their software products. The webinar gives insights on how Google uses the ACC model to test its products and develop app features. You can also watch the complete recording of our webinar session here:
The ACC Methodology
ACC stands for Attributes, Components & Capabilities:
- Attributes that describe the product’s purpose and goals.
- Components that identify the various parts.
- Capabilities that indicate what the product actually does.
The ACC model basically helps you prioritize your testing efforts in line with app features that matter the most. This model of software development offers more flexibility and scope for testing especially when new features are introduced, something which Google has capitalized to develop new and better app features.
The planning of tests with the ACC model helps you to know what test cases need to be written. Components perform some function to satisfy an attribute of the product and the result of this interaction is providing some form of capability to a user. ACC thus helps the planner with a bird’s eye view of the software product.
a) Attributes
These are those aspects that describes the product’s purpose and goals. Just like adjectives that describe nouns by giving some information, an attribute describes qualities of an app like speed. For example, the attributes for a mobile wallet app can be – Secure, Easy, Reliable, Configurable etc.
You can create a list of attributes for a software if you can answer the following:
- What the product does to support the core reasons for the product existence?
- Why is it so interesting to customers?
- Qualities that promote the product and distinguish it from the competition.
You can use the following tips for coming up with attributes:
- Keep it simple. Don’t spend hours getting the list of attributes. The simpler, the better.
- Keep it accurate. The information should come from a reliable source or reviewed, approved and accepted by the team.
- Keep it moving. The list might increase as you use the ACC table, do not wait to make it perfect.
- Keep it short. There should not be more than 12 attributes.
b) Components
They are the building blocks that together constitute the system. Just like a noun that denotes a person, animal, place, thing, or idea, a component defines an app feature. Examples include Signup, Login, Settings, Search, Cart, Payment etc.
You can create a list of components if:
- You have the updated design document.
- You have access to the application.
- You can go and ask each and every developer on the component/feature that they are working on.
Tips for coming up with attributes include:
- Choose the major app features and not all the features of the application
- Keep the list small. 10 is good and 20 is too many!
c) Capabilities
Just like a Verb that describes an action, state, or occurrence, capabilities represent the actions the system performs based on the command or input. These are activities that a user is trying to achieve in the application. They form the intersection of component and attributes. For example, in case of a mobile wallet with the component as “profile” and attribute as “configurable”, the capabilities will be:
- User should be able to configure their bank account with the wallet.
- User should be able to enable and disable their bank account.
- User should not be able to add accounts which does not comply to the respective country’s regulations.
You can come up with capabilities if,
- You are able to intersect the attributes and components.
- You understand how the product works.
Tips for coming up with capabilities:
- List only the most important capabilities.
- These are mostly user oriented and conveys a user’s view of the system.
- Capabilities can be designed to form use cases which in turn can have multiple scenarios for testing which form the test cases.
More Examples of capabilities for Mobile Wallets
- Users should be able to signup with their social accounts.
- Before completing the transaction, a confirmation message should be visible to the user.
- On adding money from the user’s bank, the wallet should be updated with the correct
- On adding money from the user’s bank, the user should receive a confirmation message/email.
- Adding money from the bank should be done over https protocol.
Thus the ACC model gives you a bird’s eye view of the product’s key attributes, components & capabilities. With the ACC table it becomes easier for project managers to discover vulnerable app components and attributes that need attention. You can access the summary of the key points covered in the ACC model with this Slideshare link:
Write For Us
Want to write for us? We’d love to publish guest posts from testers & QA experts who can offer unique & useful perspectives in software testing. Share your own testing experiences & tips with our readers.
To get featured, mail us your article at Bharath@99tests.com with the subject line ‘Guest Blogging’. Don’t forget to provide a short bio & social links for your byline. We allow 1 do-follow link to your website from the article body, as long as it is not promotional. Do write to us, if you’d like to learn more.
Very useful stuff.
Thanks for sharing a great way of testing future products.
It is so helpful while developing test cases for any product.
Really helpful. Thanks 🙂
Thank you for the Information. ACC is a very useful tool to create Quality testing efforts.
Thank you 99tests team.
This one really nice – amazing way to do test planning and then develop & manage tests.
It’s good to know the methodology used by Google to Test their software. This one is easy to understand at a level when there is a product launch. Would be interesting to know how they plan small changes, like increasing performance or changing few algorithms.
The main thing that comes out of this is, keep the things simple and think from a very high level like a user uses the software,so you can think like user and test like user.