liu 发布的文章

创作立场声明:投#我家NAS装了啥#的稿,准备把那篇里面有意思的都好好写一写,治治自己懒的毛病。欢迎收藏、点赞、关注、打赏,以后还有一系列的文章。对了本篇有点长,可以先收藏再观看,阅读预计需10分钟以上。0准备,然后亲自动手抄作业预计需要半天以上时间。

【写作说明】:前几天投稿了我家NAS装了啥,原文在这里

我家NAS装了啥?可多了创作立场声明:作为一个懒人,本人立场坚定的想一直懒下去,只是看着奖品口水止不住的流,所以也来凑个热闹。追加修改(2021-07-1912:21:44):漏了一个默默无闻的Docker镜像:containrrr/watchtower它能将我们所有的latest版本的镜像和容器都自动更新到最新版本,不用frLab|815评论511收藏8k查看详情

欢迎过去点赞、评论、收藏。那一篇其实只能算是个目录,当时心里就在想,关注度比较高的话,接下来就把内容拿出来单独写一写,这就是开篇,先做好网络环境接下来才有的玩。

先说说头图的问题,这是我家现在的网络结构,只画重点,其它已经省略。该网络结构并不完美,应将AP2连接到Switch2,让Switch2直接接入Switch1,无奈Mesh有线回程会在Switch2上产生环路,各种办法都没有解决,包括联系了交换机厂商和AP厂商,就只能先这样把AP2既当AP又当个交换机用着,有大佬能解决的请一定联系下我完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代 。

前置条件

1、移动宽带,若你的宽带为电信或联通,它们都可以申请到公网IPv4地址,不需要这么复杂,可以参见站内阿文菌的文章。

2、主路由为OpenWrt系统,若你的路由器为其它系统,可以参考思路。

3、域名,可以使用免费的二级域名、也可以购买一级域名,它真的香。

光猫桥接调整

光猫桥接部分本想写到前置条件,因为大部分同学家的光猫型号可能是千差万别,确实没什么好写的内容。简单说一下两种方式,第一种是在新装宽带时要求安装人员进行设置。第二种自行修改,在光猫背面找到自己家猫的型号,然后用型号加上桥接两个字上百度进行搜索就能找到啦,要是实在找不到,可以留言咨询哦,还可以万能的淘宝完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代 。

另外改桥接之前一定要记下自己的宽带账号(光猫改桥接的时候在光猫后台能找到),密码一般是手机号后6位,可以打电话给移动客服进行验证,没问题后再调整,完成后登陆路由器(OpenWrt)的管理页面在左边,网络->接口找到WAN点击修改,将协议选择为PPPoE,点击切换协议,然后填入用户名和密码就OK了。

OpenWrt的IPv6设置(其它路由系统的话需要自己想办法哦)

OpenWrt本身就是支持IPv6的,所以光猫改桥接后只需要进行简单的设置就能看到IPv6已经OK了

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

下面说说怎么设置,登陆OpenWrt后台:

1、修改全局网络选项:在左边网络->接口找到全局网络选项,清除”IPv6 ULA 前缀“中的内容后点击保存&应用,如下图:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

2、修改WAN接口配置:网络->接口找到WAN点击修改,在高级设置里面取消“使用内置的IPv6管理”的勾选,如下图

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

3、修改LAN接口配置:网络->接口找到LAN点击修改,同样高级设置里面取消”使用内置的IPv6管理“的勾选,如下图

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

然后往下滑动,在IPv6设置中,照下图进行选择:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

4、DHCP/DNS设置,网络->DHCP/DNS在高级设置中取消”禁止解析 IPv6 DNS 记录“的勾选,如下图:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

5、最后一步设置防火墙,在网络->防火墙的基本设置页面,照着下图进行设置即可(如果图片看不清楚,需要选择的地方全部都是选择接受就对了)。这里可能有点安全性的问题,有兴趣的同学可以自己去写防火墙规则。

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

按照以上步骤设置后IPv6环境就OK了,如果没有OK,请检查每一步是否都点击了保存&应用,然后可以重启路由器一试,也可以留言和百度哦。

验证IPv6环境是否正常,除了网络属性外,也可以打开test-ipv6.com 进行测试,这里就不再截图说明,很容易看懂。

科普时间

现在对IPv4和IPv6做一些简单的说明,便于大家理解。一般来说在家庭网络IPv4环境中,只有路由器能获得到公网地址,外网设备想要访问到内部服务,都需要通过端口转发来进行。举个例子就是打某个公司前台电话,由前台帮你转接到你想找的部门的分机。而IPv6环境下,局域网中每一台设备都有独立的公网地址。同样的例子,现在找这个公司的某个部门,不用再拨前台转分机,因为他们公布了每个部门的独立号码,可以直接拨打。

基于以上情况,如果你之前是使用IPv4环境,通过端口转发访问内网,需要切换到IPv6环境,那么一定要理解上面那段话,因为在IPv6中不再有端口转发这事儿了。

域名与路由器的DDNS

虽然有了IPv6环境,同样有IPv6环境的外网已经可以用过每台设备的IPv6地址访问到它,但是没人这样干,第一:地址很长记不住,第二:它是动态的,过段时间就变了,所以需要用到域名和DDNS(动态域名解析)。

域名就是我们平时浏览器打开baidu.com,这个就是域名,他对应了一个ip地址,当我们访问baidu.com的时候,我们的电脑(或者手机)会先去DNS服务器查询这个域名对应的ip地址,然后去请求ip地址并拿到返回的数据再渲染显示在浏览器中。这里只是个简单的说明,有兴趣的同学可以通过百度进行详细的了解。

现在我们知道域名和ip地址是有对应关系的,通过域名就能找到并访问ip,那么我们只需要在ip变了的时候将新的ip重新和域名进行绑定即可,完成这个功能的就叫DDNS。

下面回到正题:

如果你没有域名,个人建议在阿里云购买一个(wanwang.aliyun.com),如果已经有域名又不是在阿里云购买的,建议添加到阿里云进行管理(因为我们后面的DDNS是用的阿里的。在登陆阿里云控制台->云解析DNS中添加域名,然后DNS服务器状态会显示运行异常,鼠标指向它,点击查看帮助,照着登陆原域名管理后台设置下就好了)

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

以下所有的内容都假设使用的域名是xxxxx.com(你的域名是什么后面内容里把xxxxx.com都替换成自己的就行),并且要不就在阿里云上买的,要不就已经添加到阿里云进行管理了(如果过程中还有疑问,可以留言,也可以多多百度)

我们还需要在阿里云的控制台找到AccessKey,登陆阿里云,鼠标指向自动的头像,选择AccessKey 管理

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

