文档章节

软件项目全过程(供CTO/技术主管参考)

danielwyo
 danielwyo
发布于 2017/02/14 15:38
字数 3540
阅读 5
收藏 0
点赞 0
评论 0

- 整体项目过程中的流程
    本文不讨论或者只是最简单的讨论各项工作中的细节, 侧重点只是跟开发人员有关的一系列工作
    - 项目立项
        - 需求分析
            - 如何确认技术可实现性
                - 技术点可实现性评估
                    明确哪些技术点可以做, 哪些技术点不可以做. 
                - 效益/可实现性比评估
                    如果存在一些比较困难的技术点, 那么就需要评估性价比, 性价比过低的技术实现, 需要放弃甚至延后. 
                - 规模化评估
                    有一些需求并不存在技术难度, 但是, 存在规模成本, 可能会因为这些需求的加入, 导致产品技术规模急剧增加, 需要具体的指出来. 
            - 如何确定技术方向
                - 寻找同类产品, 评估可能使用的技术手段.
                - 要确认新技术, 评估可能的技术风险.
        - 项目规划
            - 对开发人员自我时间评估
                每个人尽可能的给出假如只是自己一个人来做整个项目, 那么, 可能的时间是多少. 
            - 综合时间评估
                开发人员必须向项目管理者强调整体开发的时间并不是每个人的开发时间的平均整合, 而是存在一个巨大的交流时间差, 以保证开发的安全性. 
            - 具体项目时间规划
                尽可能减少对细节的时间评估, 而重点保留里程碑时间评估. 
            - 对调试/测试时间的争取
                开发并不是直接开发就结束的过程, 调试/测试时间, 必须尽可能跟初期开发时间等同, 甚至超过开发时间. 
    - 产品设计
        - 功能和逻辑设计
            - 开发人员需要监督产品人员是否在偏离需求设计目标
                这是开发人员自我保护的必要条件, 因为开发人员之前做过的技术评估, 很可能会因为产品人员的偏离造成巨大的时间调整.
            - 开发人员需要检查弱逻辑
                很多时候, 产品人员会将工作侧重于强逻辑(或者说是主逻辑), 而忘记了一些相对次要的弱逻辑的可行性, 以至于拿到开发人员手里, 可能做起来会非常困难. 这时候, 开发人员需要尽可能在初期评判弱逻辑的完备性. 
            - 尽可能事先争论
                开发人员相对比较弱势, 很多时候, 拿到设计的时候, 觉得无所谓, 做着做着, 觉得不好做, 就开始争论. 这对项目有妨碍, 尽可能让争论提早发生. 
        - 美术设计
            - 对美术设计提出规范化要求
                美术设计很多时候, 会有偷懒的行为, 导致资源本身的设计和输出没有合理的规范. 增加开发人员和美术人员的沟通成本. 
            - 完整内容/空内容/半内容
                很多美术设计只关注完整内容的实现, 可能会让完整内容显示的特别好, 但是, 空内容就没有照顾到. 当然, 还有一个半内容, 也是需要关注的, 因为内容很少的时候(但不是空), 展示的效果可能会不如满内容那么好看. 
            - 输入的内容有序可靠
                需要开发人员找到一个自我组织资源的形式, 而不是随着美术人员而定. 
    - 项目/应用架构
        - 项目必须有自己的版本分支
            - 当前版本
                当前正在做的版本
            - 维护版本
                为过去的版本做维护, 一般上只有发生重大问题, 才会对维护版本进行管理
            - 未来版本
                涉及到新需求, 尽可能的放到未来版本的设计中去, 而不是实时在当前版本中处理
        - 环境设计必须有分层
            - 正式环境
                开发人员不允许有任何直接权限对正式环境进行处理, 一般都是由运维进行操作. 
            - 测试环境
                提供给测试人员的环境, 一般上数据有比较长时间的保留, 以保证尽可能模仿外网环境. 
            - 开发环境
                提供给开发人员的环境, 上面的数据随时丢失或者错误, 主要就是开发人员自己开发和调试使用. 
        - 服务端的常规结构/模块
            - Log功能
                对常用的操作进行Log登记, 以保证产品在服务端产生异常的时候, 回溯可能错误的发生原因. 
            - 备份功能
                - 数据库备份
                    对系统发生异常时候, 数据的恢复作用. 
                - 代码备份
                    每个发布的版本, 都有一个代码备份包. (目前有Git管理, 这个需求变得不是那么重要了. )
            - 服务发现功能
                针对服务端的服务变更, 能够尽快的处理
            - 备用服务
                加入服务产生临时中断, 能够快速切换备用服务的设计, 一般上, 就是使用服务发现功能来作到即可, 不需要那些过分复杂的设计
            - 公共配置服务
                当涉及到公司多个应用的时候, 多个应用之间有相关性, 尽可能的将一些公共配置提取到应用外层来, 以防止服务和服务之间交错造成的异常. 
            - 用户模块的独立化(*)
                这是为一般企业考虑, 尽可能独立用户模块, 从而保证应用本身的纯净度, 以及多个应用之间可以重复利用已有用户或者打通应用和应用之间关联的办法. 
            - 管道/队列
                管道/队列是一个成本比较低廉的超并发解决方案
        - 接口的注意事项
            - 规范设计
                尽可能的确定一套规范设计, 但不是将规范设计做死.
            - 接口认证/加密设计
                - BasicAuth
                - OAuth
                - HTTPS
            - 接口的时间间隔防护
                - 相同用户发起的低间隔请求
                - 相同IP发起的低间隔请求
                - 用户/IP封杀机制
            - 尽可能使用对象的动态存根, 而不是静态存根
                动态存根比如Token, 静态存根比如UserId
            - 使用JSON
                JSON是目前为止, 在可读性和数据量上面做的最平衡的一套数据表达机制. 
            - 错误的本质
                错误是为了调试, 而不是为了给用户提示. 
            - 分页的逻辑
                动态分页解决的问题, 是为了大规模数据发生时保证数据的完备性. 
            - 文档的简便性大于美观性
        - 文件结构
            - 能用cocoapods依赖, 尽量用cocoapods
            - 能用library依赖, 尽量用library
            - 如果两者都不行, 最后用代码级别依赖
            - 主体逻辑界面全部放在项目目录的最外层或者ViewController目录
                规模较小的界面直接铺陈, 规模较大的界面, 使用ViewController目录
            - 配置文件全部放在Config目录
            - 数据结构和内部逻辑设计全部放在Logic目录
            - 资源文件全部放在Resource目录
            - 第三方代码全部放在ThirdParty目录
            - 自定义界面或自定义控件放在View目录
    - 开发过程
        - 代码规范设计
            针对不同的环境和语言, 设计一套比较直观的代码规范, 从代码的质量上形成一套保证
        - 项目结构规范设计
            项目结构必须统一, 以防止不同开发者做了不同的工作, 从而形成混乱. 
        - 代码职责的设计
            代码必须有必然的职责响应, 而不是试图让一段代码变得万能. 
        - 界面逻辑图的必要性
            开发人员的界面逻辑图, 未必会等同于设计人员的结构图, 如果只是单纯的将设计人员提供的界面结构直接当做开发的界面结构, 肯定会造成一个巨大的陷阱. 
        - 缓存
            - 合理利用缓存, 而不是找最容易上手的方式
                确保文件. 数据库. 内置存储. 等用到最合理的程度
                - 文件
                    - 二进制内容
                    - 需要快速批量管理的对象
                    - 形成后台操作的动作
                - 数据库
                    - 规则化数据
                    - 需要组合查询的对象
                    - 与服务端映射同步的资源
                - 内置存储
                    - 快速存储对象
            - 相关缓存的合并逻辑
                - 两个不同缓存资源的同步化
            - 时间有限性判断
        - 异步事务
            - 异步逻辑线设计
                在每一个逻辑模块中, 都必须明确逻辑线, 不应该边开发代码, 边设计逻辑线. 
        - 工作模块的独立化
            - 模块本身的独立
                - 单一功能原则
                - 流程单向
                - 接口模型统一
                - 单一逻辑
            - 开发者的独立
                - 每个开发者对自己的模块有决定性作用
                - 对其它开发者的模块只有连接代码, 没有逻辑代码
                    连接代码, 指的是指向性或者调用的代码, 逻辑代码是指的参与其它逻辑段复合计算的代码
        - 共同学习
            - 有公共的学习资源交流平台
            - 定期分享
            - 务虚会议并不意味着真的虚
    - 调试/测试工作
        - 代码审查工作
            - 尽可能的利用工具
                有现成的代码审查工具来检查代码比较简单, 不需要花费大量时间, 所有代码全部过一遍. 
            - 每个人对代码规范的重视
                对于不符合规范的代码, 可以提出具体要求, 打回调整. 
            - 定期规范调整
                代码规范本身并不是一个稳定的内容, 需要开发人员协同定期调整, 不要指望一个规范可以用很多年. 定期调整可以既保持整体的稳定性, 也能保持在技术演进中的安全保证. 
        - 测试点列表
            - 将每个功能测试点具体化
                指的是功能测试点明确, 是可以操作的办法, 而不是一个笼统的抽象的描述. 比如: 测试系统的稳定性, 这不是具体化的测试点. 但是, 检查系统重复登录20次会不会出现异常, 这就是一个具体的测试点. 
            - 测试点打钩表
                测试人员会收集一些常规问题, 以及我们产品的针对性问题, 还有就是以往犯过的错误问题, 整理出来一个打钩表. 定期打印出来, 除了自己测试, 也会提供给开发人员. 开发人员在调整自己的问题的时候, 可以顺带针对打钩表检查自己的模块是否正常. 
            - 测试表分列
                - 测试点描述
                    包括测试的要素, 以及测试的方法等等. 
                - 测试备注
                    测试过程或者结果, 需要添加备注描述的, 可以自由添加
                - 测试打钩
                    测试人员之前针对测试结果进行处理的结果
                - 测试打钩附加列
                    留空的打钩列, 打印出来, 随便开发人员自己打钩的. 
    - 上线工作
        - 重复测试
            - 上线前测试
            - 上线后测试
            - 复合测试
                - 用户和用户之间
                - 用户和第三方之间
                - 超量并发操作
        - 上线资源齐全之后再上线
            - 宣传文稿
            - 产品描述文稿
            - 升级文稿
            - 产品图片
            - 宣传图片
            - ICON图片
            - 域名准备
            - 邮箱准备
            - 测试账户准备
            - 网站准备
            - 运营人员信息准备
            - 财务人员信息准备
            - 关键词准备
            - app分析埋点准备
            - 版本调整准备
            - 异常反应处理准备
            - 定价策略准备
        - 产品状态后续监控
    - 运营维护
        - 异常反应链
            - 用户反馈
                根据用户反馈的信息, 收集内容
            - 运营筛选
                运营根据用户的反馈内容, 判断哪些重复, 或者哪些无意义, 然后留下有用的. 再确定是我们的运营机制问题还是应用的问题, 如果是运营机制问题, 由运营自我管理调整, 如果自我调整失效, 则作为下一版本的立项需求. 如果是应用问题, 再汇交给开发团队. 
            - 合并分析
                - 紧急更新
                    当前马上更新, 甚至需要停止老版本的下载.
                - 升级版本
                    下一阶段立即发布一个新版本.
                - 下一版本
                    纳入接下去要开发版本计划.
                - 未来版本
                    纳入未来可以开发的计划.
                - 不处理
                    拒绝开发
            - 将结果放入开发工作计划表
                工作计划表可以是一个简单的TodoList, 文稿, 甚至是聊天群中的一句话. 
        - 运营活动管理
            - 活动情景提供
                运营设计运营活动的时候, 必须提供一个"活动情景"的文稿. 这个文稿, 主要有3部分构成, 1, 活动的功能, 描述以及其目标. 2, 活动的逻辑流程. 3, 活动的情景分析, 提供几个虚拟用户案例, 描述这个活动可能带来的影响.
            - 开发人员内审评定
                - 可实现性
                    开发人员确保这个活动功能是否可以做, 包括技术可行性和资源可行性判断. 
                - 实现性
                    开发人员确保这个活动功能是否去做, 可以做并意味着一定要去做, 因为如果涉及开发时间过长, 或者活动本身对程序稳定性有破坏作用, 那么, 开发人员可以拒绝实现. 
            - 将结果放入开发工作计划表

 

