Lesson6_Homework

Lesson6_Homework

1、用例建模
a.绘制Asg_RH用例图

Alt text

b.美团订酒店用例图

Alt text

c.对比两个时代、不同地区产品的用例图,总结在项目早期,发现创新的思路与方法

通过上述用例图可看出,预定酒店的基本功能是都有的,主要是新时期的这个系统功能更多,设计的更人性化,也更加方便.
另外随着互联网技术的发展,外部系统对这个预定系统的支持也更加多样化,就比如多种支付方式.
创新的思路主要是要更加方便,站在用户的角度想怎么设计才是更加符合用户的需求.或者增删功能,提高服务效率,简化界面.

d. 请使用 SCRUM 方法,在(任务b)用例图基础上,编制某定旅馆开发的需求 (backlog)。
ID Name Imp Est How to demo notes
1 查找酒店 100 10 进入查找酒店的界面后,选定酒店类型、位置、入住时间、价格等信息后便可根据这些信息搜索数据库,得到全部或部分条件的酒店 若可选的条件项为空,则不根据该条件进行筛选
2 下订单 100 10 下订单包括选择酒店,选择房间类型,核对信息和提交订单 主要是确定订单的具体信息
3 订单列表 80 5 可查看已下但尚未支付的订单,可在该页面进行订单的支付和取消,也可以通过上一步提交订单后直接进行支付 主要是方便用户考虑是否确认支付和对多个订单的选择
4 收藏酒店 30 2 用户可根据自己的消费体验或者兴趣爱好收藏某些酒店,方便后续的下订单 可通过个人信息界面中的收藏按扭查看自己的收藏,可在酒店主页收藏该酒店
5 历史订单 50 5 用户可查看已消费并使用过的订单 显示所有历史订单,可提供评价功能
2、业务建模
a. 在(任务b)基础上,用活动图建模找酒店用例。简述利用流程图发现子用例的方法。

Alt text
通过活动图的一个建模,可以把某个用例的整个流程给考虑清楚,具体到每一个步骤.然后通过这一个个的步骤就可以再来考虑发现子用例.

b. 选择你身边的银行 ATM,用活动图描绘取款业务流程

Alt text

c. 查找淘宝退货业务官方文档,使用多泳道图,表达客户、淘宝网、淘宝商家服务系统、商家等用户和系统协同完成退货业务的过程。分析客户要完成退货业务,在淘宝网上需要实现哪些系统用例

Alt text
需要实现的用例:
1.退货申请官方的评价审查
2.评价买家信用等级
3.处理退货申请,退款请求
4.退款
5.收款

3、用例文本编写
在大作业基础上,分析三种用例文本的优点和缺点

摘要(brief)

  • 优点:简介,有助于快速了解主题和范围
  • 缺点:不够详尽,只有主成功场景

非正式(casual)

  • 优点:较为详细地展示了需求,简洁,覆盖了多个不同场景.
  • 缺点:不如写摘要方便,也不如详述的详尽

详述(fully)

  • 优点:清晰深入详尽地展示了需求,同时具有补充部分
  • 缺点:编写耗时长,不易阅读

Lesson5_Homework

Lesson5_Homework

技术学习报告

Python Django用于后台开发
团队初步决定后台用Django实现,于是就学习了点相关的知识,还有相关环境的配置

什么是Django

Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。

安装

1.首先要有Python的环境,由于我是在ubantu下安装,自带的Python环境,若是在windows下,还需去设置环境变量
2.有了Python后的安装命令

1
2
3
4
5
6
7
8
9
10
11
sudo apt-get install python-pip 
sudo apt-get install python-virtualenv #安装本地虚拟环境管理工具
mkdir ~/django # 创建目录
cd ~/django
virtualenv venv #在~/django目录下,创建一个venv的虚拟环境
source venv/bin/activate #开启虚拟环境
pip install django #用pip工具在线安装Django
mkdir ~/workplace #创建工作目录
cd ~/workplace
django-admin.py startproject helloworld #创建一个django项目
cd ~/helloworld

3.安装并创建项目文件后,就可以在项目文件中运行manage.py开启服务器,命令如下

1
python manage.py runserver

配置vscode的Django开发环境

1.安装如下插件

1
2
3
4
5
6
Git history
Python
Django Template
jquery Code Snippets
Bootstrap 3 Snippets
Django Template

2.在项目文件所在文件加一个requirements.txt文件
内容如下

1
2
3
4
django<1.10
pylint
pylint-django
autopep8

