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分。

1


















  • 描述结对的过程,提供两人在讨论、细化和编程时的结对照片(非摆拍)。

两个人各自发表对项目的想法,在理解对方想法的过程中求同存异,合并计划,螺旋式改进规划方案。


  • 提供此次结对作业的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的效果。

posted @ 2021-04-14 09:22  201873030133-杨子豪  阅读(117)  评论(2编辑  收藏  举报