内容发布更新时间 : 2024/11/2 17:34:31星期一 下面是文章的全部内容请认真阅读。
软件工程的精髓可以用著名的软件工程专家B.Boehm的七条基本原理来概括。
(1)用分阶段的生存周期计划进行严格的管理。 (2)坚持进行阶段评审。 (3)实行严格的产品控制。 (4)采用现代程序设计技术。
(5)软件工程结果应能清楚地审查。 (6)开发小组的人员应该少而精。
(7)承认不断改进软件工程实践的必要性。
目前绝大部分的软件方法都可以从这七条基本推倒出来。B.Boehm指出,遵循前六条基本原理,能够实现软件的工程化生产;按照第七条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。
下面扼要介绍软件生存周期在本次每个阶段的基本任务
2.2.1问题定义
问题定义的一个的关键问题是“要解决的问题是什么”,这个是这个阶段必须要明确要回答的问题。在没将问题定义好,试图准备下个阶段的任务。这明显是不成熟,甚至不可能的事。
选择操作 用户 主界面
调用 系统功能
单机模式
图2.1 系统模型 联机模式 本次系统设计中首先明确了需要解决的问题是五子棋AI算法和网络通信的
研究,基本的要求是设计一款能够实现网络和单机对战的五子棋游戏,提供一些基本的操作如退出系统,向后悔棋等操作,重点是放在AI算法和网络通信的研究。而并不是美工设计,也不是为了提供各种操作丰富的接口。主要是通过这种可视化的界面探讨AI,当然增加可玩性和美工会给系统润色不少。 上面只是很粗略的明确大概的方向,严格按照软件工程的方法这个阶段需要生产一份书面报告。需要通过对系统的实际用户访问调查,扼要地写出他对问题的理解,并在用户和使用部门负责人的会议上认真讨论这份书面报告,澄清含糊不精的地方,改正理解不正确的地方,最后得出一份双方都满意的文档。本系统的需求很少也很明显了。
6
2.2.2可行性研究
这个阶段要回答的关键问题:“对于上一个阶段所确定的问题是否可行?”为了
回答这个问题,我们需要进行一次大大压缩和简化了的系统分析和设计的过程,也就是在较抽象的高层次上进行的分析和设计的过程。 可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。
可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。可行性研究以后的那些阶段将需要投入要多的人力物力。及时中止不值得投资的工程项目,可以避免更大的浪费。
根据这些基本的概念,我在技术上主要是通过相关文档资料的查找后确定可行性,凭着大学期间打下厚实的专业科基础,特别是数据结构和算法,能够在这段时间内理解通透并应该有所改进,后来证明是对的。利用剩下时间也应该来说也比较充裕的。经济上暂不考虑。
下面主要从技术上进行分析:
工具: VC++是一款经久不衰的开发工具,它代表了基于Windows的C++语言产品,完美地集成了传统的编程工具,也集成了Windows中特殊的工具箱,如MFC(Microsoft Foundation Classes)和Windows资源编辑器(App Studio)。另外还加入了几种新工具,如轮廓应用程序生成器(App Wizard)、C++类管理器(Class Wizard)和类浏览器(Class Browser),以及各种各样为开发Microsoft Windows下的C/C++程序而设计的工具,MFC类库为我们提供了丰富的类资源。所以VC++是最好的选择。
本程序将采用VC++的单文档的视图框架,这样可以简化程序的开发。网络通信方面将从MFC封装socket的类CSocket实现点对点通信。
算法: 在这图论搜索技术这方面,前人已有很成熟的算法。如粗糙的有深度优先算法(DFS)和广度优先算法(BFS)这两个基本的算法,关键需要解决的是能够设计出一种高效的剪枝函数,减小搜索问题的规模。目前博弈类游戏中的人工智能基本都采用极大极小值方法这对我来说是个挑战,而剪枝的则采用Alpha-Beta,通过丰富的文档资料初步了解到这些技术已经很成熟了。我有信心能解决好这个问题。
Socket:联机对战中的数据传输量很少,利用Socket编程是在好不过了,而且在这方面的掌握程度不存在有问题。
所以通过对以上关键问题的分析,可以很明确了该系统的可行性。这个阶段的任务告一段落了。可以着手下一个阶段的任务了。软件工程很强调文档驱动开发过程,只有完成了上个阶段的工作后,才能开始下一步骤,这是传统的瀑布开发方法。当然不同的开发模型,过程也会有所区别,大体上都遵循软件工程的这个
7
步骤。这个阶段应该要产生一份《可行性分析报告》。
2.2.3 需求分析
这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问
题,目标系统需要做什么”,主要是确定目标系统必须具备哪些功能。
用户了解他们所面对的问题,知道必须做什么,但是通常不能完整准确地表达出他们的要求,更不知道怎样利用计算机解决他们的问题;软件开发人员知道怎样使用软件实现人们的要求,但是对特定用户的具体要求并不完全清楚。因此在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典和简要的算法描述表示系统的逻辑模型。
在设计本系统时考虑到用户需要的是一个操作简便界面简单的游戏软件。同时要提供人机和人人这样的功能。特别是人机部分,要考虑到不同级别的用户。电脑智能不能太低需要有一定的智能下棋功能。 本系统用提供平常下棋的一些步骤操作。
网络联机:提供向服务器一方发出连接请求的操作,并从弹出的对话框中设置IP和端口号;服务器提供监听的操作同样在弹出的对话框中设置端口号。任何一方需要悔棋请求,则必须通过对方的确定后方可。连接成功后双方可以开始游戏,决定在界面中提供在线聊天功能。用户可以通过主界面的上的菜单操作执行响应的功能和请求,如向对方发处向后悔棋一步,重新开始,认输等,另一方在接到请求后决定接受或拒绝。
人机对战:选择和电脑对弈的等级操作,同样也可以执行网络联机的悔棋等功能,只是因为是人机所以无需通过确认。
2.2.4总体设计
这个阶段必须回答的关键问题是:“概括地说,应该如何解决这个问题?” 首先,应该考虑几种可能的解决方案。如,目标系统的一些主要功能是用计算机自动完成还是用人工完成;如果使用计算机,那么是使用批处理方式还是人机交互方式;信息存储使用传统的文件系统还是数据库……。通常至少应该考虑下述几类可能的方案:
低成本的解决方案。系统只能完成最必要的工作,不能多做一点额处的工作。本系统的最基本要求就是能够实现必要的操作,其他额外的一些工作在后面完成 中等成本的解决方案。这样的系统不仅能够很好地完成预定的任务,使用起来很方便,而且可能还具有用户没有具体指定的某些功能和特点。虽然用户没有提出这些具体要求,但是系统分析员根据自己的知识和经验断定,这些附加的能力在实践中将证明是很有价值的。
这个成本方案在完成上面的低成本方案后添加的。如增加保存棋局,美化界面,实现观看电脑与电脑之间的对战等功能。
8
高成本的“十全十美”的系统。这样的系统具有用户可能希望有的所有功能和特点。
结构设计的一条基本原理就是程序应该模块化,也就是一个大程序应该由许多规模适中的模块按合理的层次结构组织而成。总体设计阶段的第二项主要任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。通常用层次图或结构图描绘软件的结构。
人机模块 中级模块 初级模块 高级模块
用户
2.2结构图
界面模块 联机模块 客户端模块 服务端模块 2.2.5详细设计
这个阶段的具体内容我把放到模块分析的章节去分析。下面仅作个简要的概述。
总体设计阶段以比较抽象概括的方式提出了解决问题的办法。详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?”
这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。
2.2.6编码和单元测试
9
这个阶段的关键任务是根据以上阶段分析的软件模型,编写各个功能模块。 要注意的是程序的扩张性和可读性。以便以后软件的升级修改。同时要仔细的测试每个功能编写好的功能模块。
这个内容也放到下面编译运行章节去。
2.3 用户界面
用户界面在整个系统的使用中起着很大的作用,它将直接影响到用户对软件的评价。界面是人机交互的平台,所以在设计时尽量往用户方考虑。提供操作简便和友好界面。
以下是系统使用的界面,感觉还有很多地方需要改进和完善。但是总体来说已经能够基本满足系统的需要。拥有较为良好的交互功能。
图 2.3 用户界面
10