执行 pip install -r requirements.txt 安装相关模块
3.在安装步骤所建的django文件中用如下命令开启虚拟环境
source venv/bin/activate #开启虚拟环境
4.用code .打开vscode
若有提示安装什么,点install就是了

用Django开发后台接口

稍微看了下,居然是比go还方便,直接把服务端实现细节隐藏了,就设计api就行
举得例子是参考网上的博客
如图
Alt text
是在helloworld文件夹里新建一个view.py的文件
例子返回的是一个json对象
然后修改相同目录下的urls.py
Alt text
接着在上层目录调用命令
python manage.py runserver
Alt text
在网页调用接口
Alt text
Alt text

Lesson2_Homework

1、简答题
简述瀑布模型、增量模型、螺旋模型(含原型方法)的优缺点
  • 瀑布模型
    • 优点:
      1)为项目提供了按阶段划分的检查点。
      2)当前一阶段完成后,您只需要去关注后续阶段。
      3)可在迭代模型中应用瀑布模型。
    • 缺点:
      1)在项目各个阶段之间极少有反馈。
      2)只有在项目生命周期的后期才能看到结果。
      3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
  • 增量模型
    • 优点:
      采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量。当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。这样即可先发布部分功能给客户,对客户起到镇静剂的作用。此外,增量能够有计划地管理技术风险。
    • 缺点:
      1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。 2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。 3)如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。
  • 螺旋模型
    • 优点:
      设计上的灵活性,可以在项目的各个阶段进行变更;成本计算变得简单容易;
    • 缺点
      采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失.过多的迭代次数会增加开发成本,延迟提交时间。
      螺旋模型的使用范围:螺旋模型只适合于大规模的软件项目。
      简述 UP 的三大特点,其中哪些内容体现了用户驱动的开发,哪些内容体现风险驱动的开发?

UP的三大特点:用例驱动、以体系结构为核心、迭代及增量。
用例驱动和迭代及增量体现了用户驱动的开发。早期的迭代目标要能够识别与降低最高风险,并且能构造客户最关心的可视化特性。
以体系结构为核心体现了风险驱动的开发,早期迭代要致力于核心架构的构造、测试和稳定。因为没有稳固的架构就会带来高风险。

UP 四个阶段的划分准则是什么?关键的里程碑是什么?
  • 先启阶段:生命周期目标(Lifecycle Objective)里程碑,用于评价项目基本的生存能力。
  • 精化阶段:生命周期架构(Lifecycle Architecture)里程碑,为系统的结构建立了管理基准,并使项目小组能够在构建阶段中进行衡量。此刻,要检验详细的系统目标和范围、结构的选择以及防范的主要风险的解决方案。
  • 构建阶段:初始运作能力(Initial Operational)里程碑,该里程碑决定了产品是否可以在测试环境中进行部署。此刻,要确定软件、环境、用户是否可以开始系统运作。
  • 移交阶段:产品发布里程碑。此时要确定目标是否实现,是否应该开始另一个开发周期。
  • 里程碑:迭代的结束点,此时有重要决策或评估产生。
    IT 项目管理中,“工期、质量、范围/内容” 三个元素中,在合同固定条件下,为什么说“范围/内容”是项目团队是易于控制的
  • IT项目中,工期是由客户与团队早已在合同中协商好的,不能随意更改。
  • 质量是在合同中客户对团队定下一定要求的,也不能随意更改。
  • 范围/内容是由团队控制的,因为只有由团队来控制,项目才能够顺利完成。
    为什么说,UP 为企业按固定节奏生产、固定周期发布软件产品提供了依据?
    UP将软件的生命周期划分为四个阶段,并且开发被组织成一系列固定的短期小项目,称为迭代,每次迭代都产生经过测试、集成并可执行的局部系统。每次迭代都具有各自的需求分析、设计、实现和测试活动。因此,在每次迭代完成后,都有一定的产品可供发布。
    2、项目管理使用
    使用截图工具(png格式输出),展现你团队的任务 Kanban
    Alt text

Lesson1_Homework

1.简单题

软件工程定义

关于软件工程的定义,在GB/T11457-2006《信息技术 软件工程术语》中将其定义为”应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、和维护的工程或进行研究的学科”。

阅读经典名著”人月神话”等资料,解释software crisis, COCOMO模型

