项目 内容
课程班级博客链接 班级博客
这个作业要求链接 作业要求
我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程(Pair programming)。
2.掌握Github协作开发程序的操作方法。
这个作业在哪些方面帮助我实现学习目标 通过两人合作实现一个软件项目的开发以及使用GitHub协作开发程序
结对方学号-姓名 201871030131-谢林江
结对方本次博客作业链接 博客链接
项目Github的仓库链接地址 我的GitHub仓库地址

实验内容

任务一:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;

  • 代码风格规范:主要是文字上的规定。代码风格的原则是:简明,易读,无二义性,即“保持简明,让代码更容易读”的原则。比如缩进、行宽、括号(清楚的表示逻辑优先级)、断行(可以通过断点来调试程序)与空白的{}行(为使代码结构清晰,选择将“{”与“}”都独占一行)、分行(不要将多个变量定义在一行中)、命名、下划线、大小写、注释(解释程序做什么、怎么做以及需要特别注意的地方)等。

  • 代码设计规范:牵涉到程序设计,模块之间的关系,设计模式等诸多方面的通用原则。比如函数(最重要的原则是:只做一件事,并且要做好)、goto(函数最好有单一的出口,为有助于程序逻辑的清晰体现,可以使用任何方法包括goto)、参数处理、断言、类等。

  • 代码复审:阅读代码看代码是否在代码规范的框架内正确地解决了问题。代码复审的形式有三种:自我复审、同伴复审、团队复审。软件工程中最基本的复审手段就是同伴复审。

  • 结对编程:在结对编程模式下,一对程序员肩并肩、平等的、互补地进行开发工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做测试等等。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那位,这样程序中的错误就会少得多,程序的初始质量就会高很多,这样会省下很多以后修改,测试的时间。两人在一起合作怎么给别人提供容易接受的反馈呢?书中提到一个较好的“三明治”法。先做好铺垫,强调双方的共同点,从团队愿景讲起,让对方觉得心安,然后提出建设性的意见,最后互相鼓励,以后会做的更好。

任务二:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价,具体要求如下:

1.对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。

(1)结对方实验二博客链接

(2)评论截图:

2.克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。

  • 概要设计:

    • 代码符合需求和规格说明
    • 代码设计基本考虑周全
    • 代码中注释不多,可读性还行
    • 代码的每一行都检查过了
  • 设计规范部分:
    • 设计遵从已知的设计模式
    • 有数字和字符串的存在
    • 没有无用的代码可以清除
  • 代码规范部分:
    • 修改的部分符合代码标准和风格
  • 具体代码部分:
    • 数据结构中没有用不到的元素
  • 效能:
    • 代码的效能还不错
  • 可读性:
    • 代码的可读性还可以,注释部分还需再添加一点
  • 可测试性
    • 代码不需要更新,可以直接运行

任务三:采用两人结对编程方式,设计开发一款D{0-1}KP 实例数据集算法实验平台

