b.Imagine an operation is specified as followscontext Cust

b.Imagine an operation is specified as follows:context: Customer::compareDetails(otherName : String, otherAddressDetails : AddressDetails)pre:– otherName and otherAddressDetails are not nullpost: — if the name of this object matches otherName and the addressDetails of this object matches otherAddressDetails — return true– otherwise return falsec.If an increment of code has passed unit tests, why might it still need to be tested again?d.The following Java code represents an implementation of the operation specified in part b.public boolean compareDetails(String name, String[] addressDetails) { if (!this.name.equals(name)) return false; if (this.addressDetails.length != addressDetails.length) return false; for (int i = 0; i < this.addressDetails.length ; i++) if (!this.addressDetails[i].equals(addressDetails[i])) return false; return true;}i.Write down an executable assertion that could be used to verify the precondition of the method.ii.If an executable assertion that verifies a precondition fails at runtime, where should we look for the source of the problem and why?e.Explain what is meant by executable documentation and identify two forms of it.