在打开的页面中点击创建AccessKey

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

创建好后,我们记下AccessKey ID和Secret,也可以一会儿再来复制。

回到路由器OpenWrt后台,在服务->动态DNS中随便命个名,点击添加:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

在基本设置中选择IP地址版本为“IPv6地址”,DDNS服务提供商[IPv6]为“aliyun.com”,上面的查询主机名填入:xxxxx.com,下面的域名是用来访问路由器的域名,比如我想通过http://router.xxxxx.com来访问我的路由器,我就填写router@xxxxx.com,用户名填写刚刚记录的AccessKey ID,密码填写它对应的Secret。

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

接下来在高级设置中按下图进行设置:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

设置完成后,再次点击左边的动态DNS,看看是否已经启用和运行,没有的话勾选下,点下启动,正常运行后是这个样子:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

到这里我们还需要最后一步设置就能外网访问到路由器了,就是设置监听接口,因为80端口和443端口一般情况下已被运营商封锁,我们需要在uHTTPd(如果您路由器中没有uHTTPd,可以在系统->软件包中进行安装,也可以ssh到路由器后修改配置文件,这里就不展开了,可以自行百度或留言咨询)中进行设置,参考下图:

这里需要说明下,这里是两个监听器,一个http一个https,照着上图设置,既能在内网用路由器的IPv4地址(如:192.168.1.1)访问路由器又能外网通过router.xxxxx.com:90或者router.xxxxx.com:100访问到路由器,看您是用http还是https。这里需要说明下,这里是两个监听器,一个http一个https,照着上图设置,既能在内网用路由器的IPv4地址(如:192.168.1.1)访问路由器又能外网通过router.xxxxx.com:90或者router.xxxxx.com:100访问到路由器,看您是用http还是https。

到这里路由器就已经可以外网访问了,细心的同学可能看到了我部署了证书,所以我用的是https,在外网IPv6环境下,通过:https://router.xxxxx.com:100进行访问,如果没上传证书前不要勾选“将所有 HTTP 重定向到 HTTPS”,用http://router.xxxxx.com:90访问,避免提示不安全的链接。

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

插一句(SSL证书)

本来准备把证书申请的内容加到前面购买域名部分,但是登陆控制台一看已经申请好了没办法截过程图,就在这里几句话说清楚吧。

在阿里云控制台里面找到:SSL证书(应用安全)点击进入,在左侧菜单找到SSL证书,点击免费证书,然后点击立即购买。

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

按照提示0元购买可以创建20个证书的资源包后,回到此页,点击创建证书,列表就会出现一个待申请的证书,点击后面的立即申请按钮,按提示进行申请即可。

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

申请成功后稍等几分钟就能通过,然后可以在同一个页面上下载我们需要的证书文件,下载后在路由器uHTTPd页面上传,然后“勾选上将所有 HTTP 重定向到 HTTPS”,这样访问到http端口也会自动重定向到https的端口。

证书的申请需要注意下,免费的证书是不能申请通配符证书的,也就是说我们申请了router.xxxxx.com这个域名的证书用在路由器上,群晖不管你用什么域名也是需要单独申请的,阿里云的免费包最多可以申请20个,所以不用担心不够用。

证书下载时很多同学会发现服务器类型有很多,不知道下哪一个,路由器用的下载服务器类型是apache的就行。遇到别的不知道下什么的,都下载来试试就试出来了,也可以百度下,不用担心,不会试坏的。好了,证书的问题就说到这里,回归主题。

NAS部署IPv6的DDNS

前面我们说到,IPv6的环境下是没有端口转发这件事的,所以路由器的DDNS只能解决域名和路由器IPv6地址的绑定关系。NAS有独立的IPv6地址,它也需要单独部署DDNS来完成这件事。台式机如果需要直接使用系统自带的远程连接,也可以设置独立的DDNS,这里也不展开。

在这里我使用的是python脚本(放在了GitHub上:github.com),主要有两个文件:aliddns.py(DDNS主文件)、check_gateway.sh (IPv6网关检查脚本,我的群晖IPv6网关会偶发性丢失,一直没找到问题,只能用脚本检测到丢失后刷新下),将这两个脚本(如果不需要网关检查,可以不下载sh后缀的文件,但py文件也需要相应的修改哈,不然要报错)下载到群晖的home目录,其它目录也行,后面设置定时任务时跟着修改就好。

然后打开群晖控制面板->任务计划->新增->计划的任务->用户定义的脚本,然后照下发的截图进行设置:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

注意:最后一张截图的路径和域名一定要改成自己的哦。设置好点击确定后,可以选择任务点击运行,如果没报错基本就OK了,也可以登陆阿里云后台查看是否生成了解析的记录。

如果此时您的群晖没有部署证书,那么强烈建议你参考前面内容进行证书的申请,然后在群晖控制面板->安全性->证书页面将您针对群晖所用域名申请到的证书部署上去(证书下载是选择服务器类型是其它的即可)。就可以通过https://xxxxx.com:5001访问到群晖的管理页面了。

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

至此,IPv6的外网访问就全部设置完毕,网速跑满杠杠的。

IPv4环境怎么办?内网穿透,让IPv4环境获得和IPv6环境同样的体验!

很多同学会遇到和我一样的问题,在公司怎么办,一般情况下公司的网络是没有IPv6环境的,我们可以PC连手机热点暂时用用,但始终不方便,这时候就需要借助内网穿透来实现访问了。用到的工具是zerotier(也有很多别的工具,大家可以自由发挥,这里只是抛砖引玉),官网在这里:zerotier.com

首先打开my.zerotier.com,点击Register进行账号的注册。注册完成后打开:my.zerotier.com ,点击Create Network创建一个新的网络,记下NETWORK ID,页面暂时不要关闭,后面还要用。我已经创建好了如下图:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

有了ID以后我们让路由器加入这个网络(群晖也行,我的路由器上带有ZeroTier,所以用路由器,如果你的路由器没有ZeroTier,又无法安装的话,在群晖上使用docker版本的ZeroTier也是可以的,具体可以百度下),在路由器管理页面,VPN->基本设置里面填入刚刚记下的Network ID,并勾上两个复选框,保存&应用。如下图:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

接下来回到ZeroTier后台点击我们刚刚创建的ID,往下拖动,可以看到列表里面已经有了一台设备,但是它还没有分配到ip地址,需要把它前面的复选框勾上表示同意它加入我们创建的网络。

继续如法炮制,在公司电脑上安装ZeroTier客户端,并且也加入到刚刚的这个Network ID,回到ZeroTier后台,电脑也应该进入后台了,同样勾选它前面的复选框。这样我们的网络里面就有两台设备了,如下图(我的比较多):

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

