201873030133-杨子豪 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | 班级博客链接 |
这个作业要求链接 | 作业要求链接 |
我的课程学习目标 | 了解软件工程的作用与意义,将软件工程与过去所学相结合 |
这个作业在哪些方面帮助我实现学习目标 | 体验了结对式的两人合作编程开发流程,了解了Github协作开发程序的操作方法 |
结对方学号-姓名 | 201871030112-贾傲羊 |
结对方本次博客作业链接 | 结对方本次博客作业链接 |
本项目Github的仓库链接地址 | 1.服务器,2.客户端 |
任务一:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;
已完成阅读
任务二:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价
博文结构
博文结构清晰明了,简洁扼要,按照老师要求书写排版而成,从任务一至任务三均已达到标准。排版舒适,主次分明,标题的放置加黑,内容的排序,使博文易读易懂。
博文内容
博文内容紧扣主题,以任务要求为中心,任务一已放置点评链接,任务二完成PSP相关文章阅读并掌握流程,任务三针对需求分析、功能设计、设计实现、测试运行等部分进行了详细而准确的说明。
博文结构与PSP中“任务内容”列的关系
博文结构与PSP中“任务内容”列并不完全对应,PSP稍显规范化,缺少细节,没有结合个人开发过程中的特性进行填写,但是此种宏观视角的PSP也是一种风格。
PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究
实际完成需要的时间比计划共完成需要的时间更长,作者提到主要原因是代码经过测试后又发现了新的问题,以及超出预期的过多BUG,可能是错误估计了任务的复杂度与难度,尤其在开发部分与报告部分,开发多出了四百分钟左右的时间,可见此次任务确实是很能带来压力的,但是要求的功能最后完成得尽善尽美,可见下了一番功夫。
- 符合(2)要求的代码核查表;
----------概要部分---------- 代码是否符合需求和规范说明 符合 代码设计是否考虑周全 周全 代码可读性如何 清晰易读 代码容易维护吗 容易 代码的每一行都执行并检查过了吗 否 ----------设计规范部分---------- 设计是否遵循从已知的设计模式或项目中常用的设计模式 是 有没有硬编码或字符串/数字等存在 有 代码是否依赖于某一平台,是否会影响将来的移植 代码由C#编写,可能会影响移植 开发者新写的代码是否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以通过调用而不用全部重新实现? 是,用已有的Library/SDK/Framework中的功能实现 有没有无用的代码可以清除 有 ----------代码规范部分---------- 修改的部分符合代码标准和风格么 符合 ----------具体代码部分---------- 有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常? 已处理 参数传递有无错误,字符串的长度是字节的长度还是字符的长度,是从0开始计数还是从1开始计数 无错误,字符的长度,从0开始计数 边界条件是如何处理的?switch语句和default分支是如何处理的?循环有没有可能出现死循环? 通过前提分析推导边界条件 有没有使用断言(Assert)来保证我们认为不变的条件真的得到满足? 否 对资源的利用,是在哪里申请,在哪里释放的?有无可能存在资源泄露?有没有优化的空间? 自动申请释放,不会存在资源泄露,有优化的空间 数据结构中有没有用不到的元素? 有 ----------效能---------- 代码的效能(Performance)如何?最坏的情况是怎么样的? 效能一般,数据量过大可能会需要很长的运行时间而得不到结果 代码中,特别是循环中是否有明显可优化的部分? 无 对于系统和网络的调用是否会超时?如何处理? 如果超时,重新调用 代码可读性如何?有没有足够的注释? 结构清晰,但注释较少 ----------可测试性---------- 代码是否需要更新或创建新的单元测试 否
-
结对方项目仓库中的Fork、Clone、Push、Pull request、Merge pull request日志数据
结对方commit记录
结对方fork记录
任务三:采用两人结对编程方式,设计开发一款D{0-1}KP 实例数据集算法实验平台
- 将结对编程项目的源码以增量方式提交到指定同学Github账号的项目仓库中,Github结对项目仓库的代码提交日志要体现两人合作过程,项目仓库中要能看到项目多次commit的记录,和两人各自的commit记录。
- 编撰两人合作开发遵守共同认可的编码规范,提交项目代码规范文档到Github项目仓库根目录下。
- 程序功能评测。
任务四:完成结对项目报告博文作业
-
需求分析陈述。
(1)平台基础功能:实验二 任务3;
(2)D{0-1}KP 实例数据集需存储在数据库;
(3)平台可动态嵌入任何一个有效的D{0-1}KP 实例求解算法,并保存算法实验日志数据;
(4)人机交互界面要求为GUI界面(WEB页面、APP页面都可);
(5)查阅资料,设计遗传算法求解D{0-1}KP,并利用此算法测试要求(3);
(6)附加功能:除(1)-(5)外的任意有效平台功能实现。
-
软件设计说明。
此软件采用C/S的设计架构
客户机/服务器(C/S)网络的信息服务系统通常由计算机平台、网络平台和数据库平台组成。这里的C/S信息系统,在硬件条件不变的情况下,根据其作用可划分为几个部分:
1、第一部分为前端,即客户机。前端是一个运行在客户机上并向服务器发送信息,并接收服务器信息的小型应用程序,因此,前端实际就是服务器上应用程序的一个接口。
2、第二部分为后端,即服务器。后端计算机上应当 运行基于C/S模式的后台程序,如SQL Server。服务器程序可以应用于各类计算机平台上,从微机、小型机直到大型计算机。随着计算机网络规模的发展,网络中可能需要不只一个服务器来分别处理各种客户机的请求。为此,可以在同一台服务器上安装多种应用服务软件。当网络上客户机对电子邮件的服务请求不多时,还可以安排它兼做其他客户机或者服务器使用。
3、第三部分为连接件,即起连接作用的软件和硬件。其中软件连接主要包括网络协议,网络应用接口和数据库的连接接口等,而硬件连接主要有网卡和通信介质等
简言之,前端程序是负责与网络客户的交流,并向服务器提出要求的一方;后端程序则是处理相关的交互请求,为前端提供服务的一方;而连接件则是服务器与客户机的连接和支撑平台。
-
软件实现及核心功能代码展示:软件包括哪些类,这些类分别负责什么功能,他们之间的关系怎样?类内有哪些重要的方法,关键的方法是否需要画出流程图?
客户端的类有:
1.Articles
代表一个物品,具有重量价值等属性
2.DataExtraction
封装的数据处理类,可以对数据集进行处理、读取、传送、排序等操作
3.DataSet
数据集类,包含一个数据集中的所有物品集,并且具有动态规划法、回溯法等处理函数。
4.ItemSet
物品集,包含三个物品对象和他们的操作函数。
5.ItemSetSort
继承了比较器的接口,可以对两个物品集按照第三项的价值重量比进行比较
6.NetworkSendData
负责和服务器端进行网络连接,并且可以进行和服务器端进行交互。
public void DSW(string fn, int index) { try { int state = get_Connect_State(); if (state == 1) { send_Data_To_Server("DSW"); string temp = read_Data_From_Server(); if (temp.Equals("OK")) { int count = dataExtraction.get_items_Set_Count(index) * 3; send_Data_To_Server(count.ToString()); temp = read_Data_From_Server(); if (temp.Equals("OK")) { int i = 0; do { string[] send = dataExtraction.get_DSW_Str(index, i); for (int j = 0; j < 3 && temp.Equals("OK"); j++) { send_Data_To_Server(fn + "#" + index.ToString() + "#" + i.ToString() + "#" + send[j]); temp = read_Data_From_Server(); } i++; } while (temp.Equals("OK") && i < count); } } else { return; } } } catch (Exception e) { Console.WriteLine(e.ToString()); } }
7.OutputToFile
负责将结果和解向量输出到txt或者excel文件中
8.Program
项目的主类,是项目开始的地方
9.SortByTheThirdItem
对于给定的数据集,按照他们每一个物品集的第三个物品的价值重量比进行排序。
10.Form1、Form2、Form3
分别对应登录注册窗口、数据处理窗口和散点图绘制窗口
-
程序运行:程序运行时每个功能界面截图。扩展功能实现可得附加分5分。
-
描述结对的过程,提供两人在讨论、细化和编程时的结对照片(非摆拍)。
两个人各自发表对项目的想法,在理解对方想法的过程中求同存异,合并计划,螺旋式改进规划方案。
-
提供此次结对作业的PSP。
任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|
商讨这个任务,交流实验二的项目完成情况,并大致规划本次工作步骤 | 20 | 30 |
交流沟通对汉堡法和领航员与驾驶员的理解看法 | 200 | 300 |
编撰两人共同认可的编码规范 | 400 | 500 |
数据集存储在数据库功能的代码编写 | 800 | 1200 |
动态嵌入有效的D{0-1}KP 实例求解算法,并保存算法实验日志数据功能的编写 | 500 | 800 |
人机交互界面(增加新功能) | 400 | 400 |
遗传算法的学习和设计 | 180 | 240 |
功能测试运行 | 30 | 30 |
-
小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。
1+1>2的效果是真实存在的,俗话说三百六十行,行行出状元,然而就算同是在计算机行业,两个人的能力也可能又很大的差异,同一个任务让两个人去做,可能花费的时间相差极大,因此1和1,在不同的任务面前有不同的能力,如果把两个人都分配到合适的任务上,最后就创造出了1+1>2的效果。