软件危机:
软件危机(英语:Software Crisis)是早期计算机科学的一个术语,是指在软件开发及维护的过程中所遇到的一系列严重问题,这些问题皆可能导致软件产品的寿命缩短、甚至夭折。软件开发是一项高难度、高风险的活动,由于它的高失败率,故有所谓“软件危机”之说。软件危机的本源是复杂、期望和改变。这个术语用来描述正急遽增加之电脑的力量带来的冲击和可能要处理的问题的复杂性。从本质上来说,它谈到了写出正确、可理解、可验证的计算机程序的困难。
COCOMO模型:
构造性成本模型(COCOMO,英文全称为Constructive Cost Model)是由巴里·勃姆(Barry Boehm)提出的一种软件成本估算方法。这种模型使用一种基本的回归分析公式,使用从项目历史和现状中的某些特征作为参数来进行计算。从本质上说是一种参数化的项目估算方法,参数建模是把项目的某些特征作为参数,通过建立一个数字模型预测项目成本

软件生命周期
按照SWEBok的KA划分,本课程关注那些KA或知识领域

(1)软件需求知识域

需求定义为解决真实世界问题而必须展示的特性。

第一个知识子域是软件需求基础,它包括软件需求本身的定义、主要的需求类型的定义,如产品与过程、功能与非功能、突发性(emergent)特性等。子域也描述了可量化需求的重要性,并区分了系统的和软件的需求。

第二个子域是需求过程,它介绍过程本身,面向余下的5个子域,说明需求工程如何与其它软件工程过程吻合。它描述了过程模型、过程参与者、过程支持与管理、过程质量与改进。

第三个子域是需求获取,它涉及软件需求来自何方?软件工程师如何收集这些需求,它包括需求来源和收集技术。

第四个子域是需求分析,涉及分析需求的过程:(1)检测和解决需求之间的冲突;(2)发现软件的边界,以及软件如何与外界交互;(3)详细描述系统需求和软件需求。需求分析包括需求分类、概念建模、体系结构设计与需求分配、需求协商。

第五个子域是需求规格说明,一般是指产生一份(电子)文档,这样可以系统地评审、评价和批准需求。对于复杂系统,特别是涉及大量非软件组件的系统,至少需要产生3类不同的文档:系统定义、系统需求规格说明、软件需求规格说明。子域描述了这3类文档,以及产生它们的活动。

第六个子域是需求确认,目标是在分配资源给需求之前,发现任何潜在的问题。需求确认涉及检查需求文档,以保证它们定义了正确的系统(即,这是用户期望的系统)。这个子域进一步划分为需求评审的引导、快速原型、模型确认和接收测试的描述。

第七个和最后一个子域是实际考虑,它描述在实践中需要理解的主题。第一个主题是需求过程的迭代本质,后面3个主题是关于处于实际反映了要建造或已经建造的软件的状态的需求的变更管理和维护。它包括变更管理、需求属性、需求追踪。最后一个的主题是需求度量。

(2)软件设计知识域

根据IEEE的定义,设计既是“定义一个系统或组件的体系结构、组件、接口和其它特征的过程”,又是“这个过程的结果”。软件设计的知识域分为6个子域。

第一个子域是软件设计基础,它是理解软件设计作用和范围的基础,这些是:一般的软件概念、软件设计上下文和软件设计的使能(enabling)技术。

第二个子域将软件设计的关键问题聚集在一起,它们包括:并发性、事件的控制和处理、组件的分布、错误和异常处理、容错、交互与表现、数据持久性。

第三个子域是软件结构与体系结构,它的主题是体系结构与视点、体系结构风格、设计模式、程序与构架族。

第四个子域描述软件设计质量的分析与评价。虽然有一个完整的软件质量知识域,这个子域描述与软件设计质量特别有关的主题。这些方面包括:质量属性、质量分析和评价技术与度量。

第五个子域是软件设计符号,它分为结构与行为描述两部分。最后一个子域是软件设计策略与方法。首先描述一般策略,然后是面向功能的设计方法、向对象的设计方法、以数据结构为中心的设计、基于组件的设计和其它方法。

(3)软件构造

软件构造指通过编码、验证、单元测试、集成测试和排错的组合,详细创建一个可以工作的、有意义的软件,其知识域分为3个子域。

第一个子域是软件构造的基础,前3个主题是:复杂性最小化、变更预见和为验证进行构造。最后一个主题讨论软件构造的标准。

第二个子域描述构造的管理,主题包括:构造的模型、构造的计划、构造的度量。

第三个子域覆盖实践考虑,主题包括:构造的设计、构造的语言、编码、构造的测试、复用、构造的质量和集成。

(4)软件测试

软件测试由在有限测试用例集合上,根据期望的行为,对程序的行为进行的动态验证组成,测试用例是从实际上是无限的执行域中适当的选择出来的。软件测试包括5个子域。