ZeroTier网络中的两台设备已经能够通过上图中10网段的地址进行相互访问了,比如我路由器在ZeroTier后台分配的是10.10.10.70的地址,在公司电脑就能通过https://10.10.10.70访问到路由器,有同学可能会有疑问,这里为什么不加端口,因为使用ZeroTier后,它们已经相当于在一个局域网中了,还记得前面路由器的监听器截图吗,我们https的监听器IPv4地址监听的是443端口,所以不需要加端口号进行访问。这里也是唯一一个修改了hosts文件后IPv6环境和IPv4环境需要区别的地方。

接下来还需要进行小小的调整,因为如果局域网内设备都通过ZeroTier分配的地址进行访问,那么所有的设备都需要加入到ZeroTier的网络,这很明显是有难度的,所以前面设置路由器的时候我们勾选了“自动允许客户端 NAT”,这样就能直接通过内网设备的IP地址来访问到他们,当然,NAS一定要设置个固定的IP哦。要实现这一点,还需要在ZeroTier后台的Advanced部分设置下路由,如下图:

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

Destination填写的是您家的网段,(Via)填写的是ZeroTier给你路由器分配的10段的地址。然后点击提交。

现在就能通过内网IP访问了,比如我在公司电脑能通过https://192.168.1.100:5001访问到家里的群晖。但是这样还是有一点不完美,使用https始终会提示不安全的链接,而且ip访问也不是我们的目的。

接下来就需要最后一步,修改公司电脑的hosts文件。它是用来干什么的呢?前面我们说到,在访问域名的时候,是先拿域名到DNS服务器查询它所对应的IP地址,然后再去访问IP地址。而hosts文件可以用来简化这个步骤,它相当于一份本地的IP与域名的绑定关系,计算机访问域名时优先打开它看一看,如果在它里面找到了域名对应的ip地址就以它记录的IP地址进行访问,如果没有,再去查询DNS服务器。所以我们需要做的就是把绑定关系写入到它里面。

在Windows系统中它在这个目录:C:WindowsSystem32driversetc,hosts文件用记事本就能打开,但一般情况下没有办法直接修改,可以先复制一份到桌面,修改完成后再复制回去。也可以百度下,因为我找了两台电脑都能直接改,没办法试验和截图。

确保能成功修改和保存hosts文件后,我们只需要在文件最后加入下面两行:

192.168.1.1 router.xxxxx.com

192.168.1.100 xxxxx.com

即可通过https://router.xxxxx.com访问路由器(为什么不加端口的原因前面已经介绍了),通过https://xxxxx.com:5001访问到群晖及使用不同端口访问到群晖中的服务,和使用原生IPv6环境没有任何区别(除了网速)。

至此,不管是IPv6环境还是IPv4环境,我们都能通过域名完美的访问到内网的所有服务。接下来会写一些好玩的服务,敬请期待。

反向代理

最后做个补充,群晖上部署的docker也好,其它服务也好,若需要外网访问都可以通过群晖的反向代理功能来处理。在群晖控制面板->登陆门户->高级->反向代理服务器设置中新增。

举个例子,群晖升级7.0后Docker的NodeRed无法通过IPv6直接访问了,这时只需要在反向代理服务器设置中点击新增:

然后按照下图设置

完美版外网访问家里NAS:桥接、IPv6、域名、SSL、Aliddns、ZeroTier、反代

自定义标题中新增WebSocket,根据运行的是什么服务选择性添加,大部分服务不需要加这个自定义标题中新增WebSocket,根据运行的是什么服务选择性添加,大部分服务不需要加这个

即可通过https://xxxxx.com:1991访问到,甚至可以不用部署https使用群晖的即可。这里只是顺带提下就不展开了,咱们下次再见。

欢迎打赏、三连,有任何疑问欢迎评论和讨论。


创作立场声明:作为一个懒人,本人立场坚定的想一直懒下去,只是看着奖品口水止不住的流,所以也来凑个热闹。

#我家NAS装了啥#有奖活动正在火热进行中,分享你家NAS装了啥App,赢取TS-453D mini!→戳此了解←

追加修改(2021-07-19 12:21:44):
漏了一个默默无闻的Docker镜像:containrrr/watchtower 它能将我们所有的latest版本的镜像和容器都自动更新到最新版本,不用人工干预。

前段时间把NAS和Home Assistant弄的差不多了,一直想写一篇分(xuan)享(yao),但又一直不(hen)空(lan),终于今天看到了一个官网征稿活动,所以,我来了。

最开始是黑裙,从一个破机箱折腾到蜗牛,还屯了几块12T硬盘,看着跑的服务越来越多,一直有转白的念头。终于在某天看到了亚马逊的车,毫不犹豫的由黑转白入了920+,并把几块硬盘用上了,既然洗白了接下来当然就是物尽所用,于是有了本该早就有的这篇。

先说说网络环境,毕竟很多套件或者Docker上的服务,要是外网不能访问都是扯淡。家里是移动宽带,大内网但能使用IPv6,于是在路由器和群晖都部署了阿里的DDNS,所以在外网是通过IPv6进行访问。在没有IPv6环境下(比如公司)使用ZeroTier,并在host文件加入相应记录后和纯IPv6访问在感觉上没有任何区别(网速还是有差异)。

另外,补充一句:大部分的服务是通过群晖的反向代理到外网的。因为升级到DSM7.0 RC版本后,包括现在的正式版,使用桥接网络的docker容器外网无法通过IPv6直接访问(之前是可以的),所以只能反代出来。

下面说说有哪些:

套件部分

已装套件已装套件

1、Hyper Backup

备份套件设置和数据,然后使用Cloud Sync将备份文件夹加密后同步到百度云,防止出问题了需要重新配置。

2、Cloud Sync

将群晖中存放的重要数据和Hyper Backup备份的数据同步到百度云(使用加密方式)

3、Active Backup for Business

备份PC使用,可选备份C盘和所有磁盘,因PC端使用了Synology Drive同步资料,所以只备份了C盘,家里两台笔记本和一台台式机的C盘就全靠它了。

4、Antivirus Essential

病毒查杀工具,装上求安心。

5、Audio Station

音乐套件,装了,基本没有使用。

6、MariaDB 10

数据库,完全兼容MySql,主要作为Home Assistant的数据库和测试环境用。

7、Web Station

网页服务,大部分应该不需要,个人用于测试环境。

8、Surveillance Station

家里的监控用的它,并且通过它的API和NodeRed进行了联动,检测到运动后可以使用企业微信推送消息到手机。

9、USB Copy

插上读卡器,自动复制SD卡的照片到指定目录,方便整理照片,其实也很少用,都是电脑上整理好以后再放到群晖里面。

