Scott-Cai


  • Home

  • Archives

backend后端部署文档

Posted on 2019-06-22

一、部署架构图

物理视图

二、部署流程

1.1 服务器系统环境

  • 腾讯云 Ubuntu 16.04 LTS Server

1.2 Docker 安装

ubuntu 安装参考如下链接:

  • 官方参考链接
  • 中文参考链接

windows安装参考如下链接:(win10仅支持win10 pro)

  • Windows Docker 安装

1.3 构建自定义的 Python Flask 应用镜像

为了Docker化一个 Python Flask 应用镜像,我们将要构建我们自己的Docker镜像,这意味要创建一个Dockerfile。

在绝大多数的虚拟机环境中,假如你想要创建一个机器的镜像,你需要首先创建一个虚拟机,然后安装好操作系统,然后安装好应用程序,最后将其转化成一个模板或者镜像。然而,对于Docker来说,这些步骤都可以通过 Dockerfile 进行自动化。一个 Dockerfile 是一个可以向 Docker 提供构建指令的方式。我们将要创建一个可以用来部署一个最简单的 Flask 应用镜像的 Dockerfile 。

项目内容和结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.
├── api # 项目App API源码目录
│ ├── account # 用户相关api
│ │ ├── account_function.py
│ │ ├── utils.py # 辅助函数
│ ├── questionnaire # 问卷相关api
│ │ ├── ans_function.py
│ │ ├── que_function.py
│ │ ├── utils.py # 辅助函数
│ ├── task # 其他任务相关api
│ │ ├── task_function.py
│ │ ├── utils.py # 辅助函数
│ ├── utils # 全局辅助函数
│ │ ├── assist.py
│ │ ├── match.py
│ │ ├── utils.py
├── dbTools # db
├── Dockerfile # Docker文件
├── README.md
├── app.py # app入口
├── requirements.txt # 相关依赖
├── setup.md
app.py里面主函数设置:
1
2
3
4
5
6
7
8
9
# 测试docker后端部署
@app.route('/')
def test_docker():
return 'Hi!Welcome to our earn_money app!'


if __name__ == '__main__':
CORS(app, supports_credentials=True)
app.run(host='0.0.0.0', port=8082, debug=True)
requirements.txt:
1
2
3
4
5
6
7
flask>=0.10
Werkzeug>=0.9
DBUtils
PyMySQL==0.8.1
redis
flask-cors
flask_login
编写Dockerfile
  • 用 From 来继承一个 Docker 镜像

Dockerfile 的第一条指令是FROM指令。这用来将一个已经存在的 Docker 镜像指定为基础镜像。这基本上为我们提供了继承另一个Docker镜像的方法。除了FROM指令之外,还包含了一个MAINTAINER指令,其是用来显示 Dockerfile 的作者的。然后,使用 ENV LANG C 来解决后面安装 python3 时出现的 locale 问题。

1
2
3
FROM python:3.7-alpine
LABEL maintainer="earn_money"
ENV LANG C.UTF-8d
  • 将当前目录里面的代码文件拷贝到镜像里面,并且安装 Python 依赖
1
2
3
4
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
RUN pip3 install flask-cors --upgrade
  • 设置 EntryPoint 去告诉 Docker 在这个 docker container 中运行 python3 的命令,执行 app.py
1
2
ENTRYPOINT ["python3"]
CMD ["app.py"]

总的Dockerfile如下:

1
2
3
4
5
6
7
8
9
10
FROM python:3.7-alpine
LABEL maintainer="earn_money"
ENV LANG C.UTF-8d

COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
RUN pip3 install flask-cors --upgrade
ENTRYPOINT ["python3"]
CMD ["app.py"]

构建自己的Docker Image

这一步获取官方镜像会很慢,可以用镜像加速器。(很好用,不然你会等到疯掉)

参考链接:镜像加速器

1
$ docker build -t earn_money:latest .

使用你构建的镜像运行一个 Docker Container

1
docker run -d -p 8080:8082 earn_money

-d(detach,脱离)标志是用来告诉 Docker 在后台运行容器;另一个标志是 -p,这个标志能让用户来将一个端口从主机机器映射到容器中的一个端口。

不加-d 参数结果如下:(测试时试着用了多个端口)

我们使用的 Flask 应用默认暴露了 5000 端口来提供HTTP服务。默认情况下,与Docker容器内部绑定的端口并没有与主机系统绑定。为了让外部的系统访问容器内部暴露的端口,这些端口必须通过使用 -p 标志从主机端口映射到容器端口。假如我们想要端口从主机的 8080 端口,映射到容器中的 8082 端口,我们可以通过使用这种语法 -p 8080:8082。

从上面的命令中,看起来我们的容器已经启动成功了。我们可以通过运行执行docker ps 或者docker container list来验证。

在浏览器中访问 http://localhost:8080 , 你现在应该能够拿到 Python Flask 服务器返回的信息。

三、常见问题解决方法

1. Docker 安装失败

可能是因为天朝被墙的原因,强烈建议使用国内源而不是官方源,详情可以见前面 docker 安装的中文参考链接。

