规范性是指在软件开发时所必须遵循的约定、规范和流程,用于规范软件开发过程中的管理方法、设计方法、编码方法。很长一段时间,在软件工程学科中认为规范性来源于人为约定,但这种认识无法解释“约定”的本源,如为何要进行相关约定、相关约定的合理性。实际上,这些约定并非凭空产生,而是为了更加符合外部条件所作的规则和范围书面或口头上的汇总。
软件开发中的灵活性通常是指管理方法和开发方法的灵活性,更细微的范围内则是指编码的灵活性。如果在解决某一问题时具备了多种可选择的方法,则可以认为开发过程拥有灵活性。
灵活性是在规范性框架内所实现的,可选择的方法无法超过规范所允许的范围内。例如,在使用原生态ANSI C语言编写通信程序时,只能使用其Socket相关函数实现相应功能。
但软件开发中的规范性与灵活性并不冲突,如果将软件开发视为有目的性的创作,则规范性是与之俱来的。
开发工具本身对规范做出了大量的隐藏工作,而软件开发者虽然难以洞见这些规范的存在,其工作确实建立在一个严格的规范下。而扩展灵活性的主要途径,是扩展规范。例如,在GNU C环境中通过引入GLIBC函数库对ANSI C规范进行扩展后,则有更多的函数用于实现通信功能。
在规范并不完善和并不细致时,软件开发的灵活性较差。软件开发的过程中,其规范是逐渐形成的,通过对规范的扩展,则灵活性相应提升。例如,当开发者因为需要更丰富的通信功能,而自己动手开发相关函数库,实际也是在着手建立相应的规范。