It is expected that a system fulfills the needs of the various end users and the expectations that each end user has of the needs. “Needs” at the highest level are really the “string of requirements” aka business flows/use cases. On the other hand “Expectations” are what the end users expect of the “Needs” – For example what does working correctly mean?, how fast should it respond?, how secure should it be? and so on.
Expectations do span across the functional behaviour and also the various attributes (non-functional requirements). What is expected of a functional behaviour is pretty standard across any system irrespective of the domain it services and the technology it uses. The specific nature of correctness has to be expressed in the language of the business domain rather than being generic. The attributes on the other hand are indeed standard and can be used as it for any kind of system. The challenges related to this are : (1) which of these are important for successful deployment and (2) Is it clear and objective rather being vague & subjective? The attributes have to be specially assessed from the angle of clarity as to whether they are indeed objective.
A product or an application may be sold in different market places made up of different kinds of customers. Each class of customer may have different types of end users who use the product. And each end user may have different needs & expectations.
Testing is about ensuring that the product will indeed satisfy the variety of needs & expectations.
In summary “Needs are the features/requirements that allow me to get the job done whilst Expectations are how well the need is satisfied.”
The picture below illustrates this.