2. Docker 镜像拉取缓慢

使用国内镜像源加速。

参考链接

其他不确定错误

请检查系统环境配置是否和本仓库部署环境一致

  • python3.7
  • Docker version 18.09.6, build 481bc77
  • Ubuntu Xenial 16.04 (LTS)

docker部署web应用

Posted on 2019-06-22

一、安装docker

系统要求

Docker CE 支持以下版本的 Ubuntu 操作系统:

  • Bionic 18.04 (LTS)

  • Xenial 16.04 (LTS)

    注:win下子系统shell不支持,启动docker会找不到bus.

ubuntu 安装参考如下链接:

  • 官方参考链接
  • 中文参考链接
1.1 卸载旧版本

旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:

1
$ sudo apt-get remove docker docker-engine docker.io containerd runc

1.2 添加使用 HTTPS 传输的软件包以及 CA 证书
1
2
3
4
5
6
7
$ sudo apt-get update

$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common

添加软件源的 GPG 密钥(官方源比较慢在注释中)

1
2
3
4
5
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -


# 官方源
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

向 source.list 中添加 Docker 软件源

1
2
3
4
5
6
7
8
9
10
11
$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"


# 官方源
# $ sudo add-apt-repository \
# "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
# $(lsb_release -cs) \
# stable"
1.3 安装 Docker CE
1
2
3
$ sudo apt-get update

$ sudo apt-get install docker-ce
1.4 使用脚本自动安装
1
2
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
1.5 启动 Docker CE
1
2
$ sudo systemctl enable docker
$ sudo systemctl start docker
1.6 建立 docker 用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:

1
$ sudo groupadd docker

将当前用户加入 docker 组:

1
$ sudo usermod -aG docker $USER

退出当前终端并重新登录,进行如下测试。

1.7 测试 Docker 是否安装正确
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

若能正常输出以上信息,则说明安装成功。

二、Docker-Compose 安装

  • 官方参考链接

    1. Run this command to download the current stable release of Docker Compose:
    1
    sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    1. apply executable permissions to the binary:
    1
    sudo chmod +x /usr/local/bin/docker-compose
    1. Test the installation.
    1
    2
    $ docker-compose --version
    docker-compose version 1.24.0, build 1110ad01

三、Mysql-Client 安装(验证测试用)

1
sudo apt install mysql-client

四、服务器程序配置运行

1. 拉取后台源代码
1
git clone https://github.com/sysu-change/backend.git
2. Docker-compose 一键部署
1
2
cd backend
docker-compose up -d
3. 测试服务器运行状况
1
curl localhost:8080

有获得响应则说明 api 转发部署成功。

1
curl localhost:8080

若成功 get 到页面文件,则说明使用 vue 写的 web 前端页面转发部署成功。

eolinker接口管理系统使用

Posted on 2019-06-16

简介

EOLINKER 是国内API接口管理解决方案的领军者,是国内最大的在线API接口管理服务供应商,致力于满足各行业客户在不同应用环境中对接口管理全生命周期的个性化需求,提供API开发管理、开发团队协作、自动化测试、网关以及监控等服务,帮助企业实现开发运维一体化,提升开发速度并且降低运维成本。简单来说,eolinker是一款针对接口信息管理的平台,它集成了以下功能:

1、接口信息的录入与导出

2、在线测试

3、团队协作管理

4、开发环境管理

5、支持数据字典的录入

6、用户常用到的小工具

7、对状态码进行管理

8、在线社区讨论

官网:eolinker官网

工作空间

EOLINKER中设计有 工作空间(Work Space) 系统,用户可以创建多个工作空间,可以通过工作空间按照企业内的子公司、部门或者项目进行分离,每个工作空间中开通的产品、协作的人员、项目数据等都不一样,并且工作空间之间的数据相互独立,方便进行管理。在EOLINKER中,可以免费创建无数个工作空间,并且可以加入其他人的工作空间中。因为不同空间的项目数据以及人员是互相独立的,因此您必须要切换到相应的工作空间才可以看到该工作空间下的项目数据。

工作空间

API管理与自动化测试

API研发管理

进入对应界面可以看到API目录,版本号和类型,点击项目查看具体项目详情
项目详情

用的最多一般只有API文档和API快速测试这两个功能,下面详细介绍。

点击API文档,进入API文档界面,可以新建分组,在对应分组里添加对应的API
API文档

点击新建,可以创建新的API
API

其中填写API状态(开发、启用、维护、待定、规划等),URL,API名称,标签,开发负责人,请求参数、返回参数以及成功失败示例。填写对应URL可以定义HTTP请求,包括GET/POST/PUT/DELETE/PATCH/OPTIONS/HEAD等。定义参数则要求给出参数名、参数类型,示例和说明可以选填,示例填写的值会作为测试的参数值。填写完后点击保存即可。

使用Mock API进行测试

在系统交互双方定义好接口之后,我们可以提前进行开发和测试,并不依赖上游系统的开发实现。在测试时使用Mock,可以自由方便的构建配置接口对象的信息参数。