10、WebDAV Server

现在好像没用了,之前同步日历,现在被Synology Calendar取代了。在别的场景还是有很多用途的。

11、Synology Drive

文件同步与备份工具,各种系统Windows、macOS、Android、iOS都有客户端。自从有了它,Windows 10自带的OneDrive我都不用了。

12、Synology Calendar

日历,可以和iPhone完美同步,iOS用户强力推荐。

13、Synology Contacts

通讯录管理,同样可以和iPhone完美同步,iOS用户强力推荐。

14、Synology Photos

群晖的相册,没什么好说的,Google Photo不是无限容量了后主力就是它了,然后用Cloud Sync将相册的文件夹再加密同步到百度云一份。

套件部分就说到这里,没写到的都是自己没怎么用的。下面说说Docker部分。

docker部分

我家NAS装了啥?可多了

1、Emby

影音套件,升了7.0测试版以后套件中心的就用不了了,所以转到使用Docker版本,小黄鱼拼车买了序列号,只能说,真香。

2-3-4、jackett sonarr qBittorrent

这仨放一起是因为虽然qBittorrent是下载工具,但自己主要是用它和jackett、sonarr搭配自动下载电视剧,在追的剧出新集后可自动下载到NAS,下班回家就可以直接在Emby观看了,懒人神器。

5、bitwardenrs

