zoukankan      html  css  js  c++  java
  • 软工第二次作业

    1 GitHub项目地址

    https://github.com/shewhowasborngood/wordChain

    2 & 14 PSP

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划
    · Estimate · 估计这个任务需要多少时间 40 35
    Development 开发
    · Analysis · 需求分析(包括学习新技术) 280 450
    · Design Spec · 生成设计文档 35 0
    · Design Review · 设计复审(和同事审核设计文档) 20 0
    · Coding Standard · 代码规范(为目前的开发制定合适的规范) 10 30
    · Design · 具体设计 90 150
    · Coding · 具体编码 450 660
    · Code Review · 代码复审 160 90
    · Test · 测试(自我测试,修改代码。提交修改) 300 500
    Reporting 报告
    · Test Report · 测试报告 60 70
    · Size Measurement · 计算工作量 20 30
    · Postmortem & Process Improvement Plan · 事后总结,并提出过程改进计划 15 0
    合计 1480 2015

    3 接口设计方法

    • Information Hiding

      信息隐藏是用来保护程序,以减小设计决策的改变对程序带来的影响。保护涉及提供稳定的接口,使

      用编程语言功能或显式导出策略来阻止客户端访问类或软件组件的某些方面。在编程过程中,将多个

      定义为public接口的函数进行封装,仅对使用者开放指定的函数调用接口,从而让使用者不能随意的

      调用和修改核心部分程序,避免不当的使用给程序带来的麻烦。例如在我们的程序中,设计一个类,

      在里面定义可以让用户调用的接口,将其他底层函数保护起来。在程序计算过程中,如果不进行封

      装,用户就可以随意修改变量导致程序以及计算结果的不稳定。

    4 计算模块接口的设计与实现过程

    • 算法描述

      采用面向对象的设计思想,运用动态规划的方法,不断的拆分数组,以寻找符合要求的,再将若干个目标合并。

    • 类的介绍

      计算模块的类包括Wordlist类、Word类和List的模板类

      Wordlist类:处理读取的单词表,生成目标单词链

      Word类:存储单词及单词的相关信息(首尾字母,单词长度)

      List的模板类:提供链表的基本方法

    • 关键算法

      ​在Wordlist类里的getwordchain函数是实现最大子链功能的部分,排除找到目标尾部、子

      ​链为空、子链中没有符合要求的单词这几个终止递归的情况外,单词表中剩下的单词要进入

      ​递归进行进一步的查找:如果找到了可连接单词,在链表中删除该单词,然后在剩下单词组

      ​成的新链表中递归查找最长单词串;接着找到子链表中的最大子链,并比较,选择更大的一

      ​个;一直进行递归调用直到子链中没有符合要求的单词,则返回最大子链(当最大子链不存

      ​在,返回空链表)。

    5 UML

    6 计算模块接口部分的性能改进

    • 可以通过改进部分算法减少递归次数:在递归开始前遍历所有单词,标记出尾字母没有任何

      对应的单词的首字母的单词,可以降低一些复杂度

    7 Design by Contract & Code Contract

    ​ 一般来说,在面向对象技术中,我们认为“接口”是唯一重要的东西,接口定义了组件,接口

    ​ 确定了系统,接口是面向对象中我们唯一需要关心的东西,接口不仅是必要的,而且是充分

    ​ 的。然而,契约观念提醒我们,仅仅有接口还不充分,仅仅通过接口还不足以传达足够的信

    ​ 息, 为了正确使用接口,必须考虑契约。只有考虑契约,才可能实现面向对象的目标:可靠

    ​ 性、可扩展性和可复用性。

    ​ 在软件体系中,程序库和组件库被类比为server,而使用程序库、组件库的程序被视为

    ​ client。根据这种C/S关系,我们往往对库程序和组件的质量提出很严苛的要求,强迫它们承

    ​ 担本不应该由它们来承担的责任,而过分纵容client一方,甚至要求库程序去处理明显由于

    ​ client错误造成的困境。客观上导致程序库和组件库的设计和编写异常困难,而且质量隐患

    ​ 反而更多;同时client一方代码大多松散随意,质量低劣。引入契约观念之后,这种C/S关系

    ​ 被打破,大家都是平等的,你需要我正确提供服务,那么你必须满足我提出的条件,否则我

    ​ 没有义务“排除万难”地保证完成任务。

    9 异常处理

    ​ 在不允许出现环情况下出现了环,报错退出

    ​ 命令行参数不符合规定的,不响应

    ​ 在命令行输入-h -t时,若后面出现的不是单个字母,默认读首字母

    ​ 文件无法打开时,报错退出

    10 命令行模块设计

    ​ 直接在main函数里实现,对每个命令行参数进行判断,并对应不同处理

    11 命令行模块与计算模块对接

    ​ 通过传参的方式,在计算模块中把对应参数传递进去

    12 结对过程

    13 结对编程优缺点

    • 优点
    1. 有同伴的情况下,不管是出于不愿意拖累别人还是有心理上的支持,会更容易坚持下去
    2. 在编程过程中可以从别人身上学习到更多的东西
    3. 拓宽思路,考虑的更全面
    • 缺点
    1. 需要协调时间,找到大家都可以当面讨论的机会​
  • 相关阅读:
    idea安装
    IntelliJ IDEA 简单使用
    git客户端安装
    一、AJAX
    一、JSP标签介绍,自定义标签
    注解
    线程
    网络编程Socket
    一 批量插入数据(使用批处理
    day87
  • 原文地址:https://www.cnblogs.com/fairies/p/10540289.html
Copyright © 2011-2022 走看看