zoukankan      html  css  js  c++  java
  • 201871020225-牟星源 实验三 结对项目——《D{0-1}KP 实例数据集算法实验平台》项目报告


    项目 内容
    课程班级博客链接 课程链接
    这个作业要求链接 作业要求
    我的课程学习目标 1.了解软件工程过程中结对项目的开发流程
    2.理解结对编程的重要性
    3.掌握代码风格规范、设计规范,写出规范的代码及语句
    4.了解什么是汉堡包法
    这个作业在哪些方面帮助我实现学习目标 1.了解到了软件工程中结对任务的开发流程
    2.学习遗传算法
    3.了解到结对编程中代码规范,代码复审的重要性
    结对方学号-姓名 201871010135-张玉晶
    结对方本次博客链接 博客链接
    项目Github的仓库链接地址 仓库地址

    1、实验目的与要求

    (1) 体验软件项目开发中的两人合作,练习结对编程。

    (2) 掌握Github协作开发程序的操作方法。

    2、实验内容和步骤

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

    已经阅读完第3-4章内容,相关概念如下:

    1、代码风格规范
    (1)代码风格的原则是:简明,易读,无二义性。

    (2)缩进:4个空格,不用Tab键是因为在不同的情况下显示的长度可能不一样。

    (3)行宽:限定为100字符。

    (4)括号:在复杂的条件表达式中,可以清晰地表示逻辑优先级。

    (5)断行与空白的{}行:断行在程序调试时可以清晰的表达变量的变化情况,{}来判断程序的结构。

    (6)分行:不要把多个变量定义在一行上。

    (7)命名:
      - 在变量名中不要提到类型或其他语法方面的描述。
      - 避免过多的描述。
      - 如果信息可以从上下文中得到,那么此类信息就不必写在变量名中。
      - 避免可要可不要的修饰词。

    (8)下划线:用来分割变量名字中的作用域标注和变量的语义。

    (9)大小写:
       - 所有类型/类/函数名都用Pascal形式(所有单词第一个字母都大写)。
       - 所有变量都用Camel形式(第一个单词全部小写,随后单词用Pascal形式)。
       - 类/类型/变量:名词或组合名词。
       - 函数则用动词或动宾组合词来表示。

    (10)注释:注释是为了解释程序做什么(What),为什么这样做(Why)以及要特别注意的地方。

    2、代码设计规范
      (1)概念:代码设计规范不光是程序书写的格式问题,而且涉及到程序设计、模块之间的关系、设计模式等方方面面,又有不少内容与具体程序设计语言息息相关(如C,C++,JAVA,C#),但是也有通用的原则。

      (2)函数:原则:只做一件事,并且要做好。

      (3)goto:函数最好有单一出口,为了达到这一目的,可以使用goto。

      (4)错误处理:
        -参数处理:在Debug版本中,所有的参数都要验证其正确性,在正式版本中,对从外部(用户或别的模块)传递过来的参数,要验证其正确性。
        -断言:验证正确性就要用断言。

      (5)如何处理C++中的类
        -类:
          a.使用类来封装面向对象的概念和多态。
          b.避免传递类型实体的值,应该用指针传递。换句话说,对于简单的数据类型,没有必要要用类来实现。
          c.对于有显示的构造和析构的类,不要建立全局的实体,因为不知道它们在何时创建和消除。
          d.仅在有必要时,才是用“类”。
        -class vs.struct:如果只是数据的封装,用struct即可。
        -公共/保护/私有成员:按照这样的次序来说明类中的成员。
        -数据成员:
          a.数据类型的成员用m_name说明。
          b.不要使用公共的数据成员,要用inline访问函数,这样可兼顾封装和效率。
        -虚函数
          a.使用虚函数来实现多态。
          b.仅在很有必要时,才使用虚函数。
          c.如果一个类型要实现多态,在基类中的析构函数应该是虚函数。
        -构造函数
          a.不要在构造函数中做复杂的操作,简单初始化所有成员即可。
          b.构造函数不应该返回错误。
        -析构函数
          a.把所有的清理工作都放在析构函数中。如果有些析构函数在之前就释放了,要重置这些成员为0或NULL。
          b.析构函数也不应该出错。
        -new和delete
          a.如果可能,实现自己的new/delete,这样可以方便地加上自己的跟踪和管理机制。自己的new/delete可以包装系统提供的new/delete。
          b.检查new的返回值。new不一定都成功。
          c.释放指针时不用检查NULL。
        -运算符
          a.在理想情况下,我们定义的类不需要自定义操作符。确有必要时,才会自定义操作符。
          b.运算符不要做标准语义之外的任何动作。
          c.运算符的实现必须非常有效率,如果有复杂的操作,应定义一个单独的函数。
          d.当拿不定注意时,用成员函数,不要用运算符。
        -异常
          a.不要用异常作为逻辑控制来处理程序的主要流程。
          b.当使用异常时,要注意在什么地方清理数据。
          c.异常不能跨过DLL或进程的边界来传递消息,所以异常不是万能的。
        -类型继承
          a.仅在有必要时,才使用类型继承。
          b.用const标注只读的参数。
          c.用const标注不改变数据的函数。

    3、代码复审:看代码是否在代码规范的框架内正确的解决了问题。代码复审的形式包括:自我复审、同伴复审、团队复审。

    4、结对编程:结对编程中有两个角色:领航员和驾驶员。在个人编写的过程中,很多人喜欢根据个人喜好来规定代码规范,而且存在的bug自己难以发现,因此,在结对编程时,我们可以互换角色,在开始写代码之前,规定两个人都认可的一套代码规范,并且不间断地进行复审,以减少软件中存在的问题,修复bug,提高软件质量。

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

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

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

    代码审核表
    1、概要部分
    代码符合需求和规格吗 ? 代码符合需求
    代码设计是否考虑周全?
    代码可读性如何? 可读性良好
    代码容易维护吗? 容易
    代码的每一行都执行都检查过吗? 检查过,但是缺乏数据支撑
    2、设计规范部分
    设计是否遵从已知的设计模式或者项目中的常用模式? 遵从
    有没有硬编码或字符串/数字等存在?
    代码有没有依赖于某一平台?
    有没有无用代码可以清除?
    3、代码规范部分
    修改的部分符合代码标准和风格吗? 符合
    4、具体代码部分
    有没有对错误进行处理?
    参数有无传递错误,字符串的长度是字节长度还是字符的长度,是从0 开始计数还是以1 开始计数?
    结构中有没有用不到的元素?
    5、效能
    代码的效能如何?最坏的情况如何? 没有很好的达到任务的要求
    6、可读性
    代码可读性如何?有没有足够的注释? 可读性良好,注释很详细
    7、可测试性
    代码是否需要更新或创建新的单元测试? 需要更新,部分代码需要改善

    3、依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。

    任务3:采用两人结对编程方式,设计开发一款D{0-1}KP 实例数据集算法实验平台,使之具有以下功能:

    1、需求分析:

    2、功能设计

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

    3、设计实现

    • 结对编程

      • 任务分工

      • 结对编程照片

    • 项目总结
      此次项目是在实验二的基础上迭代实现的,通过完成此次项目的任务二,我了解了我的结对伙伴对实验二的处理与操作,通过评论她的博客我发现了我们存在的一些优点和缺点。我们编程能力较差,但是通过此次的结对编程,我发现两人合作真的能够带来1+1>2的效果,对于自己不了解的部分,我们互相学习,共同进步,但是由于我们两个人的能力有限,最后没有很好的完成此次项目任务,但是相对上一次任务,我们的完成有进步。

    任务4:完成结对项目报告博文作业(已完成)

    本次项目的PSP如下:

    PSP 各个阶段 自己预估的时间(小时) 实际的记录(小时)
    计划: 明确需求和其他因素,估计以下的各个任务需要多少时间 3 2
    开发 (包括下面 8 项子任务) 38 ---
    · 需求分析 (包括学习新技术、新工具的时间) 4 5
    · 生成设计文档 (整体框架的设计,各模块的接口,用时序图,快速原型等方法) 2 3
    · 设计复审 (和同事审核设计文档,或者自己复审) 1 1
    · 代码规范 (为目前的开发制定或选择合适的规范) 1 0.5
    · 具体设计(用伪代码,流程图等方法来设计具体模块) 3 3
    · 具体编码 20 ---
    · 代码复审 4 ---
    · 测试(自我测试,修改代码,提交修改) 3 ---
    报告 6 3
    测试报告(发现了多少bug,修复了多少) 2 ---
    计算工作量 (多少行代码,多少次签入,多少测试用例,其他工作量) 1 ---
    事后总结, 并提出改进计划 (包括写文档、博客的时间) 3 3
    总共花费的时间 (小时) 45 ----
  • 相关阅读:
    DAT批处理文件语法
    TreeView控件问题汇总
    windows xp home安装iis
    【Vegas原创】网站计数器(asp)
    转载:shell python脚本互调
    转载:linux的文件属性和权限学习——分析ls命令结果
    python 正则表达式匹配中文
    Python正则表达式
    linux命令备份
    移植算法编译环境到linux【redhat9.0如何显示汉字】
  • 原文地址:https://www.cnblogs.com/muxingyuan/p/14655985.html
Copyright © 2011-2022 走看看