The simple answer: Everyone.
Actually this goes for any business. Quality is not a department or a person, it is something a company needs to live and breath from top to bottom.
It Starts With Development
The development team creates the code. If the software contains bugs, the developers created them.
If you are using third party libraries, developer may have inherited some bugs, but again, it is up to the developers to deal with them.
Quality is as much an attitude as a practice.
If you don't own the code as a team and own quality as a team; you won't have the right attitude to deliver high quality. That is, if you think that quality is something someone else will solve, you will shift your thinking on testing code… the wrong way.
So own the code. Own quality. Automate as much as you can.
Unit tests, TDD/BDD, integration tests, user interface testing, automated builds, pair programming, code reviews, group code ownership are all tools.
Actually It Starts With The Customer
It starts with really understanding the customer domain.
A lot of the bugs and problems I've seen over the years stem from not truly understanding the customer domain. If you don't understand what the customer really needs and the details of the business rules you will build the wrong thing; correctly.
The ability of the development team (and User Interface (UI) designers) to communicate well with the customer (and business analysts) is critical to being an effective developer. It really doesn't matter how good your code is if you blow the understanding; you've built the wrong thing.
The customer (and/or representatives) must ensure they are available on an as close to real time basis as possible to resolve communication and understanding issues and avoid drift. They are also responsible for helping define the acceptance tests.
Good software depends on the quality and frequency of communication.
Domain and code language must match as closely as possible. Code in the language of the business domain not some development abstraction or you will constantly risk misunderstanding and translation errors.
Back to Development
Did I mention that development creates the code and therefore they also create any bugs?
Developers also understand the design of the code the best.
Mastering the ability to test your software and design your software to be testable is just as important as mastering your ability to write and design application code; maybe more so.
So knowing what to test from a code perspective is driven by development.
The quality assurance (QA) team should ideally find nothing. This is because in an ideal world, communication with the customers is perfect, functionality is constantly being validated with the client and lots of automated and other testing is occurring.
In reality, QA needs to work with the customer to understand and flesh out the tests that will prove that the business requirements have been met. As well, good QAs have a knack for finding combinations that test circumstances not imagined by the customer or the developers.
But it should never be an us and them.
Lets face it. Customers and business analysts don't have all the answers ahead of time. User interface designers and developers may introduce an application that is not optimal but meets the basics of the functionality and business rules.
This necessitates redesign, re-coding and refactoring… and re-testing.
This is why automation is good.
Quality Is Everyone
And the rest of the team including project managers, management, infrastructure, database administrators, product managers, marketing, sales, operations and any other stakeholders?
They are not off the hook. In fact they are integral to quality.
Nothing worse than someone sitting and blaming poor quality on someone else. Remove roadblocks. Take some of the time pressure off. Encourage and allow the team to delivery quality. Roll up your sleeves and improve the quality of part of the process or application. Be part of the solution.
Quality is a culture the permeates an entire organization.
Everyone should be looking at what they can do to deliver quality better, faster and cheaper.
Quality is owned by everyone.