项目 | 内容 |
---|---|
课程班级博客链接☛ | 班级博客 |
这个作业要求链接☛ | 作业要求 |
我的课程学习目标☛ | 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 ...
随机推荐
-
DataGridView的自定义列排序
1,将需要进行排序的列做属性的设置 this.colUserName.SortMode = DataGridViewColumnSortMode.Programmatic; 2,添加列的事件 //点击 ...
-
Python入门教程 超详细1小时学会Python(转)
假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是bash而Windows ...
-
学而精计算机公共基础学习之路TEST1
算法 一:算法基本概念 算法是个什么概念学了这么久的程序尽然没有听说过,其实算法就是为了解决问题那么怎么准确完整的解决这个问题就是算法.所以我们所写的程序就可以说为对算法的描述,但是程序编制是不能有于 ...
-
【原创】大叔经验分享(1)在yarn上查看hive完整执行sql
hive执行sql提交到yarn上的任务名字是被处理过的,通常只能显示sql的前边一段和最后几个字符,这样就会带来一些问题: 1)相近时间提交了几个相近的sql,相互之间无法区分: 2)一个任务有问题 ...
-
MVC开发中的常见错误-01未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。
错误信息:未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或 ...
-
bzoj4861 / P3715 [BJOI2017]魔法咒语
P3715 [BJOI2017]魔法咒语 AC自动机+dp+矩阵乘法 常规思路是按基本串建立AC自动机 然鹅这题是按禁忌串建立AC自动机 对后缀是禁忌的点以及它的失配点做上标记$(a[i].ed)$, ...
-
centos7.2环境yum方式快速搭建lnmp环境nginx+mariadb+php-fpm
centos7.2环境yum方式安装nginx+mariadb+php-fpm 1.安装lnmp环境 安装epel源 yum install -y epel-release 安装 MySQL + PH ...
-
SqlMapConfig配置文件中的typeAliases标签用于自定义别名
1.mybatis支持别名: 别名 映射的类型 _byte byte _long long _short short _int int _integer int _double double _flo ...
-
【转载】OpenMAXIL介绍与其体系
1 OpenMAX IL介绍与其体系 这一部分的文档描述 OpenMAX IL的特性与体系. 1.1 OpenMAX IL 简述 OpenMAX IL 软件接口层定义了一套API,用于访问系统中的组件 ...
-
instantclient_11_2 连接oracle数据
(1)首先你要先下载instantclient (解压如下),修改你 instantclient/network/admin/tnsnames.ora 文件,将你oracle的服务器地址写上 ...