热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

201971020107郭清华实验三结对项目—《{01}KP实例数据集算法实验平台》项目报告

项目内容班级博客2022年春软件工程课程班作业要求实验三软件工程结对项目学习目标(1)体验软件项目开发中的两人合作,练习结对编程(Pairprogramming);(2)掌握Git






































项目内容
班级博客2022年春软件工程课程班
作业要求实验三 软件工程结对项目
学习目标(1)体验软件项目开发中的两人合作,练习结对编程(Pair programming);(2)掌握Github协作开发软件的操作方法。
目标实现对结对编程进行实践;对git的多人协作操作更加熟练;对Django框架有了初步了解
结对方学号姓名201971010140-魏瑾川
结对方博客链接https://www.cnblogs.com/hezhoubuchizao/
项目地址DP_EX3

任务1

IC在团队中的流程



  • 通过交流、实验、快速原型等方法,理解问题、需求或任务

  • 提出多种解决办法并估计工作量其中包括寻找以前的解决方案,因为很多工作是重复性的

  • 与相关角色交流解决问题的提案,决定一个可行的方案

  • 。执行,把想法变成实际中能工作的代码,同时验证方案的可行性和其他特性

  • 和团队的其他角色合作,在测试环境中测试实现方案,修复缺陷(Bug )。如果此方案有严重的问题,那么就考虑其他方案

  • 在解决方案发布出去之后,对结果负责


软件开发的工作量和质量



  1. 项目/任务有多大?

    说明项目的大小,一般用代码行数( Line Of Code,LOC)来表示;也可以用功能点( Function Point)来表示。



  2. 花了多少时间?

    可以用小时、天、月、年来表示。一组人所花费的时间可以用(人数×时间)来表示,例如某项目花费了10个人×月。



  3. 质量如何?

    交付的代码中有多少缺陷?交付有两个定义:



    • 在代码完成( Code Complete)时,交付给测试人员



    • 在软件最终发布时,交付给顾客





  4. 是否按时交付?




软件工程师的思维误区



  • 分析麻痹

  • 不分主次,想解决所有依赖问题

  • 过早优化

  • 过早扩大化/泛化


代码规范


代码规范组成部分



  1. 代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。

  2. 代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面的通用原则。


代码风格规范

原则为:简明,易读,无二义性



  • 缩进:是用Tab键好,还是2、4、8个空格?

  • 行宽:行宽必须限制,但是以前有些文档规定的80字符行宽太小了(以前的计算机/打字机显示行宽为80字符),现在时代不同了,可以限定为100字符。

  • 括号:在复杂的条件表达式中,用括号清楚地表示逻辑优先级。

  • 分行:不要把多条语句放在一行上,更严格地说,不要把多个变量定义在一行上。

  • 命名

    • 在变量名中不要提到类型或其他语法方面的描述。

    • 避免过多的的描述。

    • 如果信息可以从上下文中得到,那么此类信息就不必写在变量名中。

    • 避免可要可不要的修饰词。



  • 下划线:下划线用来分隔变量名字中的作用域标注和变量的语义。

  • 大小写:一个通用的做法是:所有的类型/类Ⅰ函数名都用Pascal形式,所有的变量都用Camel形式。类/类型/变量:名词或组合名词,如 Member、ProductInfo等。

  • 注释:复杂的注释应放在注释头,注释要随着程序的修改而不断更新。


代码设计规范



  • 函数:只做一件事,并且要做好



  • goto:函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用。



  • 错误处理:



    • 参数处理

    • 断言



  • 类:



    • 使用类来封装面向对象的概念和多态(Polymorphism ) 。

    • 避免传递类型实体的值,应该用指针传递。换句话说,对于简单的数据类型,没有必要用类来实现。

    • 对于有显式的构造和析构函数的类,不要建立全局的实体,因为你不知道它们在何时创建和消除。

    • 仅在必要时,才使用“类”。


    代码复审



    1. 定义:看代码是否在代码规范的框架内正确地解决了问题。



    2. 代码复审的目的:



      • 找出代码的错误



        1. 编码错误,比如一些碰巧骗过了编译器的错误

        2. 不符合团队代码规范的地方



      • 发现逻辑错误,程序可以编译通过,但是代码的逻辑是错的



      • 发现算法错误,比如使用的算法不够优化,边界条件没有处理好等



      • 发现潜在的错误和回归性错误——当前的修改导致以前修复的缺陷又重新出现



      • 发现可能需要改进的地方



      • 教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识








