为了保证程序与问题统一,也保证程序能长期稳定使用,人们将程序的开发过程分为以下6个阶段。
(1)分析问题。编程的目的是控制计算机解决问题,在解决问题之前,应充分了解要解决的问题,明确真正的需求,避免因理解偏差而设计出不符合需求的程序。
例如,“小张问小李明天什么,小李说他明天必须要去补课,不能有其他安排”这一描述有两种理解:其一,“他”指小张,小张明天要去补课,小李的回答是提醒
他(小张)已有安排,既然无法一起活动,何必问自己(小李)的安排;其二,“他”指小李,小李表示自己明天要去补课,这就是他(小李)明天要做的事。
在实际开发中,提出问题和解决问题的通常是不同的人,自然语言又容易产生歧义,因此与需求方充分沟通,理清所需解决的问题是程序设计的前提。
(2)划分边界。准确描述程序要“做什么”,此时无须考虑程序具体要“怎么做”。例如对于“小李计划从家出发到学校”这一问题,只需要确定核心人物“小李”从“家里出发”,最终“抵达学校”,至于小李如何实现“家”到“学校”这一地址的转换,这里不需要考虑。在这一阶段可利用IPO方法(该方法将在1.5.2小节讲解)描述问题,确定程序的输入、处理和输出之间的总体关系。
(3)程序设计。这一步骤需要考虑“怎么做”,即确定程序的结构和流程。对于简单的问题,使用IPO方法描述,再着重设计算法即可。对于复杂的程序,应先“化整为零,分而治之”,即将整个程序划分为多个“小模块”,每个小模块实现小的功能,将每个小功能当作一个独立的处理过程,为其设计算法,最后再“化零为整”,设计可以联系各个小功能的流程。
(4)编写程序。使用编程语言编写程序。这一阶段首要考虑的是编程语言的选择,不同的编程语言在性能、开发周期、可维护性等方面有一定的差异,实际开发中开发人员会对性能、周期、可维护性等因素进行一定考量。
(5)测试与调试。运行程序,测试程序的功能,判断功能是否与预期相符,是否存在疏漏。如果程序存在不足,应着手和修复(即“调试”)程序。在这一过程中应做尽量多的考量与测试。
(6)升级与维护。程序总不会完全完成,哪怕它已投入使用。后续需求方可能提出新的需求,此时需要为程序添加新功能,对其进行升级;程序使用时可能会产生问题,或发现漏洞,此时需要完善程序、对其进行维护
综上所述,解决问题的过程不单单是程序编写的过程、问题分析、边界划分、程序设计、程序测试与调试、升级与维护亦是解决问题不可或缺的步骤。