“开发软件系统”实践的实施过程如下图所示:
(1)需求获取与分析:
针对这些要求,实践人员需要针对特定的应用领域(如家庭服务、信息管理、生活娱乐、社交服务等等),结合具体的问题来构思软件需求,包括软件系统的功能性需求和非功能性需求,从所需的工作量、开发技术、工具和设备等多个方面评估所构思软件需求的实现可行性,并依此来调整、优化和固化软件需求。在此基础上,对所构思的软件需求进行建模,形成用UML描述的软件需求模型,并对需求模型进行分析以发现和纠正不准确、不一致和模糊的软件需求,撰写软件需求文档并对其进行评审,以确保软件需求的正确性、准确性、完整性、一致性等,以此作为软件开发的依据。
(2)软件设计与建模
针对某次迭代需实现的软件需求(包括功能性和非功能性需求),遵循软件工程的设计原则,采用诸如面向对象的软件设计方法,对该软件系统进行设计,包括体系结构设计、数据设计、人机界面设计、子系统/构件设计、类设计等,产生支持软件需求实现的解决方案,建立起基于
UML 的软件设计模型,撰写软件设计文档并对其进行评审,以确保软件设计方案的正确性、准确性、完整性、一致性、可追踪性等,以此作为指导软件编码和测试的依据。
(3)代码编写与测试
以软件设计模型和文档为基础,采用诸如面向对象程序设计方法,借助特定的程序设计语言(如
Java、Python、C++等),编写目标软件系统的程序代码,并对所编写的代码进行一系列的软件测试,包括单元测试、集成测试、确认测试等等,根据测试所发现的问题来定位和纠正代码中的缺陷,最后产生可运行的目标软件系统。
(4)基于群智方法、借助群智资源来开展实践
在整个实践过程中,实践人员需要加入到开源软件托管社区(如 GitHub、SourceForge、码云等)和软件开发知识问答社区(如 Stack Overflow、CSDN
等),以借助群智资源来促进软件系统的开发,具体表现为以下几个方面。首先,在开源软件托管社区中寻找可有效支持软件系统(部分)需求实现的开源软件或其代码片段,通过对开源软件或其代码片段的重用来促进目标软件系统的开发。其次,针对软件开发过程中遇到的多样化和个性化技术问题,到软件开发知识问答社区去寻找相关的答案,从而分享开源社区中软件开发者群体的知识和经验,高效、快捷地解决软件开发问题。