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 ...
随机推荐
- how to group date array by month in javascript
how to group date array by month in javascript https://stackoverflow.com/questions/14446511/most-eff ...
- Flutter & QRCode App
Flutter & QRCode App https://github.com/xgqfrms/qrcode-reader-app how to open android emulator o ...
- SMS OTP 表单最佳做法 (短信验证)
<form action="/verify-otp" method="POST"> <input type="text" ...
- 比起USDT,我为什么建议你选择USDN
2018年1月16日,USDT(泰达币)进入了很多人的视野.因为在这一天,在全球价值排名前50的加密货币中,包括比特币.莱特币以及以太坊在内的大多数的数字虚拟加密货币都遭遇了价格大幅下跌,只有泰达币价 ...
- Java对象内存布局
本文转载自Java对象内存布局 导语 首先直接抛出问题 Unsafe.getInt(obj, fieldOffset)中的fieldOffset是什么, 类似还有compareAndSwapX(obj ...
- 创建一个springboot项目
进入https://start.spring.io/ 再点击GENERATE,下载解压即可 注意配置好阿里云的仓库镜像,免得依赖无法下载 不下载最新版springboot是因为我在测试中遇到了问题,貌 ...
- 处理ios键盘弹出按钮点击click失效
用ontouchstart绑定事件即可,然后用 document.activeElement.blur();让键盘收起 this.value = value.replace(/\s/g, " ...
- (嘎吧)--微软的 C# , IL,CLR, Cup 之间关系以及扩展联想
还是啰嗦下:文章短并不代表文章质量不高.我最喜欢用干货性的以及总结性的语言 让大家明白文章要表达的内容.这一切,都是来自多年对.NET 的一些领悟以及一些理解. 不长篇大论,一本人也没时间,二本人也不 ...
- Python3.x 基础练习题100例(21-30)
练习21: 题目: 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前 一天剩下的一半零一个.到第10天早上 ...
- “蚂蚁牙黑”太火,想玩就用ModelArts做一个!
摘要:本文将介绍如何借力一站式 AI 开发平台,"傻瓜式"操作实现生成"蚂蚁牙黑"小视频. 作者:华为云EI专家胡琦 一夜之间,朋友圈都在"蚂蚁牙黑& ...