一、软件开发生命周期

软件开发生命周期(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图转换为数据表(关系表)

  1. 把实体名转换为表名
  2. 把属性转换为表的字段
  3. 标识主键
  4. 标识表间的关系(外键)

候选关键字 : 在表中能唯一标识记录的相关字段 ,分别:帐号、身份证、手机号码

主关键字 : 在候选关键字中,选中某个字段作为主要标识,帐号

公共关键字 : 两张表之间,存在相同意义的字段,帐号 - 发贴人

外关键字 : 在公共关键字中,如果一个字段为主键,则另一个字段为外关键字

唯一键 : 在候选关键字中选择,保证数据的唯一性

第七:使用范式规范化数据表

2、案例

图书借阅管理系统的基本功能

用户注册和登录后,数据库中存储用户的注册信息
数据库中存储所有图书的详细信息
用户借书后,数据库中存储用户的借阅信息,如:借书时间、图书信息,用户信息等
用户还书后,数据库中存储归还的时间等信息

要求:根据以上需求描述,绘制E-R图,并使用T-SQL定义相关的表,每张表至少要录入三条记录。

3、范式

1)概念

规范化数据(表)

2)目的

  • 为了"消除"数据的冗余
  • "消除"CRUD的异常

3)分类

  • 第一范式:保证每列不可再分(原子性)
  • 第二范式:确保表中的每列都和主键相关(确保一张表只描述一件事情)
  • 第三范式:确保每列都和主键列直接相关,而不是间接相关

注:有时为了性能和效率,可以放弃范式的约束。

六、绘制原型图

快速了解需求、迭代开发。

版本更新、备份。

通过VS实现绘制原型图。

七、团队开发

  • 版本控件工具
  • Subversion(SVN):集中式管理
  • Git:分布式的管理
  • 原始方法
  • 命名规范
  • 约束规则