当前课程知识点:软件工程 > 第5章 团队开发管理 > 5.3 软件项目计划 > 讲课视频
软件项目计划
是对软件开发过程中的活动
资源 任务 进度等进行规划
我们知道
按时交付是软件项目的最大挑战
所以合理地安排进度
是软件项目计划的关键内容
一般来说项目计划
需要由团队成员共同讨论制定
明确项目要做什么
如何做
谁去做
什么时候做
成本是多少
以及应该达到什么质量
等一系列问题
制定软件项目计划
一般需要经过以下过程
首先是开发问题描述
明确系统应该解决的问题
目标环境和交付验收标准
接下来进行顶层设计
确定系统的总体结构和模块划分
然后对整个项目
进行任务分解
并把任务分配给团队成员
最后估计可能完成的时间
建立项目的初始计划
问题描述是由项目团队
和客户共同讨论形成的
双方需要对系统所要解决的问题
达成共识
说明问题提出的背景
需要开发的功能和性能
以及系统运行的目标环境
下面我们给出一个
微信抢票应用的事例文档
微信作为一种新媒体
已经被大学生普遍使用
通过微信应用可以
及时发布各种活动
并且提供便捷的服务
免去排队的烦恼
基于这样一个背景
项目的开发目标
就确定为在微信服务号的基础上
开发一个抢票应用
实现活动推送和抢票服务
抢票应用的功能需求
主要包括帐号绑定
因为是针对校内学生的活动
需要通过绑定帐号
来确认学生的身份
还有活动创建和信息维护
抢票 选座和检票等
非功能需求
定义了用户并发数和响应时间
要求支持的手机操作系统
以及一些软件设计
和代码质量的要求
另外未来运行的应用服务器
要部署在阿里云上
考虑到这个应用
只是给校内学生使用
所以开发和运行环境
都要采用开源系统
以便节省成本
抢票应用要在年底的
新年联欢晚会上使用
所以规定交付时间
是2014年12月25日
对于问题描述中的功能需求
还要进一步说明
用户和系统交互的一系列场景
这里给出的
是一个学生抢票的场景
以及若干微信操作的界面原型
在需求分析的基础上
我们要给出系统的顶层设计
它定义了软件系统的体系结构
把整个系统划分成
若干独立的子系统
第一步
是要明确设计目标
这个时候要考虑一下性能
可扩展性这样一些设计质量
第二步
做初始的子系统分解
需要比较不同的设计方案
以及可以采用的标准的
体系结构风格
第三步 初始分解
也许不能满足所有设计目标
需要进一步的分解和求精
最后 把分解的不同的子系统
分配给不同的团队和开发人员
让他们协商定义
子系统之间的接口
需要强调的是
子系统分解应该是高层的
专注于功能并且要保持不变
每一个子系统
可以分配给一个团队或个人
由他来负责进行详细设计和实现
这是微信抢票应用的
顶层设计示意图
前端部分
根据用户角色的不同
分成用户微信页面
和活动管理员页面
其中用户微信页面
负责显示订票者
在微信端打开的网页
实现界面的一些业务逻辑
举RESTful API进行通讯
活动管理员页面也是类似
只是显示的是管理员
在PC浏览器中打开的网页
抢票消息处理模块
实现与微信服务器的通讯功能
在服务器端
处理与抢票相关的业务逻辑
RESTful API模块
是封装的HTTP API
处理网页前端
所涉及业务的数据输入和输出
并将数据读写请求
传递给数据存取模块
数据存取模块封装数据库接口
处理所有数据读写请求
并操作数据库
在必要的情况下对部分数据
像一些高频只读数据
进行内存缓存
项目工作分解
是将项目整体
分解成一些更小的
易于管理和控制的子项目
或工作单元
分解项目工作
可以有不同的方法
最常用的
是基于要做的功能进行分解
对于前面给出的
抢票应用这个例子
假设一个开发团队
由5个成员组成
我们按照系统功能
对项目工作进行分解
然后分配给不同的人员去完成
大家认为这个
工作分解方案怎么样
帐号绑定部分比较独立
单独交给一个人去做
比较合适
其余部分
虽然在功能上可以分割
但是在开发过程中
由于代码和数据库设计上的耦合
比如说
成员B和C他们的任务
都涉及到活动
成员C D E又都涉及到票
这样就造成
一个人在设计上的修改
会影响到其他人
另外
熟悉前后端和数据库开发的
全栈工程师并不多
对于学生团队更是如此
所以这种分解
可能会使不同人开发的部分
在集成的时候出现困难
另一种分解方法
是根据系统的产品结构
来定义项目工作
我们把前端的用户微信页面
和活动管理员页面
分别分配给成员A和B
抢票的消息处理模块
和RESTful API模块
分配给成员C
数据存取模块分配给成员D
成员E 完成帐号绑定模块
并承担更多的功能测试工作
这种分解方法
可以使开发人员
专注于前端 后端
和数据库的开发
不同模块之间
通过接口进行访问相对来说
耦合性比较低
项目工作分解之后
需要进一步估算
活动所需要的时间和资源
并按照一定的顺序
把这些活动进行组织和调度
建立项目的进度计划表
在这个过程中
首先要识别任务
以及任务之间的依赖关系
由开发人员
估算所承担任务的完成时间
最终创建项目的进度表
需要说明的是
制定进度计划
需要在资源 时间
和实现功能之间进行平衡
并且要定期进行更新
-1.1 软件无处不在
--讲课视频
-1.2 软件的本质特性
--讲授视频
-1.3 软件工程的产生与发展
--讲授视频
-1.4 软件工程的基本概念
--讲授视频
-1.5 软件质量实现
--讲授视频
-1.6 业界人士谈软件工程
-测验题--作业
-讨论题
--讨论题
-作业题
--第一张 作业题
-2.1 编程过程与规范
--讲课视频
-2.2 良好的编程实践
--讲课视频
-2.3 Python集成开发环境
--讲课视频
-2.4 代码静态检查
--讲课视频
-2.5 代码性能分析
--讲课视频
-2.6 结对编程实践
--讲课视频
-2.7 刘贺谈软件工程
--讲课视频
--讨论
-测验题--作业
-作业题
--第二章 作业题
-3.1 单元测试概述
--讲课视频
-3.2 黑盒测试方法
--黑盒测试方法
-3.3 白盒测试方法
--基本概念
--代码覆盖标准
--基本路径测试
-3.4 单元测试工具
--单元测试工具
--html
-测验题--作业
-作业题
--第三章 作业题
--作业题附件
-4.1 软件过程
--讲课视频
-4.2 软件过程模型
--讲课视频
-4.3 敏捷开发过程
--讲课视频
-4.4 微软公司开发过程
--邹欣经理自我介绍
--微软开发过程之一
--微软开发过程之二
-测验题--作业
-5.1 团队组织与管理
--讲课视频
-5.2 项目沟通管理
--讲课视频
-5.3 软件项目计划
--讲课视频
-5.4 软件项目估算
--讲课视频
-测验题--作业
-讨论题
--讨论
-6.1 敏捷开发之Scrum
-- 敏捷开发之Scrum
--html
-6.2 用户故事与估算
--讲课视频
-6.3 团队协作工具Tower
-6.4 配置管理
--讲课视频
-6.5 配置管理工具Git
--讲课视频
-测验题--作业
-作业题--作业
-7.1 需求工程师
--讲课视频
-7.2 需求定义
--讲课视频
-7.3 需求的类型
--讲课视频
--讲课视频(2)
-7.4 需求工程过程
--讲课视频
-7.5 需求的主要来源
--讲课视频
-7.6 需求获取技术
--讲课视频
--讲课视频二
--讲课视频三
-7.7 撰写需求文档
--讲课视频
-测验题--作业
-讨论题
--讨论
-8.1 用例建模概念
--讲课视频
-8.2 用例建模过程
--讲课视频
-8.3 用例建模精讲
--讲课视频
-8.4 建模工具介绍
--讲课视频
-8.5 微信抢票应用案例
--讲课视频
-测验题--作业
-讨论题
--讨论
-9.1 面向对象分析
--讲课视频
-9.2 CRC卡片分拣法
--讲课视频-1
--讲课视频-2
-9.3 面向对象设计
--讲课视频-1
--讲课视频-2
-9.4 类图建模
--讲课视频-1
--讲课视频-2
-第9章 面向对象分析与设计--测验题
-讨论题
--讨论
-10.1 顺序图概念
--讲课视频
-10.2 顺序图建模
--讲课视频
-10.3 顺序图风格
--讲义视频
-10.4 状态建模
--讲课视频
-10.5 状态图
--讲课视频
-10.6 状态图精讲
--讲义视频
-测验题--作业
-讨论题
--讨论
-11.1 软件体系结构概念
--讲授视频
-11.2 软件设计原则
--讲授视频
-11.3 软件体系结构风格(一)
--讲授视频
-11.4 软件体系结构风格(二)
--讲授视频
-11.5 软件体系结构风格(三)
--讲授视频
-11.6 软件设计过程
--讲授视频
-11.7 Web系统架构设计
--讲授视频
-11.8 数据库选择策略
--讲授视频
-测验题--作业
-作业题
--html
--html
--html
-作业题--作业
-12.1 交互设计概述
--讲授视频
-12.2 交互设计目标
--讲授视频
-12.3 GUI设计原则
--讲课视频
-12.4 KLM效率模型
--Video
-12.5 Fitts定律
--讲授视频
-12.6 交互设计过程
--讲授视频
-测验题--作业
-13.1 软件测试概念
--讲课视频
-13.2 软件测试类型
--讲课视频
-13.3 软件功能测试
--讲课视频
-13.4 软件性能测试
--讲课视频
-测验题--作业
-14.1 软件部署与交付
--讲课视频
-14.2 软件演化与维护
--讲课视频
-测验题--作业
-第一部分:基础知识
-第二部分:编程与测试(选做)