© 著作权归作者所有

共有 人打赏支持
danielwyo
粉丝 1
博文 13
码字总数 19257
作品 0
技术主管
IT行业常见职位英语缩写全攻略

PM Product Manager,产品经理 针对某一项或是某一类的产品进行规划和管理的人员,主要负责产品的研发、制造、营销、渠道等工作。 (管时程、各部门沟通协调、被客户骂、被上级钉。) SA Sys...

小仙女KOMons ⋅ 2017/05/11 ⋅ 0

随笔写下的开发流程

刚才突发奇想,对于开发的流程有了一点新的想法。就发出来,供大家拍砖。不知道大家对这个流程有什么不满呢,尽管说,希望尽快完善它,尽快应用它。好了,说正文吧。 1 了解需求 就是了解客户...

像教授 ⋅ 2017/11/26 ⋅ 0

分享个不错软件开发技术巡游活动

一直致力于中国软件行业的发展与创新的慧都科技,为将我们在开发实践中的经验更好的分享给一线软件企业,正式宣布即日起,启动旗下咨询专家团队的“年度技术巡访计划”。   由慧都CTO率团,...

很多风景 ⋅ 2013/10/12 ⋅ 0

月薪三千和月薪三万的互联网项目经理区别

随着互联网+的火热,目前项目经理只出现在稍微完善的技术团队中,所以对于很多工作时间不长的技术和其他外行朋友来看对于它的工作职责是非常陌生的。项目经理职位最先出现是在工程项目管理中...

