- A systematic approach to building layered software architecture is proposed. Separate layering models required oper abstracting of hardware, persistent data, and communication protocols are described. Implications on various types of testing are discussed.