-more-
There is NOT a Quality Assurance team, or a Testing Team, or Testing Services because this created a 'over the wall, or safety net' environment.
No project gets testing resources as some right of its existence. The onus is on the development teams to solicit help from testers and convince them that their project is exciting and full of potential
Instead, each team (comprised primarily of SWEs, and a few STEs, and occasionally some TEs) own the quality of their product.
There was NO mention of Architects, QA, ScrumMasters, or Project Management, or PMO office, or Change Control
-more-
-more-
This looks very close to our idea of Software Engineers. Basic responsibilities include feature story interpretation, code architecture, functional code creation, product architecture, and health monitoring.
-more-
Not presently dedicated full time. We do have some technically oriented test engineers. We do have Software Engineers that take the 'lead' on implementing 'best practices' and tools for the benefit of the team, and contributing to a better quality software development process.
-more-
In fact our QA Engineers, and at times Software Engineers perform these type of tasks. Often times though, a TE is spread over multiple teams. This can dilute their ability to make an impact.
After reading HGTS, it became clear to me that Google is a large company with a diverse product line that cannot utilize one model of testing to fit all products. They choose to let teams decide what testing techniques fit their needs.
For example, the web product teams (like gMail, Google+, gMaps, etc.) are similar to us, and those are the examples the comparisons are drawn from.
-more-
Small tests lead to code quality, good exception handling, and good error reporting, whereas larger tests lead to overall product quality and data validation. No single test size in isolation can solve all of a project’s testing needs.
Instead of distinguishing between code, integration, and system testing, Google uses the language of small, medium, and large tests (not to be confused with t-shirt sizing language of estimation among the agile community), emphasizing scope over form. Small tests cover small amounts of code and so on.
-more-
Each of the three engineering roles can execute any of these types of tests and they can be performed as automated or manual tests. Practically speaking, the smaller the test, the more likely it is to be automated.
The mix between automated and manual testing definitely favors the former for all three sizes of tests. Having said that, it is important to note that Google performs a great deal of manual testing, both scripted and exploratory, but even this testing is done under the watchful eye of automation.
This is the convention at Google: Make the common case fast
-more-
Small tests are of short duration, usually running in seconds or less. They are most likely written by a SWE, less often by an SET, and hardly ever by TEs. small tests generally require mocks and faked environments to run. TEs rarely write small tests but might run them when they are trying to diagnose a particular failure. The question a small tests attempts to answer is, “Does this code do what it is supposed to do?”
-more-
Later in the development cycle, TEs can execute medium tests either manually (in the event the test is difficult or prohibitively expensive to automate) or with automation. The question a medium tests attempts to answer is, “Does a set of near neighbor functions interoperate with each other the way they are supposed to?” Medium tests cover multiple and interacting units of code in a faked or real environment.
-more-
Large tests cover three or more (usually more) features and represent real user scenarios, use real user data sources (not faked resources), and can take hours or even longer to run.
There is some concern with overall integration of the features, but large tests tend to be more results-driven, checking that the software satisfies user needs. All three roles are involved in writing large tests and everything from automation to exploratory testing can be the vehicle to accomplish them. The question a large tests attempts to answer is, “Does the product operate the way a user would expect and produce the desired results?”
End-to-end scenarios that operate on the complete product or service are large tests
"Projects at Google are encouraged to maintain a healthy mixture of test sizes among their various test suites. It is considered just as wrong to perform all automation through a large end-to-end testing framework as it is to provide only small unit tests for a project"
The general rule of thumb is to start with a rule of 70/20/10: 70 percent of tests should be small, 20 percent medium, and 10 percent large
If projects are user-facing, have a high degree of integration, or complex user interfaces, they should have more medium and large tests
-more-
Code coverage is a great tool for measuring whether a project’s tests have a healthy mixture of small, medium, and large tests
Engineers are able to create and view these coverage reports on-the-fly using the same tools they use to build and run their tests by specifying an additional command-line flag. Coverage reports are stored in the cloud and can be viewed internally in any web browser by any engineer
Each test must be independent from other tests so that tests can be executed in any order. Tests must not have any persistent side effects. They must leave their environment exactly in the state when it started
"Test Certified started out as a contest. Can we get developers to take testing seriously if we make it a prestigious matter? If developers follow certain practices and achieve specific results, can we say they are certified?
-more-
Add a test for each nontrivial bug fix
In a culture where testing resources were scarce, signing up for this program got a product team far more testers than it ordinarily would have merited.
They got lots of attention from good testers who signed up to be Test Certified Mentors.
"Developer unit tests are not enough, integration tests, system tests, UI tests were still needed."
My thoughts: Google originally had a team called “Testing Services” and focused the majority of its energy on UI validation and jumping into projects on an as-needed basis. They felt they could do better. It was later changed into “Engineering Productivity", and completely reversed their approach.
“Testing must not create friction that slows down innovation and development.“
My thoughts: We need to question everything we do with a value proposition. Does it add value? And if so, for whom? The developer? Product owner? Customer? AOL? We need to be willing to accept that 80% fast is often what is asked of us. Minimum Viable Product. Knowing we probably don’t have it right anyway, so let’s plan to iterate soon to make it better, and react as needed when we know more.
-more-
“If you are an engineer, you are a tester. If you are an engineer with the word test in your title, then you are an enabler of good testing for those other engineers who do not.”
My thoughts: Later on, this book details the difference between software coders, and testers. Coders are focused on creating a solution, with minimum complexity and effort, so that they can do more of the same again tomorrow. They are code writing optimists.
-more-
"A tester is looking to find breakage in a product. They look for ways to demonstrate assumptions that are lacking, or an interface that is not clear to a user, or software that does not work as assumed it would in other cases."
My thoughts: Testers looks for holes, gaps, etc. finding places where bugs exist. Testers take this pessimist attitude and use it to help SWEs learn how to live in both worlds. The goal is NOT TO PROVIDE QUALITY ASSURANCE to them, but to help demonstrate problems in the app that need fixed (bugs). And to help them switch to this way of thinking when needed. This chapter further asserts: “If you are an engineer, you are a tester”
-more-
"Although it is true that quality cannot be tested in, it is equally evident that without testing, it is impossible to develop anything of quality.”
My thoughts: Confirming that quality has to be thought by the code creators, and even then, the best code will have assumptions, which can lead to bugs. Testing, and thinking through ways to break the code help uncover the assumptions.
-more-
“We’ve not only prevented a lot of customer issues, we have greatly reduced the number of dedicated testers necessary to ensure the absence of recall-class bugs.“
My thoughts: I find it interesting that Google sets the bar somewhat low. Are they only concerned by “recall-class bugs” ? Is it acceptable to allow smaller bugs to sneak through because our stakeholders can tolerate 80% right? Do we expect the agile culture of reacting and fixing quickly thereafter to be good enough?
If this is the new Company culture, it needs to be demonstrated with patience from Management, and not immediate demands for hotfixes (outside of the two releases per week), or feedback as to “Why did we miss this?”.
We can’t have it both ways, at least not in the beginning. Also this needs to accept that testers are scarce, and attempts to find other ways to meet quality.
-more-
“Test exists in a separate and horizontal (across the product FAs) Focus Area called Engineering Productivity. Testers are essentially on loan to the product teams and are free to raise quality concerns and ask questions about functional areas that are missing tests or that exhibit unacceptable bug rates. Because we don’t report to the product teams, we can’t simply be told to get with the program.”
My thoughts: This is the secret to the whole program in my opinion. This sums up the value. SWEs own their own quality, SET and TEs are “quality experts” who add value by enabling more testing of code as well as product features, and are assigned to the teams who are in most need. This implies that some teams may need NO testers, or infrequent help? This also helps maintain a check & balance dynamic.
-more-
“If a development team wants us to take any shortcuts related to testing, these must be negotiated in advance and we can always decide to say no.“
My thoughts: The service provided by Engineering productivity is not a “rubber stamp of approval” especially if the tester does not agree, or feels that they are being marginalized. Although testing should not add friction, it also should not be shortcut. IMO, this is a risk based decision. If the team decides that minimal testing is acceptable for a specific feature, then that view should be shared by the tester. Examples are Performance and Load testing, or minimal security testing.
-more-
“A product team cannot arbitrarily lower the technical bar for testing talent or hire more testers than they need simply to dump menial work on them. Menial work around any specific feature is the job of the developer who owns the feature and it cannot be pawned off on some hapless tester. Testers are assigned by Engineering Productivity leads who act strategically based on the priority, complexity, and needs of the product team in comparison to other product teams.”
My thoughts: With a ratio of 6 to 1 (devs to QA now) it is obvious to me that we can’t expect the tester to do everything. Even if the team did did have the resources to use many manual testers, this is short sided, because it is not repeatable like automated testing is. Good point that the menial work is the responsibility of the engineer, and the tests written to cover it. Interesting how testers are assigned based on the Engineering Productivity leads, not a defacto resource on the team.
-more-
“The on-loan status of testers also facilitates movement of SETs and TEs from project to project, which not only keeps them fresh and engaged, but also ensures that good ideas move rapidly around the company” “It is generally accepted that 18 months on a product is enough for a tester and that after that time, he or she can (but doesn’t have to) leave without repercussion to another team” “One can imagine the downside of losing such expertise, but this is balanced by a company full of generalist testers with a wide variety of product and technology familiarity”
My thoughts: This sounds like a good idea, but with our limited number of projects, is this possible? We would need all the testers to consider changing it up. Maybe we could use a bidding system? Maybe by identifying more as SETs and TEs we can double up on some projects, and leave others to be independent on occasion? Maybe we review every 12 mo. Instead of 18 mo?
Question: Why have different engineering roles?
"It becomes necessary to distinguish between a feature developer and a test developer. For feature code, the mindset is creating and considering users, use cases, and workflow. For test code, the mindset is about breaking and writing code that will draw out cases that disrupt the user and his workflow"
-more-
Question: What kind of tasks does the SET do?
-more-
-more-
-more-
Most TEs get involved in some of this lower-level work where another set of eyes and more engineering expertise is needed. It’s a matter of risk: TEs find and contribute to the riskiest areas of the software in whatever manner makes the most sense for that particular product.
Some TEs spend much of their time programming, but with more of a focus on medium and large tests (such as end-to-end user scenarios) rather than small tests.
-more-
-more-
Tester Engineers deal with documents and artifacts of a far more temporal nature. In the early phases of a project, testers write test plans; later, they create and execute test cases and create bug reports. Still, later they write coverage reports and collect data about user satisfaction and software quality.
The TE is a facilitator of risk mitigation. A TE might decide to perform tests in house on some of the riskier areas and might request regression tests to be added by SWEs and SETs. Other tools at the TE’s disposal include manual and exploratory testing and the use of dogfood users, beta users, and crowd sourcing.
-more-
User stories describe real-world or targeted user paths through the application under test. They describe user motivation and perspective and ignore product implementation and design details.
They should use fresh user accounts when necessary and at 'big G', we often create any number of test user accounts that represent the users we describe in our stories. Also, use “old” accounts full of state.
-more-
Perhaps due to the quality-focused engineering practices at 'big G', regression runs often show less than a 5 percent failure rate. Importantly, this work is also mind-numbing to our TEs, who we interview for being highly curious, intelligent, and creative—we want to free them up to do the smarter testing that we hired them for: intelligent exploratory testing, risk analysis, and thinking about the user.
-more-
A significant amount of SET and TE time is spent developing large, end-to-end regression test case automation. These tests are important because they make sure the product works for the end user with all parts working together. The vast majority of these are written in Java using Selenium to drive the browsers and hold the test case logic.
-more-
“I really try to sink myself into the full user experience. The way you look at a product totally changes once you see your own actual data in it.“
My thoughts: This is so true. I see many hypothetical test cases by people at MQ, and if they would just use their own real data, they would see the problems as real also.
-more-
-more-
And then return to step 1...
“Watch out for maintenance and troubleshooting costs of your tests down the road Observe the 70-20-10 rule: 70 percent small unit tests that verify the behavior of a single class or function, 20 percent medium tests that validate the integration of one or more application modules, and 10 percent large tests (commonly referred to as “system tests” and “end-to-end” tests) that operate on a high level and verify the application as a whole is working"
“Scarcity of resources bring clarity to execution and it creates a strong sense of ownership by those on the project"
“Because you can’t simply throw people at a problem, the tool chain gets streamlined. Automation that serves no real purpose gets deprecated. Tests that find no regressions aren’t written. Developers who demand certain types of activity from testers have to participate in it. There are no make-work tasks. There is no busy work in an attempt to add value where you are not needed."
-more-
"Project mobility is a hallmark of being a 'big G' engineer. A general rule of thumb is that a 'big G'r is free to change projects every 18 months, give or take a quarter."
"The general rule in the case where a TEM can choose to take a project is simply to avoid toxic projects. Teams that are unwilling to be equal partners in quality should be left on their own to do their own testing. . Teams unwilling to commit to writing small tests and getting good unit-level coverage should be left to dig their graves in peace."
"It’s important to note that we are tasking a test team only with impact. We are specifically not asking the TEM and her team to ensure that the product is high quality."
-more-
"Make sure the person writing the feature is the person responsible for ensuring the tests for that feature get executed. Tests that get ignored become a liability.
"20 percent of the use cases account for 80 percent of the usage (give or take!). Automate the 20 percent and don’t bother with the rest. Leave them for the manual test passes."
-more-
"Collaboration with development is crucial. If you don’t have it, you are nothing more than damage control and that is not a good place to be."
"By writing automated tests, SETs and TEs often don’t realize they signed up to maintain them. SETs need to always remember that testing is the job of the developer and they should concentrate on getting testing into the workflow of the developer."
"We write tools to support this so that it is the developers who maintain the tests as they maintain the code. SETs can then focus on making the tests run faster and produce better diagnostics."
-more-
"After the team is assembled, I give them simple marching orders: add value! Preferably, add value in a repeatable way. From dev to product management, testing must be seen as an enabler. Anything less and you are in the way."
"Everything we did had to have a purpose. We questioned everything. Every test case, every piece of automation, and much of what we were doing didn’t stand this kind of scrutiny. If the automation didn’t provide clear value, we abandoned it. Everything was value-driven and the organization was there."
-more-
"Hung: I’ve learned to be skeptical of automation. Testers can get so passionate about some grand vision of automation for a product and spend months creating it only to have the product or platform change and negate everything they did. There is no greater waste of resources than writing automation that doesn’t stand the test of time. In my mind, it needs to be written quickly, executed quickly, and solve a very specific problem. If I don’t understand the purpose of an automated test immediately, then it is too complicated. Make it simple, contain its scope and above all, make sure it adds value."
-more-
"Hung: None of my testers specialize. Specifically, everyone does manual testing and I mean everyone. Exploratory testing is the best way of digging into the product and learning it well. The last thing I want is an SET to be a framework writer. I want them to be more involved with the product and know how to use it. Every tester must empathize with the user. They must be expert users and know the ins and outs of the whole product."
"We have daily coordination meetings to identify things that are important to test and ensure someone is covering them. Manual testing, to me, is about focus and coordination."
-more-
"Insisting on unit tests won’t make those unit tests valuable. Nothing a spec writer or a unit test can do (besides finding an obvious regression bug) will help us find a problem that a real user will encounter. This is my world, a tester’s world."
"Joel: I try to be practical about releases. I have software to ship and there are some things that have to give to make that happen. There are always tradeoffs. We may be an agile team, but we still implement a last-mile validation."
"Joel: Until I have all this totally figured out, I am going to favor a hybrid approach, a mix of developer testing, scripted testing, exploratory testing, risk-based testing, and functional automation."
-more-
"Joel: Test is the last frontier of engineering. We’ve solved a lot of the problems of how to develop software effectively, but we’ve still have a green field of opportunity to attack the really meaty problems of testing a product, from how to organize all the technical work that must get done to how we automate effectively, and responsively, and with agility without being too reactive."
"At times, we would realize something wasn’t possible at the component level and work with them to solve it at the unit level. This collaboration transformed the dynamic in the team so that the entire project team (dev + test) owned quality at the component level with test engineering focusing its time on improving process, framework, tooling, and integration testing."
-more-
"Once you’ve identified what’s critical for the specific product you’re testing, then focus the majority of your energy on validating that the core capabilities of the system satisfy those attributes. Worry about the easy stuff (UI tweaks and bells and whistles) only after the important stuff is right."
"The key is still to automate that process as much as possible. Have a machine do 90 percent of the work and apply human intelligence only to the last 10 percent (“the last mile” we call it) of the validation cycle."
-more-
"Automaton can do things like capture all the screens from devices, allowing us to do rapid side-by-side human inspection after our comparison algorithm filters out variance in display. Human intelligence is too valuable to waste on something a computer can do and should be applied where intelligence and human judgment is best; a repetitive task is definitely not one of those areas."
My thoughts: Map tile updates anyone?
-more-
"Our tools and approaches generally don’t need a lot of selling. We hold what we call Engineering Productivity Reviews weekly and demo our tools."
"We also have supporting infrastructure that provides smart ways to provide test prioritization to detect relevant tests that need to be run based on the specific code changes. This provides targeted test coverage, better confidence in code quality, and faster feedback, saving 'big G' a huge amount of engineering resources."
-more-
"A massive hiring surge has allowed me to build bigger teams and co-locate people doing similar work even if they were working on different products. Instead of lone testers embedded with their development teams, we had groups of testers sitting together and feeding on each others’ ideas. It worked wonders for productivity and morale."
Question: What is it that you like most about the organizational structure at 'big G'?"
"I actually explain this to candidates when I need to sell them on 'big G': Testers report to testers and testers determine their own fate. These are the two things I like best about 'big G'. Testers aren’t beholden to anyone. Test has our own hiring committee, our own review committee, our own promotion committee. And if you want another reason, it would be scarcity of the test role. No dev team is granted testing head count without having to earn it by putting their own skin in the quality game."
Question:"How is testing evolving, or devolving, at 'big G' and what is happening to address them?
"What has occurred is a decentralization of testing where the Engineering Productivity organization has been broken up and its pieces absorbed by the product teams. This, we believe, is a natural progression that occurs when a certain level of test maturity is achieved. 'big G' is simply no longer best served by keeping development and testing separate."
-more-
"Testing is often seen as a surrogate for quality and if you ask a developer what he is doing about quality, "testing" is often the answer. But testing is not about Quality. Quality has to be built in, not bolted on, and as such, quality is a developer task. Period. This brings us to:
Fatal flaw number one:
Testers have become a crutch for developers.
"When testing becomes a service that enables developers to not think about it, then they will not think about it. Testing should involve some pain. It should involve some concern on the part of developers. To the extent that we have made testing too easy, we have made developers too lazy. The fact that testing is a separate organization at 'big G' exacerbates this problem. Quality is not only someone else’s problem; it is another organization’s problem."
-more-
Fatal flaw number two:
Testers identify with their role and not their product.
"Whenever the focus is not on the product, the product suffers. After all, the ultimate purpose of software development is to build a product, not code a product, not test a product, not to document a product. Every role is in service of the product."
-more-
Fatal flaw number three:
Testers often worship the artifacts over the software itself.
"The value of testing is in the activity, not the artifacts. The product would be better served if the activities involved in testing were aimed exclusively at the source code. Tester must put the product first. "
-more-
Fatal flaw number four:
How often are products released only for users to find problems that escaped the testing process?"
"The problem with testing is we are acting like users; we need dogfooders who are actual users! Dogfood users, trusted users, crowd sourced users, and early adopters are all in a better position to find bugs than the test engineers. In fact the less testing a TE does and the more enabling of others, the better."
-more-
These two roles are actually diverging at 'big G'. The SET role is becoming more and more developer-like and the TE role is going in the exact opposite direction and becoming more user-like."
"Every user facing feature is managed by PMs and built by SWEs. Code for these features is tracked, managed, and maintained by a well defined workflow. However, the test code is traditionally managed and built by the SETs. Why? This is a relic of the history of how the roles evolved. But the evolution has peaked and it's time to treat test code as a first-class citizen: let it be managed by PMs and built by engineers.
-more-
-more-
The end of testing as we know and love it is a hard message to hear. But there is no arguing that the software development problem has been fundamentally altered by agile development, continuous builds, early user involvement, crowd-based testing, and online software delivery. Sticking to decades-old testing dogma is a recipe for irrelevance.
-more-
-more-
"It’s important to note that we are tasking a test team only with impact. We are specifically not asking the TEM and her team to ensure that the product is high quality."
"We are specifically not asking the TEM and her team to ensure that the product is high quality. We are not asking the TEM and her team to make the product ship on time. We are not going to blame testing if the product is unsuccessful or unloved by users."
Because the Author, and Architect has left Google (for Microsoft actually!)
In his blog, James Whittaker mentions that 'big G' is not the place it once was. The days of Engineers implementing great ideas has been replaced with one goal; beat Facebook with Google+. This, in his opinion is way to much of a corporate mandate, and has taken all the 'fun' out of how things used to be.
Does this mean that this process does not live on?