सॉफ़्टवेयर, अनुसंधान एवं विकास