进入API文档详情页面,点击 Mock API 标签,进入 Mock API 的编辑页面,点击新建 Mock API 期望按钮。
Mock API

在弹窗中输入 Mock API 期望的名称以及请求触发条件。
请求触发条件包含以下几种类型:

操作 效果
不填写触发条件 不填写请求参数,或者请求参数没有触发其他的Mock API时,返回预期结果
填写了触发条件 当包含了触发条件所需要的参数时,返回预期结果

点击更多设置按钮,可以得到更丰富的配置选项:
Mock API

在更多配置中,你可以设置:

  1. Mock API 返回的 HTTP Code,默认是200

  2. 返回延迟,可以模拟后端处理请求的延迟效果,默认是0ms,最长3000ms(30s)

  3. Mock API 返回的 HTTP Header

接下来我们设置 Mock API 的返回结果,API Studio 提供了三种Mock API的返回类型:

预期返回数据类型 描述
Json 编辑器 通过UI方式生成Json数据,支持 Mock JS
Raw 返回自定义的静态数据
Javascript 通过编写 Javascript 生成返回数据,支持 Mock JS,数据通过 return 语句返回

Json编辑器

Mock API 的 Json 编辑器支持 Mock JS 语法。
在使用Mock API之前,您可以前往 Mock JS 官网了解语法规则:Mock JS 官方网站

Mock 设置中,您可以设置返回字段的类型、生成规则以及属性值:

设置项 说明
类型 设置返回字段的类型
生成规则 设置属性值的处理方式
属性值 设置字段的值,系统会根据 生成规则 对属性值进行处理,得到最终的Mock数据

比如生成字符串长度介于1~10位的”★”:
Mock API示例

点击预览按钮得到的示例结果:
Mock API示例

如果不需要使用Mock JS,那么您可以直接在属性值填写静态数据即可:
Mock API示例

如果希望系统自动根据字段的类型来生成数据,那么可以不填写生成规则以及属性值。

Raw

当 Json 编辑器无法满足您的需求或者您的数据格式比较复杂的时候,可以选择 Raw 方式填写静态数据。

Javascript

当您希望通过代码生成返回数据时,可以使用编写 Javascript 代码的方式,并使用 return 语句返回数据。

Mock API使用可参考以下教程:

Mock API 的定义及实践

使用 EOLINKER 进行接口测试的最佳路径 (上)

使用 EOLINKER 进行接口测试的最佳路径 (下)

导出接口文档

点击项目概况,点击离线导出项目,可以选择导出eoLinker格式、html格式、企业版支持导出pdf格式和word格式,MD格式。
导出API文档

使用Eolinker的优势

  • 接口信息清晰了

  • 接口更新及时,开发者可以通过对相应接口文档的接口操作,根据现有接口信息进行重新录入,快速保存为接口的新文档

  • 接口操作历史可溯源,接口文档的每一次改动历史应清晰记录下来

  • 接口测试同步完成,eolinker AMS提供接口本地一键化测试功能,只要将信息录入eolinker接口管理平台,你将会省去将接口信息重新复制到测试工具的操作。你只需要点击测试页面,输入测试参数值,便可完成测试。
  • 提供mock测试功能,通过设置假数据以验证接口的可行性。

利用Gitpage和hexo搭建个人博客

Posted on 2019-06-16

准备工作

  1. Github账号:官网:Github
  2. Git:Git下载安装程序
  3. Node.js:你可以通过Node.js下载安装程序,也可以用Git Bash安装
  4. Markdown编辑器:推荐Typora,用于写文章,如果你还不知道Markdown,了解下Markdown的语法

Hexo部分

安装Hexo

打开Git Bash,输入以下命令安装Hexo:

1
$ npm install -g hexo-cli

初始化

打开Git Bash,输入命令

1
$ hexo init [folder]

[folder]代表的是你的hexo文件夹名,如果不写,就默认在当前文件夹初始化。
然后进入你的hexo文件夹.

1
$ cd [folder]

生成静态文件

执行generate命令生成静态文件,才能部署到服务器

1
$ hexo g

启动服务器

由于还没有配置Github,所以我们先部署到本地服务器

1
$ hexo server

默认情况下,访问网址为: http://localhost:4000/
在某些情况下,你可能4000的端口被占用,可以选择重设端口,我们一般选8080端口

1
$ hexo -p 8080 server

打开浏览器,输入地址 http://localhost:8080/ 你就可以看到你初始的博客啦

hexo准备部分到这里结束,接下来我们将其部署到GitPage上。

Github部分

创建Github仓库

创建与你的Github用户名相对应的Github Page仓库,格式必须是username.github.io。比如我的用户名是Scott-Cai,对应仓库如下:

仓库

建立关联

进入你刚创建的仓库,复制仓库的地址。打开hexo文件夹下的_config.yml文件,拉倒最下面,修改deploy为以下代码,repository后面的是你的仓库地址

1
2
3
4
deploy: 
type: git
repository: https://github.com/Scott-Cai/Scott-Cai.github.io.git
branch: master

这里需要注意的是,Github仓库有两种连接方式:

  • HTTPS:每次上传到仓库都需要输入账号密码
  • SSH:不用每次上传后输入账号密码,但需要配置SSH Key