第一个子域是软件测试基础,首先介绍与测试有关的术语,然后描述测试的关键问题,最后是测试与其它活动的联系。

第二个子域是测试级别,这些是根据测试对象(target)和测试目标来划分的。

第三个子域是测试技术。第一个范畴包括基于测试人员直觉和经验的测试,第二组是基于规格说明的技术组成,然后是基于代码的技术、基于错误(fault)的技术、基于使用的技术和与应用本质有关的技术。最后讨论如何选择和组合适当的技术。

第四个子域是测试相关的度量,度量划分为:与被测试的程序的评价有关的度量、与测试本身的评价有关的度量。

最后一个子域是测试过程,包括了测试时的实际考虑和测试活动。

(5)软件维护

软件一旦投入运行,就可能出现异常,运行环境可能发生改变,用户回提出新的需求。生命周期的维护阶段从软件交付时开始,但维护活动出现得还要早。软件维护知识域划分为4个子域。

第一个子域是软件维护基础:定义和术语、维护的本质特征、维护的必要性、维护成本的大份额性、软件的进化、维护的分类。

第二个子域将软件维护中的关键问题聚集在一起,这些是:技术问题、管理问题、维护成本估算和软件维护度量。

第三个子域是维护过程,其中的主题包括各种维护过程和维护活动。

第四个子域是维护技术,包括程序的理解、再工程和逆向工程。

(6)软件配置管理

软件配置管理(Software ConfigurationManagement,SCM)是为了系统地控制配置的变更和维护配置在整个系统的生命周期中的完整性和可追踪性,而标识软件在时间上不同点的配置的学科。这个知识域包括6个子域。

第一个子域是SCM过程管理,包括的主题有:SCM的组织结构上下文、SCM的约束和指导、SCM计划、SCM计划本身和SCM的监管。

第二个子域是软件配置标识,它识别要控制的项目,为各个项目及其版本建立标识方案,确定在获取和管理被控制项目中要使用的工具和技术。子域中第一个主题是识别要控制的项目和软件库。

第三个子域是软件配置控制,它管理软件生命周期中的变更。其中的主题包括:(1)软件变更的请求、评价和批准;(2)实现软件变更;(3)偏离和放弃(deviation and waiver)。

第四个子域是软件配置状态簿记,其主题有软件配置状态信息和软件配置状态报告生成。

第五个子域是软件配置审计,包括:软件功能配置审计、软件物理配置审计、软件基线的过程内部(in-process)审计。最后一个子域是软件发布管理和交付,覆盖软件建造和软件发布管理。

(7)软件工程管理

软件工程管理知识域处理软件工程的管理与度量,虽然度量是所有知识域的一个重要方面,但在这里涉及的是度量程序的主题。软件工程管理6个子域,前5个覆盖软件工程管理,第六个描述软件度量的程序。

第一个子域是启动和范围定义,它由需求的确定与协商、可行性分析、需求的评审和修订过程组成。

第二个子域是软件工程计划,包括过程计划、确定可交付成果、工作量、进度与成本估算、资源分配、风险管理、质量管理、计划本身的管理。

第三个子域是软件项目实施,它的主题是:计划的实现、供应商合同管理、度量过程的实现、过程的监理、过程的控制、报告生成。

第四个主题是评审与评价,主题有:确定需求的满足程度、评审和评价项目性能。

第五个主题描述项目的关闭:确定关闭项目、关闭涉及的活动。

第六个子域描述软件工程度量,特别是度量本身的程序。产品和过程的度量在软件工程过程知识域中描述,许多其它知识域也描述其特定的度量。这个子域的主题包括:建立和维持度量工作、度量过程的计划、进行度量过程和评估度量。

(8)软件工程过程

软件工程过程的知识域涉及软件工程过程本身的定义、实现、评定、度量、管理、变更和改进。它分为4个子域。

第一个子域是过程实现与变更,其主题有:构成基础结构、软件过程管理周期、过程实现与变更的模型、实际考虑。

第二个子域处理多成定义,主题有:软件生命周期模型、软件生命周期过程、过程定义符号、过程适配(adaptation)和自动化。

第三个子域是过程评定,主题有:过程评定模型和过程评定方法。

第四个子域描述过程与产品度量。软件工程过程覆盖一般的产品度量,以及过程度量。特定于各知识域的度量在相关的知识域描述。子域的主题有:过程度量、软件产品度量、度量结果的质量、软件信息模型和过程度量技术。

(9)软件工程工具和方法

