一、软件开发生命周期
软件开发生命周期(Software Development LifeCycle)是指软件的产生直到成熟的全部过程。它描述了软件从计划、需求开始,经历分析设计、代码实现、测试、部署上线、维护,直到最后逐渐消亡的过程。
- 市场分析,可行性研究、项目定义
- 需求分析:搞清楚“要解决什么问题”
- 设计
- 概要设计:搞清楚“总体实现方案”
- 划分模块、分配任务、定义调用关系
- 概要设计文档主要包含分层数据流图、结构图、数据字典以及相应的文字说明等
- 以概要设计文档为依据,为各个模块进行详细设计
- 详细设计:搞清楚“每个模块怎么做”
- 各个模块可以分给不同的人去并行设计
- 设计者的工作对象是一个模块,根据概要设计赋予的局部任务和对外接口,设计并表达出模块的算法、流程、状态转换等内容
- 详细设计文档最重要的部分是模块的流程图、状态图、局部变量及相应的文字说明等
- 编码实现
- 测试:描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程
- 运行与维护
- 废弃(淘汰)
二、需要分析
1、概念
需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。
简单的说,开发人员对待开发的系统(软件)要做什么、解决什么问题,实现什么功能的一个全面描述。
2、获取需求
- 与客户座谈
- 实地观察
- 问卷调查
- 查阅资料
把自己变成假想客户
3、输出
清晰、规范的《软件需求规格说明书》。文字、表格、原型图和相关的图形,图文并茂,便于用户与开发团队理解。
- 业务需求:组织或客户高层次的目标。解决用户实际问题,追求商业可行性和利益的最大化。如:为了实现信息化购票管理与维护。
- 用户需求:是用户的目标,或用户要求系统必须能完成的任务。用例、场景描述和事件――响应表都是表达用户需求的有效途径。如:查看上映电影、购票等。
- 功能需求:规定开发人员必须在产品中实现的软件功能(即描述开发人员需要实现什么),开发人员通过实现功能来完成用户需求进而满足业务需求。如:购票之前,用户应该先查看电影相关信息(票价、影评)、选择影厅、是否优惠等。
- 非功能需求
- 性能需求
- 环境需求
- 安全需求
- 用户界面需求
- 其它需求等等
明确客户需求、保证一致性,而无歧义,否则增加开发成本
三、用例图
1、概念
从用户角度描述系统功能,并指出各功能的操作者。
2、组成
1)参与者:与系统进行交互的一类人、组织、设备或外部软件组件。如:顾客、餐馆、供应商、物理系统、支付授权方等。图形为一个小人
2)用例:表示一个或多个参与者为实现特定目标而执行的操作。如:订餐、更新菜单、处理付款。图形为椭圆。
3)关联:用例与参数者之间的关联。图形为直线。
4)系统:系统可以是完整的应用程序,也可以是小型软件组件,还可以是部署在多台计算机和设备上的大型分布式应用程序套件。如:“订餐网站”、“送餐业务”、“网站版本 2”。图形为:矩形。
5)关系
- 扩展关系:表示一个用例可能会扩展到另一个用例。用例中的扩展通常暗示一个选择性流程。
- 包含关系:表示一个用例包含另外一个用例的行为功能。
四、功能分解
将系统划为多个功能模块。各功能亦可分解为若干子功能及接口,子功能再继续分解。便可得到系统的雏形,即功能分解——功能、子功能、功能接口。
五、数据库设计 : E-R图
1、设计过程
第一:收集信息
BBS论坛的基本功能:
用户注册和登录,后台数据库需要存放用户的注册信息和在线状态信息;
用户发贴,后台数据库需要存放贴子相关信息,如贴子内容、标题等;
论坛版块管理:后台数据库需要存放各个版块信息,如版主、版块名称、贴子数等;
第二:标识对象(实体、实体对象)
相同特征的数据的抽象,它可以是现实的对象,也可以是抽象的一个概念。
- 用户
- 主贴
- 回贴
- 模块
第三:标识属性
用于描述实体的特征、特性、信息或数据。
- 用户
- 帐号<主键>
- 身份证
- 手机号码
- 昵称
- 密码
- 电子邮件
- 生日
- 性别
- 用户的等级
- 备注信息
- 注册日期
- 状态
- 积分
- 主贴
- 发贴人<外键>
- 发贴表情
- 回复数量
- 标题
- 正文
- 发贴时间
- 点击数
- 状态
- 最后回复时间
- 回贴
- 贴子编号
- 回贴人
- 回贴表情
- 标题
- 正文
- 回贴时间
- 点击数
- 版块
- 版块名称
- 版主
- 本版格言
- 点击率
- 发贴数
第四:标识对象间的关系
关系:描述实体与实体之间的联系,主要以下三种关系
决定两张表是否建立主外键关联
- 一对一
- 1:1
- 商品基本信息:商品明细 、老公 : 老婆
- 1对多
- 1:M 、 1:N 、 1:*
- 班级-学生
- 多对多
- M:N 、* 😗
- 专业-课程
第五:绘制E-R图
- 实体:矩形(一般是名词)
- 属性:椭圆形(一般是名词)
- 关系:菱形(一般是动词,有三种描述)
- 连接:直线(箭头)
第六:把E-R图转换为数据表(关系表)
- 把实体名转换为表名
- 把属性转换为表的字段
- 标识主键
- 标识表间的关系(外键)
候选关键字 : 在表中能唯一标识记录的相关字段 ,分别:帐号、身份证、手机号码
主关键字 : 在候选关键字中,选中某个字段作为主要标识,帐号
公共关键字 : 两张表之间,存在相同意义的字段,帐号 - 发贴人
外关键字 : 在公共关键字中,如果一个字段为主键,则另一个字段为外关键字
唯一键 : 在候选关键字中选择,保证数据的唯一性
第七:使用范式规范化数据表
2、案例
图书借阅管理系统的基本功能
用户注册和登录后,数据库中存储用户的注册信息
数据库中存储所有图书的详细信息
用户借书后,数据库中存储用户的借阅信息,如:借书时间、图书信息,用户信息等
用户还书后,数据库中存储归还的时间等信息
要求:根据以上需求描述,绘制E-R图,并使用T-SQL定义相关的表,每张表至少要录入三条记录。
3、范式
1)概念
规范化数据(表)
2)目的
- 为了"消除"数据的冗余
- "消除"CRUD的异常
3)分类
- 第一范式:保证每列不可再分(原子性)
- 第二范式:确保表中的每列都和主键相关(确保一张表只描述一件事情)
- 第三范式:确保每列都和主键列直接相关,而不是间接相关
注:有时为了性能和效率,可以放弃范式的约束。
六、绘制原型图
快速了解需求、迭代开发。
版本更新、备份。
通过VS实现绘制原型图。
七、团队开发
- 版本控件工具
- Subversion(SVN):集中式管理
- Git:分布式的管理
- 原始方法
- 命名规范
- 约束规则