The basic list of categories for heroes (offense, defense, tank, support) is simple enough to not confuse beginners, but it is oversimplified to the point where it is misleading to them.  The roles of the characters in the game go far beyond picking Offense heroes while on Attack and Defense characters while defending a point.  However, not all of these heroes fit inside the lines neatly – some are a hybrid between two of the categories in terms of functionality. 

These are the current categories.
Offense: Doomfist, Soldier 76, McCree, Pharah, Tracer, Genji, Sombra, Reaper
Defense: Hanzo, Widowmaker, Bastion, Mei, Torbjorn, Junkrat
Tank: Winston, DVa, Orisa, Roadhog, Zarya, Reinhardt
Support: Zenyatta, Symmetra, Mercy, Ana, Moira, Lucio

McCree (Offense) is not really offensive at all; he lacks abilities to help approach enemy setups.  His damage output and low mobility makes him have more in common with Defense heroes. 

Sombra (Offense) has some traits of a Support.  Her hacking tips the balance of team fights by blocking enemy healing, increasing team healing and negating enemy abilities.

Mei (Defense) has characteristics of a Tank.  Compared to other Defense heroes, her health is higher but her damage output is lower.  She has abilities to heal herself, protect herself from damage and using an ice wall protect your team from taking damage. 

Junkrat was a Defensive hero when he was first designed, but now that he has two concussion mines which don’t damage him, he has the mobility to be used both offensively and defensively.

Soldier 76 (Offense) is also equally suited for defensive play (and even a light Support role with his Biotic Field healing).  Sprinting and good mid-range damage are helpful on either Attack or Defend.

Symmetra (Support) has characteristics of a Defense hero: high damage coupled with high vulnerability to damage, limited mobility and turrets and other buildings which require setup.

Blizzard may re-categorize the hero roster in the future, or revise the heroes to better fit their intended category.  Last year, Roadhog’s character design was criticized for not being Tank-ish enough and Blizzard responded by reducing his damage output somewhat and increasing his health pool, which many people approve of.