In the real life, set of stackholders like Product Owner, Product Manager, UI Designer (If UI is involved), QA Manager, QA Engineers, Developers and any one else who influence the decision will get together and decide how software is going to work like.
Say, we are developing an app and it has got simple functionaly. A login screen. Now all stackholder will get together and decide what login screen will look like and what it will do. Eg. In case of right username and right password, let the user in. In case of right username and wrong password, display a notice 1. In case of wrong username display a notice 2. In case of empty username and empty password, display a notice 3.
Based on the acceptance criteria, QA Engineers create manual tests. Once the feature is ready, QAEs execute manual tests against the product. In case of any of test fails, QA raise the bug.
This is how it works most of the time.