软件工程工具和方法知识域包括软件工程工具、软件工程方法。软件工程工具子域使用了与指南相同的结构,为其它9个软件工程知识域各分配一个主题,附加一个主题是其它工具问题,例如工具集成技术,这些问题可能应用于所有类型的工具。

软件工程方法子域分为3个小节:处理形式化途径的启发式方法、处理基于数学的途径的形式化方法、处理基于各种原型的软件开发途径的原型方法。

(10)软件质量

软件质量知识域处理跨越软件生命周期过程的软件质量的考虑,由于软件质量在软件工程中无处不在,其它知识域也涉及质量问题,读者可以注意到本知识域到其它知识域的指示器。本知识域覆盖3个子域。

第一个子域描述软件质量基础,例如软件工程文化和伦理学、质量的价值与成本、模型和质量特征和质量改进。

第二个子域覆盖软件质量管理过程,主题有:软件质量保证、验证和确认、评审和审计。

第三个即最后一个子域描述与软件质量有关的实际考虑,主题包括:软件质量需求、缺陷特征、软件质量管理技术、软件质量度量。

(11)软件工程相关学科

最后一章是软件工程相关学科。为确定软件工程的范围,有必要鉴别与软件工程有公共边界的学科,这一章按字母顺序,鉴别这些相关学科。对每个相关学科,使用我们找到的基于一致认可的来源,进行以下内容的鉴别:(1)资料性定义(可行时);(2)知识域列表。相关学科包括:计算机工程、计算机科学、管理、数学、项目管理、质量管理、软件人类工程学、系统工程。

解释CMMI的五个级别,例如:Level 1-Initial:无序,自发生产模式

1. 初始级
  软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
2.可重复级
  建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
3. 已定义级
  已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
4. 量化管理级
  分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
5. 优化管理级
  过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。

用自己的语言简述SWEBok或CMMI

SWEBok描述了软件工程一些实践所需要的知识领域,应该是软件工程的教育基础.可以帮助(1)促进世界范围内对软件工程的一致观点;(2)阐明软件工程相对其它学科(如计算机科学、项目管理、计算机工程和数学等)的位置,并确立它们的分界;(3)刻画软件工程学科的内容;(4)提供使用知识体系的主题;(5)为开发课程表和个人认证与许可材料,提供一个基础。

2.解释PSP各项指标及技能要求

阅读<<现代软件工程>>的PSP:Personal Software Process章节

http://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html

按表格PSP2.1,了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据?

Alt text
要做什么如图所示
需要的技能:

  1. 知识: 对具体技术的掌握, 动手能力
    例如: 对Java, C/C++/C#, 诊断/提高效能的技术, 对device driver, kernel debugger 的掌握;对于某一开发平台的掌握。
  2. 经验: 对问题领域的知识和经验的积累 (例如: 对于医疗行业的了解, 对于金融行业的了解)。

第一点和第二点都可以在很多简历上看到, 也可以比较容易地检测出来。随着经验的增长, 一个工程师可以掌握更广泛,更深入的技术和问题领域的知识。

  1. 通用的软件设计思想, 软件工程思想的提高
    这一方面就比较虚,什么是好的软件设计思想, 什么是好的软件工程思想? 一个工程师开了博客, 转发了很多别人的文章, 这算有思想么? 另一个工程师坚持任何设计都要画 UML 图, 这算有思想么? 我个人比较重视一个程序员原创的博客, 在面试的时候, 我们别空口吹思想, 一起来看看你写的原创博客吧。

  2. 职业技能 (区别于技术技能)
    职业技能包括: 自我管理的能力; 表达和交流的能力; 与人合作的能力; 把任务按质按量完成的执行力; 这些能力在IT 行业和其它行业都很重要。

如何统计每项数据:
a) 项目/任务有多大?
说明项目的大小, 一般用代码行数 (Line Of Code, LOC) 来表示;也可以用功能点 (function point). 一个重要的指标是: 你在实际产品中写了多少代码, 不包括空行/注释行/单字符行 .
b) 花了多少时间?
可以用小时, 天,月,年来表示。一组人所花费的时间可以用 (人数*时间) 来表示,例如某项目花费了10个人·月。
c) 质量如何?
交付的代码中有多少缺陷? 交付有两个定义,
· 在 Code Complete “代码完成” 的时候, 交付给测试人员
· 交付到顾客那里去 (在软件交付的时候)。
可以用缺陷的数量来除以项目的大小。 例如 5 bugs / KLOC, 意味着每千行程序有5个缺陷。
d) 是否按时交付