当前课程知识点:软件工程与软件自动化 > 第一章 软件工程基础 > 1.2 万变不离其宗 > 授课视频2/3
好,下面我们逐步分析一下
这几个主要的阶段
第一个阶段我们可以理解为可行性分析
可行性分析要解决的问题是做不做的问题
就是这件事是干还是不干
具体到软件
这个软件我们开发不开发
一般的来说需要考虑这四个方面
第一个方面当然是钱的问题
就是挣不挣钱
我们搞软件开发,不是搞慈善
首先是以盈利为目标,挣不挣钱
第二个,技术
就目前的技术水平或者是我们公司
这种员工所具有的技术能力
能不能搞的定这个项目
现在我们知道技术发展很快
所以说我们对技术的把握
比如说十年前甚至五年前
我们做不到的事情
现在就可以做了
技术的问题
那么技术上比较明显的就是
算法了,结构了
包括现在我们比较高深的大数据,云计算等等
第三个叫社会环境
也就是说市场,政策
也决定着我们这个软件能不能做
如果你对市场的把控不够
那市场都是夕阳产业了
你还投入钱来做
做完之后市场已经消失了
那就没有意义了
这一点更多的是一种商业的把控
多年前我们的通信市场上有一个产品叫小灵通
小灵通是作为固话的一个延伸
那是一个非常好的东西
后来国家为了把小灵通所占用的频带资源
让给4G,就下令我们小灵通市场退市
小灵通要退市了
于是小灵通上中下游所有的厂家商家
一夜之间全部自寻出路
这就是一个典型的例子
你要做一个软件,你对社会环境的
市场和政策的把控一定要做好
第四块,就是人
也就是说你想做这件事情,有没有人
我们说二十一世纪最重要的是什么
是人才
这个人,其实我们可以分成四类
第一个就是人物
比如说公司的领军,就是头头
他决定着整个软件,整个公司的发展
这个软件的一个舵手
他要开发的这个软件驶向何方,船长
第二个,人才,精英
技术,商务,财务,市场
各个领域的精英,人才
我们说人才市场
大学生一毕业,就进入人才市场
我们就是人才了
那第三个我们就可以称之为人手
通常我们说一句话:哎,这儿人手不够
过来两个人,过来两个喘气的
人手的一个特点就是可替代性
就是你来也行,他来也行
只要能做这件事,能顶上来就可以
第四个我们可以叫做人精
也就是说,在我们当前的社会环境当中
公关啊,营销啊,售前售后啊
也就是说我们能不能做这件事情
我们公司里面的这个人
各司其职,做好自己的工作
这样的话我们才能够做好这件事情
这就是说这个可行性分析要考虑的几个方面
那么需求分析
要解决的是做什么的问题
可行性分析说了,我做还是不做
最后得出结论说90%会失败
理性的人说90%失败
我肯定不做
但有的时候,用户可能是一种赌徒的心理
抢银行,抢银行99%会失败
应该不能抢是吧,但有的人想了
亡命之徒想了,但万一成功了呢
所以说可行性分析
分析的结果可能只是一个参考
那么最终还是由人来决定
也就是说做还是不做,他是一种赌徒的心理
确定要做了
具体要做什么呢
要列出来做什么
做什么,尤其是我们做软件开发
做什么首先我们第一个步骤就是要捕获
客户心目当中到底要做什么
我们知道,人的想法太复杂了
所以有一个歌词叫女孩的心思你别猜
就是说这个大脑当中的想法也是很难
就目前技术来说是很难精确捕获的
所以说我们需求分析的基础是什么?
捕获他要做什么
他要能说清楚,没问题
他要说不清楚呢
他自己也不知道我要做什么呢
只是一个想法,我只是有200万
我只是有一个想法
具体做什么我也不知道
捕获完之后,我们要把这个
客户的需求记下来,12345记下来
记下来之后反馈确认
再反馈再确认
记录下来之后
当然记录的时候我们可以写下来
word文件记下来
或者用其它的专门记录工具
记下来之后我们要干什么
简单的分析起来好说
复杂的一个系统
我们分析起来就必须用专业的这种分析工具
我们有专门的分析技巧和分析规则
我们这里面用一个简单UML用例分析技术
画了一个用例图来表示用户的这种
非形式化的自然语言的
这种对需求的描述
下面进入的是系统分析与设计
要解决的问题是怎么做的问题
怎么做,这是软件开发的一个核心
如果客户知道怎么做
就不用找我们专业开发人员了
我们来看一看在系统分析设计里面
我们主要来考虑这四个方面
第一个方面就是系统的体系结构
体系结构很重要很简单
比如说北京,它的交通就像烙大饼
二环三环四环五环六环七环,
环路呢,这种结构有它的特点
有它的优势,但是也有它的缺陷
比如说有一点断掉了,堵了,出事故了
这个道路塌陷了等等
那么全线崩溃
如果说现在这个大饼已经烙成了
你要想走棋盘式的道路设计
动不了了,
所以说这个体系结构呢
需要最早来确定,很重要
模块呢,模块很重要
它是一种分解的思想
一开始我这个系统很复杂
复杂到什么程度?人类的智力解决不了
那怎么办呢,我就把它分解
分解不同的小的模块
模块之间的关系,我们把它弄清楚
这就是模块的概念
第三个就是数据结构与算法
数据结构和算法之间是形影不离的,
特定的结构适用特定的算法
不同的算法需要不同的结构
这是整个软件系统的精气神所在的地方
比如说,谷歌公司的搜索引擎算法
和其他搜索产品相比
他们的差距还是比较大的
它的核心就在于它的结构
谷歌公司它是如何把全球这么多的网页
放在服务器上,放在它的数据中心
以怎么样的形式来存储的
怎么能够做到在零点零几秒
在全球任一个地方就能得到一个结果
这是它的核心内容
最后是界面,界面问题
现在我们知道随着智能手机的发展
界面是越来越炫
但是这种页面的炫
其实一定是符合几个基本的规则
比如说一致性规则,在界面当中你不可能
第一个界面是这样的风格
另外一个界面是另外一个风格
那不一致,
还有就是适用性规则
比如说,你现在这个软件给银行柜员使用
他们需要的是效率
所以他们使用小键盘,通过回车来移动光标
通过数字键入来快速完成业务
他不需要用鼠标
不需要花花绿绿的
对他们来说
简单的界面,素色的界面
这种界面之间元素的跳转,他们更关注
但如果开发一个游戏
那么更多的是一种炫,对于颜色啊
图形图像的搭配更重要一些
详细设计
也是说如何做的问题
只不过更细化一些,细化到什么程度
可能包括某一个算法伪代码的实现
它的结构的明确
到底是用数组还是用一个列表
还是用一个链式的结构
这是我们举的一个例子,大家看一看
就是说我甚至对目前我的软件系统当中
可能出现的一个对象
它的有限状态机做一个描述
详细设计
编码阶段,我们大家来看一下
我们有一个自称就是程序猿
大脑很发达,精通各种语言,非常的厉害
由于我们软件的应用对象
应用的场景不同
所以说会出现各种各样的编程语言
比如说现在做智能手机前端的
做后端的,这种科学计算的语言等等都会出现
一个程序员要想精通所有的语言
几乎是不可能的
编码目前也是我们需求量最大的一块
-1.1 软件工程的前生今世
--开篇阅读
--授课视频
-第一章 软件工程基础--1.1 软件工程的前生今世
-1.2 万变不离其宗
--授课视频1/3
--授课视频2/3
--授课视频3/3
-第一章 软件工程基础--1.2 万变不离其宗
-1.3 唯一不变的是变化
--授课视频1/3
--授课视频2/3
--授课视频3/3
--外部链接
-第一章 软件工程基础--1.3 唯一不变的是变化
-1.4 亡羊补牢为时不晚
--授课视频1/2
--授课视频2/2
-第一章 软件工程基础--1.4 亡羊补牢为时不晚
-扩展阅读与话题讨论
--扩展阅读
--话题讨论
-2.1 方法论来源于恐惧
--授课视频
-第二章 敏捷开发--2.1 方法论来源于恐惧
-2.2 敏捷是什么
--授课视频
-第二章 敏捷开发--2.2 敏捷是什么
-2.3 典型敏捷开发方法
--XP敏捷开发方法
-第二章 敏捷开发--2.3 典型敏捷开发方法
-2.4 敏捷不是万能药
--授课视频
-第二章 敏捷开发--2.4 敏捷不是万能药
-专家谈敏捷
-扩展阅读与话题讨论
--外部链接
--话题讨论
-3.1 面向对象核心概念和基本特性
-第三章 OO与UML--3.1 面向对象核心概念和基本特性
-3.2 面向对象设计基本原则
-第三章 OO与UML--3.2 面向对象设计基本原则
-3.3 通用职责分配模式(GRASP)
--通用职责分配模式
-3.3 通用职责分配模式(GRASP)--作业
-3.4 从重构到模式
--模式和设计模式
-第三章 OO与UML--3.4 从重构到模式
-3.5 使用UML设计面向对象系统
--UML综述
-第三章 OO与UML--3.5 使用UML设计面向对象系统
-3.6 主要UML模型图绘制技巧
--UML用例图
--UML类图
-第三章 OO与UML--3.6 主要UML模型图绘制技巧
-扩展阅读与话题讨论
--设计模式有毒么?
--话题讨论
-4.1 案例简介
--书籍参考
--案例说明
-4.2 对象模型之一
--授课视频1/2
--授课视频2/2
-第四章 对象模型分析--4.2 对象模型之一
-4.3 对象模型之二
--授课视频1/2
--授课视频2/2
-第四章 对象模型分析--4.3 对象模型之二
-4.4 对象模型之交互
--授课视频
-第四章 对象模型分析--4.4 对象模型之交互
-扩展阅读与话题讨论
--图书推荐
--话题讨论
-5.1 软件自动化概述
--软件自动化概述
-第五章 软件自动化技术--5.1 软件自动化概述
-5.2 典型自动化方法和工具
-第五章 软件自动化技术--5.2 典型自动化方法和工具
-5.3 文档自动化
--文档自动化视频
-第五章 软件自动化技术--5.3 文档自动化
-5.4 测试自动化
--测试自动化视频
-第五章 软件自动化技术--5.4 测试自动化
-专家访谈
-扩展阅读与话题讨论
--话题讨论
-6.1 持续集成
-第六章 CI/CD与DevOps--6.1 持续集成
-6.2 持续交付和部署
-第六章 CI/CD与DevOps--6.2 持续交付和部署
-6.3 DevOps
-第六章 CI/CD与DevOps--6.3 DevOps
-专家访谈
-扩展阅读与话题讨论
--DevOps专题
--话题讨论
-7.1 质量和质量保证
--授课视频
-第七章 软件质量保证--7.1 质量和质量保证
-7.2 软件质量模型
--授课视频
-第七章 软件质量保证--7.2 软件质量模型
-7.3 SQA组织与职责
--授课视频
-第七章 软件质量保证--7.3 SQA组织与职责
-7.4 全面软件质量管理
--授课视频
-第七章 软件质量保证--7.4 全面软件质量管理
-专家访谈
--专家访谈
-扩展阅读与话题讨论
--外部链接
--话题讨论
-8.1 软件过程综述
--授课视频
-第八章 软件过程改进--8.1 软件过程综述
-8.2 软件过程改进
--授课视频
-第八章 软件过程改进--8.2 软件过程改进
-8.3 能力成熟度模型
--授课视频
-第八章 软件过程改进--8.3 能力成熟度模型
-8.4 过程改进标准框架
--授课视频
-第八章 软件过程改进--8.4 过程改进标准框架
-扩展阅读与话题讨论
--话题讨论
-9.1软件复用综述
--授课视频
-第九章 软件复用--9.1软件复用综述
-9.2 软件构件技术
--授课视频
-第九章 软件复用--9.2 软件构件技术
-9.3 软件复用实施
--授课视频
-第九章 软件复用--9.3 软件复用实施
-9.4 微服务架构
--授课视频
-第九章 软件复用--9.4 微服务架构
-扩展阅读与话题讨论
--微服务扩展
--话题讨论
-文档提交处--文档提交