配置方法可参考:github-pages

部署

输入以下命令部署到Github Page

1
$ hexo d

浏览器输入username.github.io就可以看到你的博客啦,如:https://scott-cai.github.io/

之后的部署就是三步:

1
2
3
$ hexo clean
$ hexo g
$ hexo d

如果不喜欢github指定的的子域名,可以购买域名,然后绑定使用。可以参考如下链接:

Hexo写作

创建新文章:

1
$ hexo new [layout] <title>

可以在[layout]中指定文章的布局,默认是post,hexo默认有三种布局,每种布局的路径不同:

布局 路径
post source/_post
page source
draft source/_drafts

新建文件时,Hexo会根据scaffolds目录的模版文件来创建文件,所以你可以修改模版文件来达到更好的初始化效果,如:

1
2
3
4
5
6
7
8
9
10
---
title: {{ title }}
date: {{ date }}
categories:

tags:

---

<!--more-->

需要注意的是使用categories和tags前需要先生成相应的页面:

1
2
$ hexo new page tags
$ hexo new page categories

NexT 主题

hexo 支持很多主题,我用的是NexT, 相关拓展配置可参考如下链接Hexo+NexT搭建酷炫网页,各种功能配置都介绍得很清楚,其中介绍的功能包括:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
NexT安装
切换主题
设置Menu
初始化对应的Menu文件夹
设置动态背景
在右上角或者左上角实现fork me on github
添加添加RSS
修改文章内链接文本样式
修改底部标签样式
在文章末尾添加“文章结束”标记
设置头像并设置动画效果
修改代码块``自定义样式
侧边栏社交小图标设置
主页文章添加阴影效果
网站底部加上访问量
添加热度
网站底部字数统计
设置网站的图标Favicon
实现文章统计功能
添加网页顶部进度加载条
添加来必力云跟帖功能
底部隐藏由Hexo强力驱动、主题--NexT.Mist
去掉底部重复字数统计
添加jiathis分享
博文置顶
修改字体大小
添加DaoVoice在线联系
添加底部桃心
添加侧栏推荐阅读
在文章底部增加版权信息
Hexo博客添加站内搜索
添加外链网易云音乐

系统分析与设计HW7

Posted on 2019-05-23
使用 UMLet 建模:
  • 1、根据订旅馆建模文档,Asg-RH.pdf:

    • 绘制用例图模型(到子用例)

      订旅馆

    • 给出 make reservation 用例的活动图
      订旅馆活动图

  • 2、根据课程练习“投递员使用投递箱给收件人快递包裹”的业务场景

    • 分别用多泳道图建模三个场景的业务过程

      第一个场景:场景一
      第二个场景:场景二
      第三个场景:场景三

    • 根据上述流程,给出快递柜系统最终的用例图模型

      • 用正常色彩表示第一个业务流程反映的用例

      • 用绿色背景表述第二个业务场景添加或修改的用例,以及支持 Actor

      • 用黄色背景表述第三个业务场景添加或修改的用例,以及支持 Actor
        用例图

系统分析与设计HW6

Posted on 2019-05-22
一、简答题

1. 用例的概念

用例是描述参与者使用一个系统支持一个目标相关的成功和失败场景的集合。

  • 是文本而非图
  • 用例建模主要是写文本的行为,而非画图
  • 用例与面向对象毫不相关
  • 用例是经典OOA/D的关键需求输入
  • 功能性或者行为性的需求表现系统要做的事情。

2.用例和场景的关系?什么是主场景或 happy path?

场景

  • 场景是参与者与系统之间具体的行动和交互(会话)序列,也称为用例实例。
  • 它是关于使用系统的一个具体故事,或者是贯穿用例的一条路径。

主场景或happy path

  • 主场景相当于主要的系统交互,即成功场景
3.用例有哪些形式?
  • Brief(high level)
    • 一段简介,通常是主要的成功场景
    • 在早期的需求分析中,获得对于主体和范围的快速认识
  • Casual(简便格式)
    • 非正式的段落形式,使用多个段落包含多个场景
  • Fully
    • 所有的步骤和变化都详细写明,有支持的部分,比如前提和成功场景的保证
4.对于复杂业务,为什么编制完整用例非常难?
  • 对于复杂的业务,很难将所有的目标、故事、使用场景遵循一定的顺序列举出来。如果场景不够全面,那么用例的完整性就难以保障。
  • 此外,用例建模虽然给出了一套可操作的步骤,但是具体如何操作以及如何书写依赖于用例的书写者。因而用例本身并不能够控制自身的完整性。
5. 什么是用例图

用例图(User Case)由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图。用例图同时也是参与者(外部用户)所能观察到的系统功能的模型图。用例图是系统的蓝图

6. 用例图的基本符号与元素
  • 椭圆:表示每个用例
  • 矩形框:表示整个系统
  • 小人:表示参与者(actor)
  • 箭头:各用例之间的关系,如include和extend,Inheritance