程序员客栈 ⋅ 2016/04/26 ⋅ 0

职业生涯指南——附神级跳槽攻略图!

每个人的职业生涯无非以下几种情况: 一、帮别人挣钱(打工) 不管你是刚入职的小兵,还是管人的经理,甚至是唬人的总监,都属于这一阶段。 通常程序员在这一阶段的职业发展分两条线,专家(...

egefcxzo3ha1x4 ⋅ 2017/11/28 ⋅ 0

看这里!有个奔向月薪7万的程序员职业生涯全规划

一、帮别人挣钱(打工) 不管你是刚入职的小兵,还是管人的经理,甚至是唬人的总监,都属于这一阶段。 通常程序员在这一阶段的职业发展分两条线,专家(技术)线和管理线。专家线主要跟机器打...

⋅ 03/28 ⋅ 0

程序员职业规划

每个程序员的职业生涯无非以下几种情况: 一、帮别人挣钱(打工) 不管你是刚入职的小兵,还是管人的经理,甚至是唬人的总监,都属于这一阶段。 通常程序员在这一阶段的职业发展分两条线,专...

g6u8w7p06dco99fq3 ⋅ 01/07 ⋅ 0

精品C语言学习资料-教你成为编程高手

亲爱的Down友: 您好!51CTO下载中心为梦想增值,诚邀您的关注! 51CTO下载中心致力于让down友分享技术幵让技术变现,让广大技术爱好者便捷、实惠 的获取优质学习资源。 为了方便大家的学习,...

51CTO下载 ⋅ 2013/12/13 ⋅ 0

我的网络管理之路历程【我与51CTO一“七”成长】

想想我从事网络管理这条路的历程,往事历历在目,就好像是昨天发生的故事一样,要回溯到2008年这一年,2008年以前在工厂里做普通一线工人,每天长时间的上班,晚上还要加班很晚,甚至有时加班...

anlicec ⋅ 2012/08/23 ⋅ 0

国建融科与橄榄山软件签署战略合作协议 为BIM大型数据库丰增羽翼

2018年3月2日,恰逢欢乐同庆的元宵佳节,迎来了北京国建融科合创科技有限公司(以下简称“国建融科公司”)与北京橄榄山软件有限公司(以下简称“橄榄山公司”)战略合作协议的成功签署,橄榄...

zju_bim ⋅ 03/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部