结对编程


角色



  • 驾驶员(Driver ) :控制键盘输入。

  • 领航员(Navigator ) :起到领航、提醒的作用。


优点



  • 在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强。两人合作,还有相互激励的作用,工程师看到别人的思路和技能,得到实时的讲解,受到激励,从而努力提高自己的水平,提出更多创意。

  • 对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。

  • 在企业管理层次上,结对能更有效地交流,相互学习和传递经验,分享知识,能更好地应对人员流动。


如何结对编程



  1. 驾驶员:写设计文档,进行编码和单元测试等XP开发流程。

  2. 领航员:审阅驾驶员的文档;监督驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。领航员也可以设计TDD中的测试用例。

  3. 驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟。领航员要控制时间。

  4. 主动参与。任何一个任务都首先是两个人的责任,也是所有人的责任。

  5. 只有水平上的差距,没有级别上的差异。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。

  6. 设置好结对编程的环境,座位、显示器、桌面等都要能允许两个人舒适地讨论和工作。如果是通过远程结对编程,那么网络、语音通讯和屏幕共享程序要设置好。


任务2

博客评论



























评论链接魏瑾川 实验二
博文结构简单大方,十分清爽,让人阅读起来很容易找到想要阅读的内容
博文内容将本次实验的所有任务均以简明的语言陈述,没有任何的拖沓
结构和PSP的对应博文结构与PSP的任务内容基本对应,可见博主认真按照PSP流程进行开发
差异化分析根据PSP表,发现博主的主要时间差异在需求分析和具体编码及测试这三个环节,可能与博主在开发过程中遇到了意想不到的bug有关

Git操作


代码核查

概要部分































概要部分实现情况
代码符合需求和规格说明么?基本符合,但部分功能完成度较差。
代码设计是否考虑周全?考虑周全
代码可读性如何?采用模块化编程,代码可读性好。
代码容易维护么?对于不同的功能模块,分别存储在不同的函数中,维护较为容易。
代码的每一行都执行并检查过了吗?是的

设计规范部分































设计规范实现情况
设计是否遵从已知的设计模式或项目中常用的模式?遵从
有没有硬编码或字符串/数字等存在没有
代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)?不会影响移植
在本项目中是否存在类似的功能可以调用而不用全部重新实现?没有
有没有无用的代码可以清除?没有

代码规范部分















代码规范部分实现情况
修改的部分符合代码标准和风格吗?符合规范

具体代码部分































具体代码部分实现情况
有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?没有处理异常值
参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度是以0开始计数还是以1开始计数?没有
switch语句的default分支是如何处理的?循环有没有可能出现死循环?没有使用switch语句;循环不会出现死循环。
有没有使用断言( Assert)来保证我们认为不变的条件真的得到满足?程序较为简单,没有使用断言。
数据结构中有没有用不到的元素?

效能























