Communicating Processes for Modeling Software with Concurrency