Software  Reliability is  an  important  facet  of software  quality. Software reliability is the probability of the failure free operation of a computer program for a specified period of time in a specified environment. Software Reliability is  dynamic and stochastic. It differs  from  the  hardware  reliability in  that  it  reflects  design perfection,  rather   than  manufacturing  perfection.  This  article provides  an   overview  of  Software  Reliability  which  can  be categorized into: modeling, measurement and  improvement, and then  examines  different  modeling   technique  and  metrics  for software  reliability,  however,  there  is  no single  model  that  is universal to all the  situations. The article will also provide an overview  of  improving  software  reliability  and  then  provides various  ways to improve software reliability in the life cycle of software development