A philosophical approach on software testing