7.用例图的画法和步骤
  • 创建新的用例图
  • 绘制用例图
    • 绘制“子系统”边界
      • 重命名“子系统”
    • 绘制参与者(放在所有系统边界之外)
      • 重命名参与者
    • 绘制用例
      • 使用参与者自身能够理解的名称重命名用例,不要使用与代码有关的名称
      • 从主要的事务开始,直到后面较小的交互为止
      • 将每个用例放入支持它的系统或主要子系统(忽略只与用户有关的外观或组件)
      • 可以在系统边界外绘制用例,表明系统不支持该用例
    • 将参与者与用例相连
    • 使用“包括”、“扩展”和“泛化”关系结构化用例
8.用例图给利益相关人与开发者的价值有哪些?
  • 利益相关人:提供了系统使用和行为的摘要视图,保证系统能够按照用户的需求进行设计,使得系统能够注重其参与者的用户体验。
  • 开发者:更明确客户的需求,使得开发者能够更好理解客户需求,明确系统的范围以及其提供功能的情况、与外部系统之间的关系,便于开发者进行系统的实现。
二、建模练习题(用例模型)
  • 选择2-3个你熟悉的类似业务的在线服务系统(或移动 APP),如定旅馆(携程、去哪儿等)、定电影票、背单词APP等,分别绘制它们用例图。并满足以下要求:

    • 请使用用户的视角,描述用户目标或系统提供的服务
    • 粒度达到子用例级别,并用 include 和 exclude 关联它们
    • 请用色彩标注出你认为创新(区别于竞争对手的)用例或子用例
    • 尽可能识别外部系统和服务

    选择猫眼和淘票票提供的购买电影票服务。

猫眼:猫眼用例图
淘票票:淘票票用例图

  • 然后,回答下列问题:

    1. 为什么相似系统的用例图是相似的?

      答:因为用例图由参与者、用例,边界以及它们之间的关系构成的用于描述系统功能的视图。如果系统是相似的,在相似的最终目标下,系统的参与者、用例、边界以及它们之间的关系构成也是相似的,最终画出来的用例图是相似的

    2. 如果是定旅馆业务,请对比 Asg_RH 用例图,简述如何利用不同时代、不同地区产品的用例图,展现、突出创新业务和技术

    3. 如何利用用例图定位创新思路(业务创新、或技术创新、或商业模式创新)在系统中的作用

      答:通过在用例图中使用与其他用例不同的颜色进行标记的方法,能够使得开发者快速定位到该用例图中的创新点。对比相似系统可以得出创新思路提供了哪些更优质的服务。

    4. 请使用 SCRUM 方法,选择一个用例图,编制某定旅馆开发的需求(backlog)开发计划表

ID name Imp Est How to demo Notes
1 旅馆查询 30 4 通过GPS或者用户自行选择位置,利用地图或者列表信息进行一定范围内酒店信息查询 通过GPS的API进行用户位置的定位
2 旅馆选择 80 8 用户可以利用酒店的房间数、房间大小、酒店评价等信息进行酒店的选定 注意酒店信息的实时更新,特别是房间数量的实时更新
3 房间预定 80 8 选定酒店后需要进行房间的预定,用户输入入住者的身份证号码、是否需要保险、手机号码等必要信息后创建订单 需要进行用户身份信息的核验,避免通过虚假信息预定房间
4 订单管理 70 6 用户在创建订单后可以对订单信息进行修改,比如取消订单,修改入住天数以及添加备注等 特价房间不能取消订单,只能提示用户通过保险公司理赔
5 费用支付 60 3 特价房间不能取消订单,只能提示用户通过保险公司理赔 可以通过微信、支付宝、银联进行订单支付
6 账户管理 40 4 用户进行头像、昵称、身份信息、预留手机等个人信息的修改 需要核验昵称或图片是否含有非法信息

​

  1. 根据任务4,参考 使用用例点估算软件成本,给出项目用例点的估算
用例 事物 计算 原因 UC权重
旅馆查询 3 3 利用已知的酒店信息进行排序,或者用户输入关键词进行模糊查询 简单
旅馆选择 6 5 提供酒店客房数量、客房类型、是否含有早餐等信息,需要及时更新客房信息 平均
房间预定 3 2 进行用户信息录入,创建订单 简单
订单管理 5 3 用户修改订单信息或取消订单 简单
费用支付 1 1 用户支付订单费用,调用API即可 简单
账户管理 4 1 用户修改个人信息 简单

系统分析与设计第三次作业