效能实现情况
代码的效能(Performance)如何?运行效率高。
代码中,特别是循环中是否有明显可优化的部分(?
对于系统和网络的调用是否会超时?如何处理?没有对网络的调用

可读性















可读性实现情况
代码可读性如何?有没有足够的注释?关键语句都有注释,可读性高,注释详细

可测试性















可测试性实现情况
代码是否需要更新或创建新的单元测试?不需要

日志数据


任务3,4

需求分析



  • 能够绘制任意一组{0-1}KP数据以价值重量为横轴、价值为纵轴的数据散点图

  • 能够对一组{0-1}KP数据按价值重量比进行非递增排序

  • 用户能够自主选择贪心算法、动态规划算法、回溯算法求解指定{0-1} KP数据的最优解和求解时间(以秒为单位)

  • 任意一组{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件

  • {0-1}KP 实例数据集需存储在数据库

  • 平台可动态嵌入任何一个有效的{0-1}KP 实例求解算法,并保存算法实验日志数据

  • 人机交互界面要求为GUI界面(WEB页面、APP页面都可)

  • 采用遗传算法求解{0-1}KP

  • 附加功能:用户注册登录


采用技术



  • 框架:Django



  • 前端:Html、CSS、JQuery、Bootstrap



  • 后端:Django



  • 数据库:sqlite




任务分工



















姓名 & 学号工作任务
魏瑾川_201971010140后端设计实现
郭清华_201971020107前端设计实现

软件设计


项目基本框架



  • static: 用于存放静态资源,项目前端的 CSS、Js、Img 文件都保存在此文件夹下

  • models: 用来存放项目的数据库关系模型

  • migrations: 用来作为数据库迁移的存储文件夹

  • sqlite: 轻量级数据库,用来存放整个项目所使用的数据

  • urls: 存放整个项目的路由

  • views: 存放项目的后端逻辑

  • template: 用来存放前端页面,主要是 Html 文件

  • setting.py: 配置文件


整体流程


前端实现


登陆界面

推荐阅读
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 初探Java编程:从入门到实践
    本文旨在为初学者提供Java编程的基础知识,涵盖程序、算法、流程图的概念,以及JDK环境的配置和Eclipse的使用方法。 ... [详细]
  • 作为一名跨专业考生,最近在备战研究生入学考试的计算机编程部分。虽然没有编程基础,但通过九度在线教育平台的机试教程逐步学习,进展顺利。直到遇到贪心算法相关的题目,特别是浙江大学2012年的一道机试题——《加油还是不加油》,才遇到了挑战。本文将分享我在解决这一问题过程中的思考与学习体会。 ... [详细]
  • Python数据类型6 字典
    字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
  • LCUI 2.1.0 版本现已推出,这是一个用 C 语言编写的图形用户界面开发库,适合创建轻量级的桌面应用程序。此次更新包括多项修复和功能增强,并正式宣布将启动 Android 支持的开发计划。 ... [详细]
  • 本文将指导您如何在Docker环境中高效地搜索、下载Redis镜像,并通过指定或不指定配置文件的方式启动Redis容器。同时,还将介绍如何使用redis-cli工具连接到您的Redis实例。 ... [详细]
  • 利用YAML配置Resilience4J的Circuit Breaker
    本文探讨了Resilience4j作为现代Java应用程序中不可或缺的容错工具,特别介绍了如何通过YAML文件配置Circuit Breaker以提高服务的弹性和稳定性。 ... [详细]
  • 本文详细介绍了如何通过Git Bash在本地仓库与远程仓库之间建立连接并进行同步操作,包括克隆仓库、提交更改和推送更新等步骤。 ... [详细]
  • Windows 环境下安装 Git 并连接 GitHub 的详细步骤
    本文详细介绍了如何在 Windows 系统中安装 Git 工具,并通过配置 SSH 密钥实现与 GitHub 的安全连接。包括下载、安装、环境配置及验证连接等关键步骤。 ... [详细]
  • 本文档提供了如何使用C#代码从客户订单中提取产品信息的方法,适用于需要处理和分析产品数据的应用场景。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • ▶书中第四章部分程序,包括在加上自己补充的代码,有边权有向图的邻接矩阵,FloydWarshall算法可能含负环的有边权有向图任意两点之间的最短路径●有边权有向图的邻接矩阵1 ... [详细]
  • 本改进旨在提升运行选择器中名称换行的显示效果,以提高用户体验。 ... [详细]
  • 高级聚类技术解析
    本文探讨了基于概率模型的聚类方法,包括模糊聚类、单变量高斯混合模型及其EM算法的应用。同时,深入分析了图和网络数据中的聚类技术,如通过计算离心率、半径、直径等参数来评估节点的重要性,并介绍了SCAN算法在结构化数据聚类中的应用。 ... [详细]
author-avatar
mobiledu2502890161
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有