201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
| 项目 | 内容 |
|---|---|
| 课程班级博客链接☛ | 班级博客 |
| 这个作业要求链接☛ | 作业要求 |
| 我的课程学习目标☛ | 1. 体验软件项目开发中的两人合作,练习结对编程(Pair programming)。 2. 掌握Github协作开发程序的操作方法。 3. 编程练习。 4. 学习遗传算法 5. 数据库的连接 |
| 这个作业在哪些方面帮助我实现学习目标☛ | 1. 练习了结对编程,两人合作的过程 2.学习了新的算法-遗传算法 3. 使用python进行GUI界面的设计 |
| 结对方学号-姓名☛ | 201871030113-贾荣娟 |
| 结对方本次博客作业链接☛ | 贾荣娟-实验三 |
| 本项目Github的仓库链接地址☛ | 仓库地址 |
实验内容
任务1:
任务要求:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念。
任务完成情况:
《现代软件工程—构建之法》的第3章写的是软件工程师的成长,主要内容包括个人能力的衡量与发展,软件工程师的职业发展以及技能的反面。第4章写的是两人合作,主要内容包括代码规范,代码风格规范,代码复审,结对编程以及两人合作的不同阶段和技巧。
代码规范可以分为代码风格规范和代码设计规范两部分。代码风格规范主要是文字上的规定,看似表面文章,实际上非常重要。它的原则是:简明,易读,无二义性。提示:这里谈的风格是一家之言, 如遇争执,关键是要本着“保持简明,让代码更容易读”的原则,看看争执中的代 码规范能否让程序员们更好地理解和维护程序。代码设计规范不光是程序书写的格式问题,而且牵涉到程序设计、模块之间的关 系、设计模式等方方面面,这里又有不少内容与具体程序设计语言息息相关(如 C、C++、Java、C#),但是也有通用的原则,这里主要讨论通用的原则。如果只想为了“爽”而写程序,那么可以忽略下面的原则;如果写的程序会被很多人使用,并且还得加班调试自己的程序。
代码复审的正确定义:看代码是否在“代码规范”的框架内正确地解决了问题。
在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并 排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工 作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试, 一起做集成测试,一起写文档等。结对编程不是程序开发者独到的发明。
任务2:
任务要求:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价。
任务完成情况:
(1)贾荣娟-实验二
(2)贾荣娟-项目仓库
(3)评论如下:

(4)核查表如下:
A.概要部分:
a.代码符合需求和规格说明么?
答:代码符合需求和规格说明。
b.代码设计是否考虑周全
答:代码设计考虑周全。
c.代码可读性如何?
答:代码可读性较好
d.代码容易维护么?
答:代码容易维护。
e.代码的每一行都执行并检查过了吗?
答:代码的每一行都执行并检查过了。
B.设计规范部分:
a.设计是否遵从已知的设计模式或项目中常用的模式?
答:设计遵从已知的设计模式或项目中常用的模式。
b.有没有硬编码或字符串/数字等存在?
答:存在硬编码
c.代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)?
答:代码实在win64上进行的编码,不太清楚在win32上能否运行,未进行测试。
d.有没有无用的代码可以清除?
答:基本上没有需要清除的代码。
C.代码规范部分:
答:修改的部分符合代码标准和风格。
D.具体代码部分:
a.有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了 异常?
答:对错误进行了处理,对于调用的外部函数,检查了返回值或处理了异常。
b.数据结构中有没有用不到的元素?
答:数据结构中没有用不到的元素。
D.效能:
a.代码中,特别是循环中是否有明显可优化的部分?
答:代码中,特别是循环中没有明显可优化的部分。
E.可读性:
答:代码没有足够的注释,注释很少,代码可读性较好。
F.可测试性:
答:代码是不需要更新或创建新的单元测试。
(5)结对方项目仓库中的Fork、Clone、Push、Pull request、Merge pull request日志数据:
Fork:

将结对方的项目复制过来,相当于一个分支;项目复制到自己的github中,于是本地就有了和结对方相同命名的仓库。
Clone:
从自己的github上把fork过来的复制到本地,这样本地就有了结对方的项目。

Push:
在本地项目进行修改开发后,最后同步到我的github上的仓库中。
Pull request:

把自己github中的已经修改的内容申请同步到最初那个开发者的项目中并作出比较。由于在push阶段对结对方的代码未作出修改(个人觉得结对方代码无需修改),所以比较结果是两个项目并无差异
任务3:
任务要求:采用两人结对编程方式,设计开发一款D{0-1}KP 实例数据集算法实验平台。
任务完成情况:
(1)需求分析陈述。
- D{0-1}KP问题可以采用动态规划算法,回溯算法以及遗传算法等多种算法来解决,每一种算法解决D{0-1}KP问题所消耗的时间和空间都有所不同,为了方便用户快速的选择某种算法来解决D{0-1}KP问题并且比较每一种算法执行时所消耗的时间和空间,所以我们试图开发一个D{0-1}KP实例数据集算法实验平台,以便用户能够快速的选择某种算法来解决D{0-1}KP问题并且比较出哪种算法更高效。
(2)软件设计说明。
在实验二-个人项目的基础上进行开发;
人机交互界面通过python来编写GUI界面;
将D{0-1}KP实例数据集存储在数据库,在GUI界面可进行数据的查询;
输入需要绘制散点图或者需要排序的数据集以及数据项后进行散点图的绘制或者数据的排序;
平台动态嵌入有效的D{0-1}KP实例求解算法,并且可以保存算法实验日志数据;
添加遗传算法。在原来个人项目的基础上添加遗传算法,在GUI界面上添加遗传算法的选择按钮。
(3)软件实现及核心功能代码展示。
- 连接数据库
list2=[]#存放重量
list3=[]#存放价值
for i in message1:
str1=i[:-2].split(',')
list1=[]
for j in str1:
list1.append(int(j))
list2.append(list1)
for i in message2:
str1=i[:-2].split(',')
list1=[]
for j in str1:
list1.append(int(j))
list3.append(list1)
for i in range(len(list2)):
for j in range(len(list2[i])):
c.execute('insert into bp (weight,value) values (?,?)',(list2[i][j],list3[i][j]))
ok=0
for i in range(p):
xx1=10(i+1)
ok=3*xx1+ok
xx1=10(p+1)
ok1=3*xx1
c.execute('select * from bp limit ?,?',(ok,ok1))
result=c.fetchall()
list11=[]
list22=[]
for i in range(len(result)):
list11.append(result[i][0])
list22.append(result[i][1])
- 使用数据库进行查询
def find(result=[]):
win1 = tkinter.Toplevel()
win1.title('查询数据')
win1.geometry('500x300')
sw = win1.winfo_screenwidth()
sh = win1.winfo_screenheight()
win1.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
tkinter.messagebox.showinfo("结果如下",result)
win1.destroy()
- 散点图绘制
def paint(list11=[],list22=[]):
import numpy as np
import matplotlib.pyplot as plt
plt.scatter(list11,list22)
plt.show()
- 数据排序
def sort(list11=[],list22=[]):
win1 = tkinter.Toplevel()
win1.title('数据排序')
win1.geometry('500x300')
sw = win1.winfo_screenwidth()
sh = win1.winfo_screenheight()
win1.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
list4=[]
for i in range(2,len(list11)+1):
if i%3==0:
list4.append(round(int(list11[i-1])/int(list22[i-1]),3))
list4.sort(reverse=True)
tkinter.messagebox.showinfo("按照性价比的非递增排序",list4)
win1.destroy()
- 算法
for i in range(n+1):
x.append(0)
for i in range(n+1):
f.append([])
for i in range(n+1):
for j in range(c1+1):
f[i].append(0)
for i in range(1,n+1):
for j in range(1,c1+1):
if j<int(list11[i]):
f[i][j]=f[i-1][j]
else:
f[i][j]=max(f[i-1][j],f[i-1][j-int(list11[i])]+int(list22[i]));
(4)程序运行。
查询:

排序:

算法:

图:

(5)结对过程(非摆拍)。