Posted on 2019-04-14
1、简单题
  • 简述瀑布模型、增量模型、螺旋模型(含原型方法),并分析优缺点

    • 从项目特点、风险特征、人力资源利用角度思考

    答:

    瀑布模型:

    瀑布模型中的每一个开发活动具有下列特征:

    • 本阶段活动的工作对象来自于上一项活动的输出,这些输出一 般是代表本阶段活动结束的里程碑式的文档。
    • 根据本阶段的活动规程执行相应的任务。
    • 本阶段活动产出相关的软件工件,作为下一阶段活动的输入。
    • 对本阶段活动执行情况进行评审。

    瀑布模型优点:

    • 降低软件开发的复杂程度,提高软件开发过程的透明性,提高 软件开发过程的可管理性。

    • 推迟软件实现,强调在软件实现前必须进行分析和设计工作。

    • 以项目的阶段评审和文档控制为手段有效地对整个开发过程进 行指导,保证了阶段之间的正确衔接,能够及时发现并纠正开 发过程中存在的缺陷,使产品达到预期的质量要求。

    瀑布模型缺点:

    • 强调过程活动的线性顺序。
    • 缺乏灵活性,尤其无法解决软件需求不明确或不准确的问题。 
    • 风险控制能力较弱。
    • 瀑布模型中的软件活动是文档驱动的,当阶段之间规定过多的 文档时,会极大地增加系统的工作量。
    • 管理人员如果仅仅以文档的完成情况来评估项目完成进度,往 往会产生错误的结论。

    增量模型:

    增量模型首先对系统最核心或最清晰的需求进行分析、设计、实现、 测试并集成到系统中,再按优先级逐步实现后续需求。

    增量模型优点:

    • 增强客户对系统的信心;
    • 降低系统失败风险;
    • 提高系统可靠性;
    • 提高系统的稳定性和可维护性。

    增量模型缺点:

    • 建立初始模型时,作为增量基础的基本业务服务的确定有一定 难度;
    • 增量粒度难以选择。

    螺旋模型:

    螺旋模型是风险驱动的迭代过程,强调可选方案和约束条件从 而支持软件的重用,有助于将软件质量作为特殊目标融入产品 开发之中。螺旋模型结合了瀑布模型和快速原型方法,将瀑布 模型的多个阶段转化到多个迭代过程中,以降低项目的风险。

    螺旋模型优点:

    • 针对大型软件项目的开发 ,引入了明确的风险管理机制。
    • 设计上的灵活性,可以在项目的各个阶段进行变更
    • 以小的分段来构建大型系统,使成本计算变得简单容易。
    • 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
    • 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。
    • 客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。

    螺旋模型缺点:

    • 螺旋模型的应用有一定的限制条件。 螺旋模型强调风险分析,但说服外部客户接受和相信分析结果并做出相关反应并不容易,因此螺旋模型往往比较适合内部的大规模软件开发。

    • 风险分析需要耗费相当的成本,因此螺旋模型比较适合投资规模较大的软件项目。失误的风险分析可能带来更大的风险

    • 建设周期长,而[软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。

  • 简述统一过程三大特点,与面向对象的方法有什么关系?

    答:

    三大特点:

    • 用户为中心(描述用户使用产品的故事)
    • 架构为重心(软件产品分解的领域最佳实践)
    • 风险驱动(早期暴露风险)

    与面对对象的方法的关系:

    在设计阶段,需要将系统组织为具有良好接口的设计包和设计组系统,并体现类的对象之间的作用关系。

    实现阶段层次化子系统,定义代码组织结构。以组件的形式实践类和对象。在测试集成阶段需要测试类本身的功能和类间作用关系。

  • 简述统一过程四个阶段的划分准则是什么?每个阶段关键的里程碑是什么?

    答:统一过程四个阶段的划分准则是时间维度。RUP中的软件生命周期在时间维度上被分解为四个顺序的阶段: 初始阶段(Inception)、精化阶段(Elaboration)、构建阶段 (Construction) 和产品交付阶(Transition)。每个阶段结束于一 个主要的里程碑(Major Milestone),并在阶段结尾执行一次评 估以确定这个阶段的目标是否已经满足。如果评估结果令人满 意的话,可以允许项目进入下一个阶段。

    初始阶段里程碑:

    • 生命周期目标(Lifecycle Objective) 里程碑,包括一 些重要的文档,如:项目构想(Vision)、原始用例模型、原 始业务风险评估、一个或者多个原型、原始业务案例等。 通过对文档的评审确定用例需求理解正确、项目风险评估 合理、阶段计划可行等。

    精化阶段里程碑:

    • 生命周期体系结构(Lifecycle Architecture) 里程碑, 包括风险分析文档、软件体系结构基线、项目计划、可执 行的进化原型、初始版本的用户手册等。通过评审确定软 件体系结构已经稳定、高风险的业务需求和技术机制已经 解决、修订的项目计划可行等。

    构建阶段里程碑:

    • 初始运行能力(Initial Operational Capability) 里程碑, 包括可以运行的软件产品、用户手册等,它决定了产品是 否可以在测试环境中进行部署。此刻,要确定软件、环境、 用户是否可以开始系统的运行。

    产品化阶段/移交阶段:

    • 产品发布(Product Release) 里程碑,确定最终目标 是否实现,是否应该开始产品下一个版本的另一个开发周 期。在一些情况下这个里程碑可能与下一个周期的初始阶 段相重合。
  • 软件企业为什么能按固定节奏生产、固定周期发布软件产品?它给企业项目管理带来哪些好处?

    答:利用软件产品范围的弹性,合理规划范围(20%业务决定80%满意度),使得软件生产按固定节奏运行,固定迭代周期、固定开发周期、固定升级周期。

    它给企业项目管理带来的好处:

    • 软件项目开发更加规范化,便于项目的管理
    • 每个迭代产品在增量(制品是可运行的),利于及时交付使用并反馈,满足用户需求,降低风险
    • 固定的迭代周期(等量的人月),利于量化团队/个人生产率,提高企业盈利。

系统分析与设计HW2

Posted on 2019-03-28

简答题

  • 用简短的语言给出对分析、设计的理解

    答:分析是指对问题与需求的调查研究,而不是解决方案。

    设计是指出满足需求的概念层面的解决方案,而不是其实现。

  • 用一句话描述面向对象的分析与设计的优势。

    答: 面对对象的分析与设计的优势在于:在分析问题和解决问题的两个过程中使用同一类建模标记,便于维护复用,简化了过程的复杂性。

  • 简述 UML(统一建模语言)的作用。考试考哪些图?

    答:UML是用于可视化分析和设计的结果的标准图表语言。

    考试考的图:

    • 用例图:用户角度:功能、执行者

    • 静态图:系统静态结构

      • 类图:概念及关系
      • 对象图:某种状态或时间段内,系统中活跃的对象及其关系
      • 包图:描述系统的分解结构
    • 行为图:系统的动态行为

      • 交互图:描述对象间的消息传递
        • 顺序图:强调对象间消息发送的时序
        • 合作图:强调对象间的动态写作关系
      • 状态图:对象的动态行为。状态 - 事件 - 状态迁移 - 响应动作
      • 活动图:描述系统为完成某功能而执行的操作序列
    • 实现图:描述系统的组成和分布状况

      • 构件图:组成部件及其关系

      • 部署图:物理体系结构及与软件单元的对应关系

  • 从软件本质的角度,解释软件范围(需求)控制的可行性

    答:软件本质:复杂性、一致性、可变性、不可视性。

    由于软件本身的复杂性、不可见性、不一致性、可变性,软件范围多数情况下对于客户和开发者都是模糊的,这形成软件产品与其他产品不同的开发过程。因此,范围管理是软件项目管理的重中之重!在多数情况下,客户与开发者能就项目的 20% 内容给出严格的需求约定,80% 的内容都是相对模糊的。因此,围绕客户目标,发现并满足客户感兴趣的内容是最关键的。即可采用2/8原则进行软件范围控制。换言之,软件范围控制是可行的。

项目管理实践

  • 看板使用练习

    kanban

  • UML绘图工具练习(教材P184 图16-5)

    类图

​

​

​

系统分析与设计第一次作业

Posted on 2019-03-14

1.简答题

  • 软件工程的定义

    答:根据IEEE标准610.12给出的定义,软件工程是对软件的开发、操作和维护应用系统的、有纪律的、可量化的方法,即工程对软件的应用和对方法的研究。

  • 解释导致 software crisis 本质原因、表现,述说克服软件危机的方法.
    • 本质原因:软件危机的出现是由于计算机能力的迅速增加以及无法解决的问题的复杂性。由于计算机的计算能力快速增长,需要解决的问题更加复杂。随着软件复杂性的增加,因为现在的解决方法不足,许多软件问题出现。此外还有用户需求不明确、缺乏正确的理论指导、软件开发规模越来越大、软件开发复杂度越来越高等原因。
    • 表现:
      • 软件开发进度难以预测
      • 软件开发成本难以控制
      • 用户对产品功能难以满足
      • 软件产品质量无法保证
      • 软件产品难以维护
      • 软件缺少适当的文档资料等。
      • 软件的开发生产率跟不上硬件的发展,计算能力越大,编程问题越大,软件越复杂
    • 克服方法:
      • 建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率水平的目标。
      • 研制和使用软件工具,用以辅助进行软件项目管理与技术生产。
      • 采用成熟的软件开发技术和方法,比如结构化程序设计,面向对象的开发,CMM,UML等等
      • 正确认识计算机软件的内涵。
      • 采用工程项目管理方法实施软件开发的组织管理。软件开发应该是一种组织良好、管理严密、协同配合的工程活动
  • 软件生命周期
    • 计算机软件有一个孕育、诞生、成长、成熟、衰亡的生存过程,这 样的过程称为软件的生命周期(也称软件开发生命周期SDLC)。软件 生命周期将软件开发过程划分为若干阶段,每个阶段有明确的任务 目标和运行机制,从而使复杂的软件开发过程能够得到适当的控制 和管理。

    • 软件生命周期一般包括可行性分析与计划、需求分析、设计(概要 设计和详细设计)、编码实现、测试、运行与维护等活动。这些活 动应当以适当的方式分配到不同的阶段去完成。

    • 软件生命周期的6个阶段:

      • 可行性分析与计划阶段
      • 需求分析阶段
      • 设计阶段
      • 实现阶段
      • 测试阶段
      • 运行与维护阶段
    • 软件生命周期常见模型:
      • 瀑布模型
      • V-W 模型
      • 快速应用开发模型
      • 原型模型
      • 增量/演化/迭代模型
      • 螺旋模型
      • 喷泉模型
      • 基于构件的开发模型
      • Rational 统一过程模型
      • 敏捷开发模型与极限编程
  • SWEBoK 的 15 个知识域

    SWEBoK(Software Engineering Body of Knowledge)即软件工程知识体系。

    • 软件需求 (Software Requirements) :软件需求知识域主要关注软件需求的协商,谈判,分析,明确,验证等过程。
    • 软件设计 (Software Design) : 软件设计是定义软件结构,组件,接口,和其他系统特性以及产品结果的过程
    • 软件构建 (Software Construction): 软件构建实现主要涉及到了详细的代码设计实现,单元测试,集成测试,调试和验证等工作任务。
    • 软件测试 (Software Testing) :软件测试是一项评估软件项目质量以及识别软件缺陷并改善的工作
    • 软件维护 (Software Maintenance) :软件维护涉及了升级现有软件功能(完善性维护),调整软件适应运行环境的变化(适应性维护),以及更正软件缺陷(改正性维护)等方面的工作。
    • 软件配置管理 (Software Configuration Management) : 系统的配置是硬件,固件,软件或他们组合的功能和物理特征。同时配置还可以看作是硬件,固件,软件,或其组合的特定版本的集合。不同的版本有不同的配置,根据特定的构建过程组合在一起,以服务与特定的目的。
    • 软件工程管理 (Software Engineering Management) :软件工程管理包括计划,协调,衡量,报告和控制一个项目,以确保软件的开发和维护是系统化的,有纪律的以及可量化的。
    • 软件工程过程 (Software Engineering Process) : 涉及软件生命周期过程的定义,实现,评估,度量,管理和改进。所涵盖的主题包括过程实现和变更,过程定义,过程评估模型和方法,以及过程测量。
    • 软件工程模型和方法 (Software Engineering Models and Methods) :解决了围绕整个软件生命周期各阶段问题的方法,以及在特定生命周期阶段的其他知识域所包含的问题的方法。
    • 软件质量 (Software Quality): 关注软件质量的基础,软件质量管理过程,以及实际的考虑。
    • 软件工程专业实践 (Software Engineering Professional Practice):对于软件工程师而言,必须具备的知识,技能和态度,要以一种专业的,负责的,和合乎道德的方法来进行实践。
    • 软件工程经济学 (Software Engineering Economics):如何在业务环境中做出决策,以便技术决策与组织的业务目标保持一致。
    • 计算基础 (Computing Foundations):涵盖了提供给软件工程实践所需的计算背景的基础主题。包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算的基础、计算机组织、操作系统和网络通信。
    • 数学基础 (Mathematical Foundations) :涵盖了用于软件工程实践所需的数学理论基础
    • 工程基础 (Engineering Foundations):主要提供了用于软件工程实践所需的工程背景基础
  • 简单解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
    • level 1 - Initial:无序,自发生产的模式,过程难以预测,控制性差,反应性弱。
    • Level 2 - Managed:有序的,项目化的生产模式,具有明确的流程和较好的项目控制程序。
    • Level 3 - Defined:定义级,企业企业管理组织化,流程标准化,体系制度化。
    • level 4 - Quantitatively Managed:量化管理级,实现数字化管理和控制
    • Level 5 - Optimizing:优化管理级。过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
  • 用自己语言简述 SWEBok 或 CMMI (约200字)
    • SWEBoK 的中文名称为软件工程知识体系,是 IEEE Computer Society 构建软件生产的最佳实践与相关知识的框架,用于指导软件工程人才的培养与学科建设。知识体系分为软件工程实践和基础教育两个部分,共有15个知识域,包括11个实践知识域和4个软件工程教育需求知识域。
    • CMMI即能力成熟度模型集成,是一种过程性的改进训练和评估计划,用于度量一个企业的软件工程能力,可划分为五个级别(Initial, Managed, Defined, Quantitatively Managed, Optimizing)。

应用容器化

Posted on 2019-01-18

Docker安装过程

使用 APT 镜像源 安装

由于官方源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。

1
2
3
4
5
6
7
$ sudo apt-get update

$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。 为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
	$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -


### 官方源

### $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

然后,我们需要向 `source.list` 中添加 Docker 软件源

```bash
$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"


更新 apt 软件包缓存,并安装 `docker-ce`:

```bash
$ sudo apt-get update

$ sudo apt-get install docker-ce

启动 Docker CE

1
2
$ sudo systemctl enable docker
$ sudo systemctl start docker
Ubuntu 14.04 请使用以下命令启动:
1
$ sudo service docker start

镜像下载和安装

1
2
3
docker pull github.com/Scott-Cai/github.com/Scott-Cai/web-server
docker run -dit --name web-server -v $PATH_TO_SERVER_DATA:/data -p 8080:8080 github.com/Scott-Cai/github.com/Scott-Cai/web-server server
docker run --rm --network host -v $PATH_TO_CLI_DATA:/data github.com/Scott-Cai/github.com/Scott-Cai/web-server cli help
12

Scott-Cai

12 posts
© 2019 Scott-Cai
Powered by Hexo
|
Theme — NexT.Muse v5.1.4