zoukankan      html  css  js  c++  java
  • 2019软件工程-个人项目作业

    2020软件工程-结对项目作业

    1. 项目简介

    github链接

    项目 内容
    这个作业属于哪个课程 https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ
    这个作业的要求在哪里 https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ/homework/10466)
    我在这个课程的目标是 提升软件开发能力
    这个作业在哪个具体方面帮助我实现目标 提升了个人编程能力, 测试和提升代码性能的能力

    2. PSP时间花费

    PSP2.1 Personal SoftWare Process Stages 预计耗时 实际耗时
    Planning 计划 120 60
    Estimte 估计这个任务需要多少时间 1800 1700
    Development 开发 1100 1000
    Analysis 需求分析 0 0
    Desing Spaec 生成设计文档 100 40
    Design Review 设计复审 100 10
    Coding Standard 代码规范 0 0
    Design 具体设计 60 40
    Coding 具体编码 1100 180
    Code Review 代码复审 60 60
    Test 测试 180 180
    Reporting 报告 100 120
    Test Report 测试报告 0 0
    Size Measurement 计算工作量 5 0
    Postmortem & Process Improvement 事后总结 60 50
    - 合计 1800 1700

    3. 接口设计

    经过查阅资料和学习, 我了解到在接口设计中有常用的一些原则, 本次作业的设计中, 我们用到了这些原则。

    • 单一职责原则

      Single Responsibility Principle: There shuld never be more than one reason for class to change

      单一职责原则要求一个接口, 一个功能, 如果在private 方法和public接口中, 改动过多, 那么容易引起错误。 在结对编程的设计中, 计算模块里我们尽量保证一个函数只做一个事情, 比如Line Circle Point分出三个类, 每个求交点的函数只处理一种类型等。

    • 里氏替换原则

      Liskov Substitution Principle: Functions that use pointers or references to base classed must be able to use objecsts of derived classes without knowing it

      这一法则是多态的体现, 所有父指针的使用点都可以用子指针, 这要求了子类只扩展父类, 但是不可以用在覆写父类函数的时候让函数的应用范围减少。 在最初的版本中, 我们采用了Line Circle继承父类的方式实现, 后来发现这种继承影响性能, 就放弃了继承。

    • 依赖倒置原则

      依赖倒转原则是TDD测试驱动开发的体现, 要求高层模块不依赖特定的底层模块, 而是依赖其抽象, 这要求编程者提前想好接口。

    • 接口隔离原则

      clients should not be forced to depend upon interfacess that they don't use

      保证接口单一, 不要过于臃肿, 在计算模块和UI模块的对接时, 我们尽量细化接口, 让模块的每个按钮对应了刚好一个接口, 同时接口之间的功能达到了隔离。

    • 迪米特法则

      law of Demeter: least knowledge

      loose coupling: Loose coupling means they mostly independent

      这一原则要求两个类之间要低耦合, 达到loose coupling, 一个类不需要知道另一个类是怎么实现的, 更不需要因为一个类内部代码的修改二更改自己的方法。 在我们的结对编程中, 为了实现接口的高效对接, 对于接口进行和抽象和封装

    5. UML图

    7. Design By Contract

    10. 界面模块设计

    11. 界面模块与计算模块的对接

    12. 描述结对的过程

    13. 结对编程优缺点

  • 相关阅读:
    前端 fetch 通信
    编写高质量的JavaScript代码(一)
    Redis学习笔记1-Redis的介绍和认识
    gitignore不起作用解决的方法
    【我的面经】说说简历的细节——软件开发岗位
    菜鸟的mongoDB学习---(七)MongoDB 备份(mongodump)与恢复(mongorerstore)
    HDU 4927 Series 1
    树状数组求第K小值 (spoj227 Ordering the Soldiers && hdu2852 KiKi's K-Number)
    git和SVN的差别
    KVM-Introduce
  • 原文地址:https://www.cnblogs.com/ziyuzhu-edward/p/12435382.html
Copyright © 2011-2022 走看看