1.项目开发背景
  • 背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。{0-1}背包问题({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的一般描述为:从若干具有价值系数与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数之和在不超过背包载重前提下价值系数之和达到最大?
2.需求分析
  • D{0-1} KP 是经典{ 0-1}背包问题的一个拓展形式,用以对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量 的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大;D{0-1}KP instances数据集是研究D{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集。
3.程序基本功能要求

(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)外的任意有效平台功能实现。

4.设计实现

(1)实现软件使用的工具

软件实现采用了Python语言,通过调用Python语言中的相关包便捷实现。

(2)核心代码

import pandas as pd
from sqlalchemy import create_engine
# 初始化数据库连接
# 按实际情况依次填写MySQL的用户名、密码、IP地址、端口、数据库名
engine = create_engine('mysql+pymysql://root:12345678@localhost:3306/testdb') # MySQL导入DataFrame
# 填写自己所需的SQL语句,可以是复杂的查询语句
sql_query = 'select * from product;'
# 使用pandas的read_sql_query函数执行SQL语句,并存入DataFrame
df_read = pd.read_sql_query(sql_query, engine) # DataFrame写入MySQL
# 新建DataFrame
df_write = pd.DataFrame({'重量': [10, 27, 34, 46], '价值': [80, 75, 56, 99]})
# 将df储存为MySQL中的表,不储存index列
df_write.to_sql('testdf', engine, index=False) import numpy as np
import random
import matplotlib.pyplot as plt def init(N,n):
C = []
for i in range(N):
c = []
for j in range(n):
a = np.random.randint(0,2)
c.append(a)
C.append(c)
return C def fitness(C,N,n,W,V,w):
S = []
F = []
for i in range(N):
s = []
h = 0
f = 0
for j in range(n):
if C[i][j]==1:
if h+W[j]<=w:
h=h+W[j]
f = f+V[j]
s.append(j)
S.append(s)
F.append(f)
return S,F def best_x(F,S,N):
y = 0
x = 0
B = [0]*N
for i in range(N):
if y<F[i]:
x = i
y = F[x]
B = S[x]
return B,y def rate(x):
p = [0] * len(x)
s = 0
for i in x:
s += i
for i in range(len(x)):
p[i] = x[i] / s
return p def chose(p, X, m, n):
X1 = X
r = np.random.rand(m)
for i in range(m):
k = 0
for j in range(n):
k = k + p[j]
if r[i] <= k:
X1[i] = X[j]
break
return X1 def match(X, m, n, p):
r = np.random.rand(m)
k = [0] * m
for i in range(m):
if r[i] < p:
k[i] = 1
u = v = 0
k[0] = k[0] = 0
for i in range(m):
if k[i]:
if k[u] == 0:
u = i
elif k[v] == 0:
v = i
if k[u] and k[v]:
# print(u,v)
q = np.random.randint(n - 1)
# print(q)
for i in range(q + 1, n):
X[u][i], X[v][i] = X[v][i], X[u][i]
k[u] = 0
k[v] = 0
return X def vari(X, m, n, p):
for i in range(m):
for j in range(n):
q = np.random.rand()
if q < p:
X[i][j] = np.random.randint(0,2) return X

(3)运行展示:





(4)交流过程:





5.总结
  • 两人合作真的能够带来1+1>2的效果吗?对于这个问题通过此次的结对编程体验,我认为两人合作能够带来1+1>2的效果。首先在结对编程中,因为有随时的沟通和交流,程序各方面的质量都取决于各方面水平较高的那位,这样,程序中的错误就会少得多,程序的质量就会高很多,这样写出来的软件比一个写出来的质量更加完善。其次,其中一位会的某个技术另一位会学习到,这样双方就同时拥有了一个新的知识,而且结对会激发双方的很多新的理念,提出更多的创意。最后,两人合作是坐在一起,交流方便,相互学习,共同进步,也更加懂得交流的技巧。
6.psp
psp2.1 任务内容 计划共完成需要
的时间
实际完成需要
的时间
Planning 计划 15 20
·Estimate ·估计这个任务需要多少时间,
并规划大致工作步骤
30 25
Development 开发 800 1200
·Analysis 需求分析 60 80
·Design Spec · 生成设计文档 30 30
·Design Review · 设计复审 0 0
·Coding Standard · 代码规范 10 10
·Design · 具体设计 300 360
·Coding · 具体编码 600 1000
·Code Review · 代码复审 60 180
·Test ·测试 60 180
Reporting 报告 60 100
·Test Report · 测试报告 50 45
·Size Measurement 计算工作量 5 5
·Postmortem & Process Improvement Plan · 事后总结 ,并提出过程改进计划 8 20

201871030107-常雅伦 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告的更多相关文章

  1. 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  2. 201871030110-何飞 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030110-何飞 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 ...

  3. 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...

  4. 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...

  5. 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...

  6. 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  7. 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

  8. 201871010113-贾荣娟 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三-软件工程结对项目 这个课程学习目标 掌握软件开发流程,提高自身能力 这个作业在哪些方面帮助我实现了学习目标 本次实验让我对软件工程 ...

  9. 201871030127-王明强 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.熟悉PSP流程2. 熟悉github操作3.加深对D{0-1}问题的解法的理解4.熟悉ja ...

随机推荐

  1. EventEmitter & custom events & sub/pub

    EventEmitter & custom events & sub/pub https://repl.it/@xgqfrms/PPLabs-frontend-answers // 5 ...

  2. 人物传记STEPHEN LITAN:去中心化存储是Web3.0生态重要组成

    近期,NGK.IO的开发团队首席技术官STEPHEN LITAN分享了自己对去中心化储存的观点,以下为分享内容. 目前的存储方式主要是集中式存储,随着数据规模和复杂度的迅速增加,集中存储的数据对于系统 ...

  3. 08.手写KNN算法测试

    导入库 import numpy as np from sklearn import datasets import matplotlib.pyplot as plt 导入数据 iris = data ...

  4. 关于Python 编码的一点认识

    在计算机中,所有数据的存储.运算以及传输都必须是二进制数字,因为计算机只认识0和1. 当一个人把一份数据传给另一个人时,计算机传递的是其实是二进制数字,但这些数字需要被还原为原始信息. 这个工作当然是 ...

  5. css选择器,过滤筛选

    $('.required:not(.final_price)').each(function() { if (!$(this).val()) { error_count ++; if ($(this) ...

  6. 1047 Student List for Course ——PAT甲级真题

    1047 Student List for Course Zhejiang University has 40,000 students and provides 2,500 courses. Now ...

  7. IntelliJ IDEA 还能画思维导图,果然最强 IDE!

    最近栈长发现 IntelliJ IDEA 居然还能画思维导图,太牛逼了! 当然这得借助 IDEA 的 UML 插件,因为它本身也是一个 UML 图,所以这篇就从 UML 图开撕,看 IDEA 怎么画思 ...

  8. Navicat premium对数据库的结构同步和数据同步功能

    一.在目标数据库新建一个相同的数据库名. 二.工具-->结构同步. 三.填写源数据库和目标数据库. 四.点击比对 五.点击部署 六.点击运行 七.点击关闭.此时源数据库的结构已经同步到目标数据库 ...

  9. Centos8.2安装Mongodb4.4.2(社区版)

    1:下载 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.2.tgz 官网地址: 2:解压 tar -zxv ...

  10. msfconsole 常用命令记录

    Metasploit是一款开源的渗透测试框架,它现在还在逐步发展中,下面介绍的一些功能和命令,可能会在未来失效. Metasploit框架提供了多种不同方式的使用接口: msfgui msfconso ...