密码管理器bitwarden的私有化部署,官网在这里(https://bitwarden.com/),自从用了它抛弃了使用多年的LastPass。

6、xteve

这个用来抛弃电视盒子的,将IPTV信号转发到局域网,通过xteve转发后,可以在各个终端上使用Emby看电视,并且可以录制。

7、olaindex

用来在网页上共享OneDrive的数据了,其实是为了调用Office开发者账号了API保障账号可以顺利延期使用,免费用Office 365它不香吗。

8、qiandao

用来自动签到一些网站和APP。

9、calibre

网页版本的电子书管理软件,里面放了1w+的图书,可以在网页版阅读也可以推送到kindle。

10、mosquitto

mqtt服务,后面要写到智能家居在用。

11、home-assistant

一个开源的智能家居平台,家里能接入的都接入了。

12、node-red

不知道怎么形容它,神器,物联网用的,上面跑了几十个流,包括上面提到Surveillance Station检测到运动推送到企业微信的流。

13、music-player-docker

一个web版本的音乐播放器,可以播放各个平台音乐网易、QQ、酷狗、虾米、百度,主要用来有时候下载方便。

14、portainer

管理docker

15、traccar

车辆的GPS定位平台,车上装了凯励程,可以通过抓包将GPS位置同步到traccar。

16、v2fly-core

懂的自然懂,不想在路由器上开全局。

总结

数了下,以上常用的这些套件有14个,docker有16个,突然在想,要是除了问题让我再重新配置一遍怕是要整崩溃,得考虑下Docker容器的备份问题了。

其实上面的内容,很多都可以拿出来单独写一篇甚至多篇文章,但是谁让我懒呢我家NAS装了啥?可多了 ,而且很多相关的内容在这里有同学已经写了很多,想了解详情的同学可以搜搜看,也可以留言,看到了一定认真回复。

对了,这是征稿,请大家不吝点赞+收藏+评论三连哦。


forfiles 命令
 
例:forfiles /p "c:\test" /s /m *.log /d -30 /c "cmd /c del @path /q /f"
删除 c:\test及子目录下 所有log扩展名 修改时间在30天以前的文件
例:删除 c:\test及子目录下 所有log扩展名 修改时间在30天以前的文件
set SrcDir=E:\software
set DaysAgo=7
forfiles /p %SrcDir% /s /d -%DaysAgo% /c "cmd /c del /f /q /a @path && rd /s /q @path"


例:逻辑盘空间不足10G

@echo off
set vol=E
for /f "tokens=2* delims=:" %%a in ('fsutil volume diskfree %vol%:') do set free=%%a
set free=%free:~0,-6%
echo %free%
if %free% lss 10000 echo 这个逻辑盘空间不足10G




@path是forfiles命令中/c 参数变量

默认命令是 "cmd /c echo @file"。下列变量
可以用在命令字符串中:
@file    - 返回文件名。
@fname   - 返回不带扩展名的文件名。
@ext     - 只返回文件的扩展。
@path    - 返回文件的完整路径。
@relpath - 返回文件的相对路径。
@isdir   - 如果文件类型是目录,返回 "TRUE";如果是文件,返回 "FALSE"。
@fsize   - 以字节为单位返回文件大小。
@fdate   - 返回文件上一次修改的日期。
@ftime   - 返回文件上一次修改的时间。


@echo  删除最近130天以前的所有文件夹

forfiles /d -130 /m * /c  "cmd /c rd /q /s @file"

pause

@echo 删除最近60天以前的所有文件

forfiles /d -60 /m * /c  "cmd /c del /f /q /a @path"

pause


一、开发流程图

为使流程更清晰,本图省略了各环节的评审,如有更好的表现形式,欢迎提出建议。


3691336-44a632b55f207ef5.jpg

二、过程产物及要求

本表主要列出开发阶段需要输出的过程产物,包括产物名称、成果描述、负责人及备注,即谁、在什么时间、应该提供什么内容、提供内容的基本方向和形式是什么。

项目启动阶段

产物名称成果描述负责人

调研文档了解项目背景,了解项目干系人目标方向产品经理

团队组建确认团队人员及配置产品总监

业务梳理明确项目的目标、角色、各端口及模块产品经理

需求阶段

产品原型产品的线框图产品经理

需求概要基于线框图,作技术评估,达成业务理解的一致性研发工程师

项目里程碑确认项目重大时间节点研发项目 经理

项目开发计划梳理各阶段、各端口的开发计划研发项目经理

项目任务分解表将计划分配到团队研发项目经理

设计阶段

界面效果图及标注基于线框图,作效果图,须适量考虑交互内容UI设计师

UI设计规范在UI界面基础上,输出主要界面的设计规范UI设计师

需求规格基于效果图,明确业务实现细节,消除对最终成果理解的不一致研发工程师

概要设计功能实现的可视化,有助于理清思路,减少技术盲区和低级缺陷,实现并行开发,提高效率研发工程师

通讯协议通信协议是指双方实体完成通信或服务所必须遵循的规则和约定研发工程师

表结构设计确认要建的数据库表及其表结构研发工程师

开发阶段

产品代码代码

测试阶段

测试用例明确测试方案,包括测试模块、步骤、预期测试工程师

测试结果报告输出测试结果测试工程师

用户手册系统操作手册测试工程师

常规文档

项目周报每周开发内容及下周开发计划研发项目经理

测试周报每周测试内容及下周测试计划测试工程师

评审会议纪要评审的过程文档整体团队

三、过程说明

项目启动

产品经理和项目干系人确定项目方向,产品型项目的干系人包括公司领导、产品总监、技术总监等,项目的话则包括客户方领导、主要执行人等。

公司领导确认项目组团队组成,包括产品经理、研发项目经理、研发工程师、测试团队等。

明确项目管理制度,每个阶段的成果产物需要进行相应的评审,评审有相应的《会议纪要》;从项目启动起,研发项目经理每周提供《项目研发周报》;测试阶段,测试工程师每周提供《项目测试周报》。

产品经理进行需求调研,输出《需求调研》文档。需求调研的方式主要有背景资料调查和访谈。

产品经理完成《业务梳理》。首先,明确每个项目的目标;其次,梳理项目涉及的角色;再来,每个角色要进行的事项;最后,再梳理整个系统分哪些端口,要有哪些业务模块,每个模块再包含哪些功能。

image

需求阶段

进入可视化产物的输出阶段,产品经理提供最简单也最接近成品的《产品原型》,线框图形式即可。在这个过程中还可能产生的包括业务流程图和页面跳转流程图。业务流程图侧重在不同节点不同角色所进行的操作,页面跳转流程图主要指不同界面间的跳转关系。

产品经理面向整个团队,进行需求的讲解。

研发项目经理根据需求及项目要求,明确《项目里程碑》。根据项目里程表,完成《产品开发计划》,明确详细阶段的时间点,最后根据开发计划,进行《项目任务分解》,完成项目的分工。

研发工程师按照各自的分工,进入概要需求阶段。《概要需求》旨在让研发工程师初步理解业务,评估技术可行性。

设计阶段

UI设计师根据产品的原型,输出《界面效果图》,并提供界面的标注,最后根据主要的界面,提供一套《UI设计规范》。UI设计规范主要是明确常用界面形式尺寸等,方便研发快速开发。UI设计常涵盖交互的内容。

研发工程师在界面效果图,输出《需求规格》,需求规格应包含最终要实现的内容的一切要素。

研发工程师完成《概要设计》、《通讯协议》及《表结构设计》,及完成正式编码前的一系列研发设计工作。

开发阶段

研发工程师正式进入编码阶段,这个过程虽然大部分时间用来写代码,但是可能还需要进行技术预研、进行需求确认。

编码过程一般还需进行服务端和移动端的联调等。

完成编码后需要进行功能评审。

测试阶段

测试工程师按阶段设计《测试实例》,未通过的流程测试提交至Jira,分配给相应的开发人员调整。

研发工程师根据测试结果修改代码,完成后提交测试,测试通过后完成。

测试工程师编写《测试结果报告》,包括功能测试结果、压力测试结果等。

测试工程师编写系统各端口的《操作手册》、维护手册等。

系统上线



作者:Success85
链接:https://www.jianshu.com/p/f175ebf7d2d7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


项目管理与软件开发的质量、效率、最终成果息息相关,本文主要讲述软件项目的风险评估、成本预算、客户沟通、需要分析、开发管理、成品交付等多个流程。
在现今国内的项目的管理形式十分零乱,对管理欠缺重视,以致很多项目因为失去管理而最终折腰。
很多的实战形人才只重视于开发环节,而对其他的流程欠缺认识(包括本人),因而导致项目欠缺有条理的、阶段化的管理。
本人是一个典型的只重视开发的管理者,在多次的教训中深刻地体会到管理的重要性,因而以此文章对项目管理作出一个总结,当中存在很多的不足之处,敬请各位点评!

文件下载:项目管理流程.docx

  1. 风险评估

  2. 成本预算

  3. 客户沟通的过程

  4. 需求分析

  5. 面向对象程序设计(略)

  6. 开发管理

  7. 产品交付

 

 

一、     风险评估

软件项目风险是指在整个项目周期中所涉及的成本预算、开发进度、技术难度、经济可行性、安全管理等各方面的问题,以及由这些问题而对项目所产生的影响。项目的风险与其可行性成反比,其可行性越高,风险越低。软件项目的可行性分为经济可行性、业务可行性、技术可行性、法律可行性等四个方面。而软件项目风险则分为产品规模风险、需要风险、相关性风险、管理风险、安全风险等六个方面:

1.      产品规模风险

项目的风险是与产品的规模成正比的,一般产品规模越大,问题就越突出。尤其是估算产品规模的方法,复用软件的多少,需求变更的多少等因素与产品风险息息相关:

(1)  估算产品规模的方法

(2)  产品规模估算的信任度

(3)  产品规模与以前产品规模平均值的偏差

(4)  产品的用户数

(5)  复用软件的多少

(6)  产品需求变更的多少

2.      需求风险

很多项目在确定需求时都面临着一些不确定性。当在项目早期容忍了这些不确定性,并且在项目进展过程当中得不到解决,这些问题就会对项目的成功造成很大威胁。如果不控制与需求相关的风险因素,那么就很有可能产生错误的产品或者拙劣地建造预期的产品。每一种情况对产品来讲都可能致命的,这些的风险因素有:

(1)  对产品缺少清晰的认识

(2)  对产品需求缺少认同

(3)  在做需求分析过程中客户参与不够

(4)  没有优先需求

(5)  由于不确定的需要导致新的市场

(6)  不断变化需求

(7)  缺少有效的需求变化管理过程

(8)  对需求的变化缺少相关分析等

3.      相关性风险

许多风险都是因为项目的外部环境或因素的相关性产生的。控制外部的相关性风险, 能缓解策略应该包括可能性计划,以便从第二资源或协同工作资源中取得必要的组成部分,并觉察潜在的问题,与外部环境相关的因素有:

(1)  客户供应条目或信息

(2)  交互成员或交互团体依赖性

(3)  内部或外部转包商的关系

(4)  经验丰富人员的可得性

(5)  项目的复用性

4.      技术风险

软件技术的飞速发展和经验丰富员工的缺乏,意味着项目团队可能会因为技巧的原因影响项目的成功。 在早期,识别风险从而采取合适的预防措施是解决风险领域问题的关键,比如:培训、聘请顾问以及为项目团队招聘合适的人才等。关于技术主要有下面这些风险因素:

(1)  缺乏培训

(2)  对方法、工具和技术理解的不够

(3)  应用领域的经验不足

(4)  对新的技术和开发方法应用不熟悉

5.      管理风险

尽管管理问题制约了很多项目的成功,但是不要因为风险管理计划中没有包括所有管理活动而感到惊奇。在大部分项目里,项目经理经常是写项目风险管理计划的人,他们有先天性的不足——不能检查到自己的错误。因而,使项目的成功变得更加困难。如果不正视这些棘手的问题,它们就很有可能在项目进行的某个阶段影响项目本身。当我们定义了项目追踪过程并且明晰项目角色和责任,就能处理这些风险因素:

(1)  计划和任务定义不够充分

(2)  对实际项目状态不了解

(3)  项目所有者和决策者分不清

(4)  不切实际的承诺

(5)  不能与员工之间的进行充分地沟通

6.      安全风险

软件产品本身是属于创造性的产品,产品本身的核心技术保密非常重要。但一直以来,我们在软件这方 面的安全意识比较淡薄,对软件产品的开发主要注重技术本身,而忽略了专利的保护。软件行业的技术人员流动是很普遍的现象,随着技术人员的流失、变更,很能会导致产品和新技术的泄密,致使我们的软件产品被它公司窃取,导致项目失败。而且在软件方面关于知识产权的认定目前还没有明确的一个行业规范,这也是我们 软件项目潜在的风险。

7.      回避风险的方式

(1)  以开发方诱导能保证需求的完整,使需求与客户的真实期望高度一致。再以书面方便形成《用户需求》这一重要的文档,避免疏漏造成的损失在软件系统的后续阶段被逐步地放大。

(2)  设立监督制度,项目开发中任何较大的决定都必须有客户参与进行的,在该项目中项目监督由项目开发中的质量监督组来实施。

(3)  需求变更需要经过统一的负责人提出,并且要用户需求的审核领导认可,需求变更应该是定期而不是随时的提出,而且开发方应该做好详细的记录,让客户了解需求变更的实际情况。

(4)  控制系统的复杂程度,过于简单的系统结构,对用户来使用比例会有明显的折扣,甚至造成软件寿命过短。反之,软件结构的过于灵活和通用,必然引起软件实现的难度增加,系统的复杂度会上升,这又会在实现和测试阶段带来风险。适当控制系统的复杂程度有利于降低开发的风险。

(5)  从软件工程的角度看,软件维护费用约占总费用的55%~70%,系统越大,该费用越高。对系统可维护性的轻视是大型软件系统的最大风险。在软件漫长的运营期内,业务规则肯定会不断发展,科学的解决此问题的做法是不断对软件系统进行版本升级,在确保可维护性的前提下逐步扩展系统。

(6)  设定应急计划,每个开发计划都至少应该设定一个应急预案去应对出现突发情况和不可遇知的风险。

回到目录

二、     成本预算

1.      成本预算方式

(1)  自上而下的预算方法

自上而下的预方法主要是依据上层、中层项目管理人员的管理经验进行判断,对构成项目整体成本的子项目成本进行估计,并把这些判断估计的结果传递给低一层的管理人员,在此基础上由这一层的管理人员对组成项目的子任务和子项目的成本进行估计,然后继续向下一层传递他们的成本估计,直到传递到最低一层。

使用此预算方式,在上层的管理人员根据他们的经验进行的费用估计分解到下层时,可能会出现下层人员认为上层的估计不足以完成相应任务的情况。这时,下层人员不一定会表达出自己的真实观点,不一定会和上层管理人员进行理智地讨论,从而得出更为合理的预算分配方案。在实际中,他们往往只能沉默地等待上层管理者自行发现问题并予以纠正,这样往往会给项目带来诸多问题。

自上而下更适用于项目启动的前期,与真实费用相差在30% ~ 70%之间。

Scrum使用自上而下的成本预算方式,它不会立即精确地确定成本,而是以最大限度容纳客户对未来产品要求所产生的变更。

(2)  自下而上的预算方法

自下而上方法要求运用WBS(Work Breakdown Structure,工作分解结构)对项目的所有工作任务的时间和预算进行仔细考察。最初,预算是针对资源(团队成员的工作时间、硬件的配置)进行的,项目经理在此之上再加上适当的间接费用(如培训费用、管理费用、不可预见费等)以及项目要达到的利润目标就形成了项目的总预算。自下而上的预算方法要求全面考虑所有涉及到的工作任务,更适用于项目的初期与中期,它能准备地评估项目的成本,与真实费用相差在5% ~ 10%之间。

注解:WBS

WBS是面向提交成果对项目的分解,从提交成果的列表可以确定每个提交成果需要执行的活动。Scrum会对WBS进一步细化,把一个迭代分解为一个或多个的工作包,再把工作包分解为细小的开发任务(一般开发任务的开发周期在15个工作小时以内)。

2.      确定项目支出

总体成本预算就是结合下列多个成本预算方式综合计算的开发成本:

(1)  零基数预算

在成本预算的初期应该使用零基数的计算原则,而不可以使用类似于:以上一年总体费用加上20% 这样粗略的方式计算项目成本。

(2)  软硬件成本、物品成本

物品成本是指类似于:服务器(RAM 硬盘 CPU NIC卡 RAID簇)成本、维护成本、机房租金、光纤通讯成本、软件成本等的成本。

计算成本时需要考虑组装硬盘需时的长短,技术人员需要具备的质素,产品供应商能否提供保证质量,管理时是否需要额外的管理人员这些多方因素。

(3)  软件许可证成本

(4)  外包成本

当使用类似:视频、短信、移动电信类服务、门户网站等子项目时可以考虑以外包形式完成,以降低开发成本。

(5)  人力资源成本

计算人力资源成本时应该使用以最高和最低的工作效率估算平均效率的方式,计算出人力资源的平均成本。

(6)  维修保养成本

回到目录

三、     客户沟通的过程

从客户沟通的方向出发来看,软件项目可分为:需求识别、方案定制、项目实施、项目结束等4个不同的阶段,各个阶段都具有不同的沟通重点。

1.  需求识别阶段

(1)  文本沟通

在需求识别的前期,应该通过问卷、原型展示、界面展示、逻辑处理展示、准化文档模板等方式进行全方位多角度的分析,随时将不明确之处反馈给客户,以期待客户解答。并以文本记录的方式建立需要分析书,并要求客户审核需求分析书,以达到需要分析与客户的真实期望高度一致的结果。

(2)  业务逻辑沟通

在进行业务沟通时,应该了解客户的行业语言,以促进业务分析的过程,越过应用需求和开发之间的鸿沟。沟通过程提倡以草图或者可视信息化的方式进行, 针对不同层面的企业用户提供最适合的操作界面。以多角度的方式思考问题,要抓住需求重点,尤其是客户方领导所关注的创新类和实用类需求。

(3)  需求变更的规范化管理

需求变更在软件开发类项目中是可以理解的,但必须对需求变更做好规范化的管理,以避免出现需求无止境变更的风险。需求变更必须由统一的负责人提出,并且由用户需求的审核领导者认可。需求变更的提出应该是定期而不是随时的,开发方应该做好详细的文本记录,让客户了解需求变更的实际情况和开发方为之所付出的成本代价。

2.  方案定制阶段

该阶段项目的主要任务是与客户共同制定一个以前期明确的需求、双方的资源、项目开始的阶段、实施的时间约定、项目费用限制等为基础的具有可操作性的项目计划,从本阶段开始争取客户全面参与项目的管理,并以双方的共同利益考虑项目实施的具体计划与风险规避。

3.  项目实施阶段

在该阶段,软件项目团队应该与客户共同领导项目的实施。同时,项目团队应实时评估客户满意度,并通过持续改进的方式提高客户满意度,还应要求客户参加必要的培训,以及在必要时检查项目产品。在出现客户的需求变更前,应主动与客户沟通交流,使客户充分了解项目的每个环节,以及变更带来的影响,减少需求变更。如果出现客户需求变更,应与客户一起共同解决由变更引起的成本、进度、质量变化。

4.  结束阶段

该阶段主要进行项目成果的移交,并把系统交付给维护人员,帮助客户实现商务目标,结清各种款项。完成这些工作后应该进行项目评估,审核此项目的成果并总结项目经验。

5.  售前人员注意事项

在产品型项目作为开发成果时,相关销售人员应该注意:对产品的推销不应该过分承诺。如果过分承诺,会给后续的项目实施带来困难;一旦承诺没有兑现,也会降低客户满意度,影响今后合作。如果有附加承诺,一定要以文本形式记录,让实施项目经理知晓并传达给项目组成员。

注解:在软件项目中,需要明确以下四种客户角色

A.   要明确最终使用部门和用户,要去了解他们现有的工作方式,要让他们知道项目的目标框架,知道项目要解决他们的哪些困难,但绝对不是全部困难,这样可以较好的控制项目范围。

B.   要明确需求的提出者,他或者他们要能够代表最终客户群体。提出产品需求的这类客户要具有一定的技术、业务能力和权威,能够真正代表最终客户团队的意愿和想法,最好有IT基础,能够用IT语言描述问题和需求,以利于双方的沟通、协作,避免产生歧义。

C.   要明确做需求确认的中层领导,他要把握方向。软件开发项目是解决实际生产或者管理问题,同时 也是领导系统建设的具体实现,做需求确认的客户领导,既要了解高层领导的系统建设要点和方向,又要谙熟具体业务和生产管理实际。如果是这样的客户领导来把 握和决策,对企业软件开发项目的顺利进展作用非凡。

D.   要明确谁来对成品提意见,谁来验收。项目验收环节,是项目的收尾环节,如果验收的人对项目初期的需求目标不了解,会从态度和产品实际使用效果上对验收产生负面的影响,对提供产品的企业关闭项目非常不利。根据实践总结,由需求提出人和确认人来做项 目的验收工作,能够促进项目的顺利完成,避免延期。

回到目录

四、     需求分析

1.     需求分析的过程

需求过程包括需求开发和需求管理2个部分:

(1)  需求开发就是对开发前期的管理,与客房的沟通过程,可以分为4个阶段:需求获取、需求分析、编写需求和需求验证。

(2)  需求管理:就是软件项目开发过程中控制和维持需求约定的活动。包括:变更控制、版本控制、需求跟踪、需求状态跟踪。

2.      需求的层次

需求的层次包括:业务需求、用户需求、功能需求、非功能需求等4个方面。

3.     需求开发阶段的重点

(1)  提取业务对象

业务对象是指系统使用的真实对象,例如一个供应链管理 (Supply Chain Management ,简称SCM) 业务对象主要包括:生产批发商、零售商、送货商、顾客多个层次。

(2)  提取业务流程

在了解业务逻辑的过程中,应该列举出所开发软件模块的各自职能,并细化每个工作流程,深入分析业务逻辑。

(3)  性能需求

在分析的前期应该注意客户对所开发软件的技术性能指标,如存储容量限制、运行时间限制、安全保密性等。

(4)  环境需求

环境需求是指软件平台运行时所处环境的要求,如硬件方面:机型、外部设备、数据通信接口;软件方面:系统软件,包括操作系统、网络软件、数据库管理系统方面;使用方面:使用部门在制度上,操作人员上的技术水平上应具备怎样的条件。

(5)  可靠性需求

对所开发软件在投入运行后发生故障的概率,应该按实际的运行环境提出要求。对于重要的软件,或是运行失效会造成严重后果的软件,应提出较高的可靠性要求。

(6)  安全保密要求

在需求分析时应当在这方面恰当地做出规定,对所开发的软件给予特殊的设计,使其在运行中,其安全保密方面的性能得到必要的保证。

(7)  用户界面需求

为用户界面细致地规定到达的要求。

(8)  资源使用需求

开发的软件在运行时和开发时所需要的各种资源。

(9)  软件成本消耗与开发进度需求

在软件项目立项后,根据合同规定,对软件开发的进度和各步骤的费用提出要求,作为开发管理的依据。

(10) 开发目标需求

预先估计以后系统可能达到的目标,这样可以比较容易对系统进行必要的补充和修改。

4.      需求分析的任务

需求分析的主要任务是借助于当前系统的逻辑模型导出目标系统的逻辑模型,其流程如下:

(1)  确定对系统的综合需求(功能、性能、运行、扩充需求)

(2)  制作产品需求文档 (PRD)

(3)  分析系统的数据需求(概念模型、数据字典、规范化)

(4)  导出目标系统的详细的逻辑模型(数据流图、数据字典、主要功能描述)

(5)  开发原形系统

(6)  从PRD提取编制软件需求规格说明书(SRS)

注解:SRS格式

1.引言  2系统概述(项目背景、系统目标、核心业务流程) 3.术语说明  4.系统结构(架构图、功能图)

5.主体功能与业务逻辑(重点) 6.接口需求(内部、外部接口、) 7.网络总体设计(拓扑网络、主机、组网) 

8.运行环境(Linux、Windows、IIS、 WebLogic、Tomcat、OLAP、OLTP、JDK 8.0 、.NET Framework 4.0等)

 

回到目录

五、     面向对象程序设计(略)

1.      设计原则

(1)  SRP单一职责链

每个类都应该只负责做一件事。

(2)  OCP开封闭合原则

软件的实体(类、模块、函数等)应该是可以扩展的,但是不可修改的。

(3)  LSP替换原则

子类必须能替换他们的基类型。

(4)  DIP依赖倒置原则

高层模块不应该依赖于低层模块,二者都应该依赖于接口与抽象类。抽象不应该依赖于细节,细节应依赖于对象。

(5)  ISP接口隔离原则

不应该强迫客户依赖于并未使用的接口,而应该把胖接口分离。

2.      实现UML建模

(1)  业务对象的提取

(2)  根据SRS、CRC等实现用况建模

(3)  实现业务顺序图

(4)  建立类图,根据用况图建立对象之间的关联

(5)  绘制活动图、实现协作图、状态图

 

回到目录

六、     开发管理

1.      建立项目计划

(1)  设计总体架构

针对系统的实施需要,采取适当的且成熟的框架结构。

(2)  控制可扩展度

扩展度过大,将提高系统的复杂程度,延长开发时间;扩展度过低,会直接影响系统的二次开发与维护。控制系统的可扩展性,能提高开发效率,降低系统维护的难度。

(3)  建立基础设施

合理分配部署软、硬件等基础设施所需要的时间与成本(例如:服务器的订购安装、光纤接入、软件平台订购)。

(4)  划分开发任务

利用WBS(Work Breakdown Structure,工作分解结构)对可交付结果进行分类与划分。每个项目都能划分为多个不同阶段,每个阶段又可以分为多个工作包(Work Package),工作包是WBS里最小的可交付结果,最后从工作包中分解出多个开发任务列表。

(5)  部署开发进度

一个项目应该按进度划分为多个开发阶段,每个阶段的开发周期一般在30~60个工作日以内。在此阶段内应该与客户举行协商会议,制定产品路线图,在开发过程中邀请客户积极参与并提出反馈意见。然后把该时段内的开发任务按照开发难度,依赖性,重要性等多方条件划分为多个迭代周期。

在Scrum 敏捷软件开发原则中,应该把每个迭代任务进一步细分为多个开发任务列表,再开发任务分配给组员各自负责,而开发时间应该控制在15个工作小时以内。如果开发时间超出15个工作小时,应该考虑把开发任务再度细化。开发任务建议应该由组员自主选择,而不要使用强制分配的方式。

(5)  测试项目成果

每个工作包都应该同步部署测试工作,提高项目的质量。对出错BUG的工作包应该由测试人员以文本方式记录,向开发人员展示错误所在,让开发人员及时进行修改。

2.      管理开发团队

(1)  组建团队

按照工作任务与项目时间的前提条件建立团队,按团队职责分配人员,一般团队人数应该控制在8~12人之间。当团队人数超过15人时,应该考虑把团队分解成2个独立团队,负责不同的开发任务。

(2)  分配开发任务

在每个迭代周期内(一般是15~30个工作日),应该把每个工作包进一步细分为多个开发任务,再开发任务分配给组员各自负责,开发时间应该控制在15个工作小时以内。如果开发任务的开发时间超出15个工作小时,应该考虑把任务再度细化。而开发任务应该以自由选择的方式分配给每个组员。

(3)  监督开发进度

在迭代的前期举行一次会议,让组员了解开发的进展及流程,并以自主选择的方式分配开发任务。期间可使用Microsoft Project等工具记录开发流程的进展,在每个工作包完成开发后应该进行性功能的测试,并以文本方式记录测试结果。

每天举行一次15分钟的站立会议,让组员交待昨天已完成的开发任务,当天将要做的任务,与开发过程中所遇到的问题。并在每周末举行一次例行会议,交待总体进程。

在迭代末期举行一次冲刺会议,总结项目的进展,交行已完成的任务,回顾该迭代周期内所遇到的问题,为下一个迭代做好准备。

(4)  系统测试

对每个已完成的工作包进行适时的测试,保证系统质量与性能。对测试结果进行文本的记录,并把测试结果与绩效工资收入挂钩,并以真实数据计算组员的绩效收入。

(5)  解决开发中所遇到的问题

对开发人员进行前期培训,可适当按工作能力分配任务,指导组员的开发。当遇到问题时应该在当天的站立会议时即时提出,并在15个工作小时内解决所遇到的问题以防止问题进一步扩大。

3.      监管产品质量

(1)  质量需要的是计划、设计而并非审查的。在产品建立的初级,必须与“质量保证”(QA)的部门进行协商,以正式文档的方式,决定恰当的质量策略和标准。

(2)  在开发过程中使用TDD(测试驱动开发)的模式,提高开发质量。测试人员应该以文本方式记录bug,并与开发人员共同工作的,把突出的缺陷演示给开发人员,以提高修改的效率。

(3)  在每个迭代的结束时进行一次产品效果的演示,从客户、使用者、高层领导中收集反馈信息。在团队内部举行评审会议,分析测试结果,了解产品性能,为下次迭代所需要做的改进做好计划。

4.      修改项目计划

(1)  在产品需要识别阶段,应该以文档形式记录产品功能与开发流程,在开发计划需要修改时,应该与客户共同探讨,让客户了解计划修改对项目进度所造成的影响。

(2)  项目计划的修改应该由统一的负责人提出,并且由用户需求的审核领导者认可。需求变更的提出应该是定期而不是随时的。

(3)  计划的变更应该做好详细的文本记录,让客户了解需求变更的实际情况和开发方为之所付出的成本代价。

 

回到目录

七、     产品交付

1.      项目的后期审核

在项目开发最终完成后,对开发人员来说可算是放下工作的重担,但对项目经理来说这往往是项目的关键时刻。前期的风险评估、成本预算、需求分析、软件设计都是为了引导项目走向这一时刻,此时所有的目光都将投向项目管理人员。你可能发现大量而琐碎的工作将要在几个小时内完成,此刻项目经理更需要保持清醒与镇定,把最后的工作视为微型项目来对待。细致地对项目进行后期的审核,分析项目成果、项目团队的效率、可交付产品的价值,以此审核结果可作为项目管理经验总结的一部分。

2.      质量评审

在项目交付前,应该把项目交给相关的“质量保证”(QA)部门进行质量评审,并邀请典型用户感受产品的质量。

3.      项目的最终交付

正常情况下在项目的前期就会订立项目交付的协议,项目交付方式分为非正式验收与正式验收两种。一般在项目完成后都会先进行非正式验收,让客户体会项目的质量并提出反馈意见,最后在客户肯定产品质量后再以书面协议的形式进行正式的产品验收。

4.      项目的最终报告

在项目的最后,应该制定项目的最终报告,此报告可以视为是对该项目一个记录,但报告不必包含项目的所有方面。一般最终报告应该包含以下方面:

(1)  最初引进项目时的初期项目视图

(2)  对该项目的价值评估及支持性信息

(3)  项目的范围

(4)  项目的开发流程及WBS

(5)  项目的会议记录

(6)  项目变更的报告及变更的理由

(7)  与项目相关的沟通过程文件

(8)  项目的审核报告与客户验收报告

(9)  项目成员的表现报告

(10) 项目的最终成果