(6)此次作业的PSP。
| psp2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
|---|---|---|---|
| Planning | 计划 | 60 | 40 |
| Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 60 | 40 |
| Development | 开发 | 600 | 685 |
| Analysis | 需求分析 (包括学习新技术) | 60 | 70 |
| Design Spec | 生成设计文档 | 45 | 30 |
| Design Review | 设计复审 (和同事审核设计文档) | 15 | 20 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
| Design | 具体设计 | 60 | 60 |
| Coding | 具体编码 | 300 | 400 |
| Code Review | 代码复审 | 60 | 45 |
| Test | 测试(自我测试,修改代码,提交修改) | 30 | 30 |
| Reporting | 报告 | 120 | 105 |
| Test Report | 测试报告 | 40 | 40 |
| Size Measurement | 计算工作量 | 30 | 20 |
| Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 50 | 45 |
(7)小结感受:
通过此次实验,练习了结对编程,体验了两人合作编程的过程。结对编程中最怕的就是两个人各执己见,在我们两个人合作的过程中,两人的意见难免会有不统一的时候,当意见不统一的时候,我们尽量避免各执己见,而是通过商量来达到统一的意见,有时候也会去尝试两个人的想法,比较出谁的想法更优就来采取谁的。事实上,我的结对队友在开发上比我更有经验,在代码编写上我俩各写一部分,她负责数据库的连接,我负责的是GUI界面的编写,GUI的编写相对于数据库的连接来说比较简单,所以我负责的是这部分。对于遗传算法,我们也进行了了解和学习,由于能力有限以及时间关系,关于遗传算法的部分还未做出来。
任务4:
博文已完成。
201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告的更多相关文章
- 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030110-何飞 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030110-何飞 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 ...
- 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...
- 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...
- 201871010113-贾荣娟 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三-软件工程结对项目 这个课程学习目标 掌握软件开发流程,提高自身能力 这个作业在哪些方面帮助我实现了学习目标 本次实验让我对软件工程 ...
- 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...
- 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
- 201871030127-王明强 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.熟悉PSP流程2. 熟悉github操作3.加深对D{0-1}问题的解法的理解4.熟悉ja ...
随机推荐
- eclipse从接口快速跳转到实现类
1.只跳转到实现类上 按住Ctrl键,把鼠标的光标放在要跳转的接口上面,选择第二个 2.直接跳转大实现的方法上 按住Ctrl键,把鼠标的光标放在要跳转的方法上面,选择第二个 对比可以发现,操作都是一样 ...
- JS中indexOf的用法
String.IndexOf(Char, [startIndex], [count]):返回指定字符在原字符串中的第一个匹配项的索引.可指定字符开始检索位置和指定长度的字符,若没有找到该字符,则返回 ...
- CentOS7安装ElasticSearch7.9.2
1:下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar. ...
- JUnit5学习之五:标签(Tag)和自定义注解
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Docker 镜像加速教程
原文链接:https://fuckcloudnative.io/posts/docker-registry-proxy/ 在使用 Docker 和 Kubernetes 时,我们经常需要访问 gcr. ...
- LDAP + Samba 安装配置流程
LDAP + Samba 安装配置 基础环境:Ubuntu18.04 安装samba root@cky:~# apt install samba smbldap-tools -y 查看版本 root@ ...
- 后端程序员之路 27、LogStash
访谈与书评:<LogStash,使日志管理更简单>http://www.infoq.com/cn/articles/review-the-logstash-book/ [Logstash] ...
- C++ 中的虚函数表及虚函数执行原理
为了实现虚函数,C++ 使用了虚函数表来达到延迟绑定的目的.虚函数表在动态/延迟绑定行为中用于查询调用的函数. 尽管要描述清楚虚函数表的机制会多费点口舌,但其实其本身还是比较简单的. 首先,每个包含虚 ...
- 鸿蒙开源第三方件组件——轮播组件Banner
目录: 1.功能展示 2.Sample解析 3.Library解析 4.<鸿蒙开源第三方组件>系列文章合集 前言 基于安卓平台的轮播组件Banner(https://github.com/ ...
- IDEA中便捷内存数据库H2的最简使用方式
在IDEA中有时候为了练习,需要使用到数据库,但如果自己工作或开发机子上本来没有安装数据库,也没有可用的远程数据库时,我们可以直接在IDEA环境上使用便捷式的内存数据库H2,关于H2更多知识就自己去找 ...