2019-06-04 18:27:58
1.瀑布模型
传统软件方法学的软件过程,基本都可以用瀑布模型来描述。
与传统的瀑布模型相比,传统的模型没有每一阶段的验证,当后期发现错误时,则需要全部重头修改,消耗了大量人力物力。当前的瀑布模型每一阶段完成之后都要验证,保证每一阶段工作的准确性与高效性。
瀑布模型特点:必须等前一阶段的工作完成之后,才能进入下一个工作阶段。
在瀑布模型的每个阶段都应该坚持:
(1)每个阶段都必须完成每个阶段规定的文档。
(2)每个阶段结束前都要对所完成的文档进行评审,以便于尽早发现问题,改正错误。及时审查,是保证软件质量、降低软件成本的重要措施。 (所以需求分析、规格说明、设计阶段都要验证。)
实线阶段代表开发过程,虚线阶段代表维护过程。左侧的反馈箭头表示当前阶段发现错误时,需要回溯到上个阶段检查。在编码完成后,要对每个单元的编码进行测试,下一步进行综合测试,最后进行维护。在维护完成之后,上面有虚线箭头分别指向规格说明、设计与编码阶段,是因为在维护过程中,可能出现的问题所在的阶段。并且,如果当用户有变化的需求时,则应当重新开始撰写需求分析书,向下的步骤依次进行,直到用户满意。
2.软件生命周期
软件定义时期的任务:确定软件开发工程中的总目标,确定工程的可行性。估计完成该工程的时间成本,并且制定工程进度表。
(1)问题定义:通过对用户的调查访问,确立用户的问题性质,工程目标等。
(2)可行性研究:确立问题研究的范围及可行性,及拿些阶段应该投入更多的人力物力。
(3)需求分析:与客户进行密切访问充分交流信息,以得出用户想要的系统逻辑模型(是以后设计和实现目标的基础)。这个阶段的重要任务是用正式文档准确地记录对目标系统的需求,成为规格说明书。
开发阶段的任务:具体设计和设计前一个时期定义的软件。
(1)总体设计:应该先设计出实现目标系统的几种可能性方案,还有设计程序的体系结构,即确定程序由哪些模块组成及模块之间的关系。
(2)详细设计:解决了具体实现系统的任务,详细地设计每个模块,确定模块功能所需要的算法及数据结构。
(3)编码和单元测试:写出正确的容易理解、易于维护的程序模块。
(4)综合测试:通过各种类型的测试达到预定的要求。最基本的测试是集成测试和验收测试。
运行维护的任务:使软件持久地满足用户的需求。具体来说,当软件在使用过程发现的错误应该及时改正;当环境改变时应修改软件以适应新的环境;当用户有新的需求时应及时改进软件已满足用户的新需求。
3.分析模型
数据是模型的核心(数据字典是工具),是关于数据的信息集合,也是对数据流图中包含的所有元素定义的集合。对于数据流图中出现的所有被命名的图形元素加以定义,使得每个图形元素的名字都有确切的解释。
实体关系图(ER图):描述数据对象以及对象间的关系,用于数据建模。数据模型包含:数据对象、数据对象的属性、数据对象彼此间的关系。
数据流图(DFD图):描述了数据流在系统中流动的过程,以及指明对数据流进行变换的功能,是用于功能建模的基础。是结构化分析的基本工具,描述了信息流和数据转换,通过对加工进行分解可以得到数据流图。对应加工规格说明。
状态转换图(STD图):描述了对外部事件的响应方式,表示了系统的各种行为模式(称为状态)以及在状态间进行变迁的方式,用于行为建模。状态是可以被观察到的系统行为模型,一个状态代表系统的一种行为模型。对应控制规约。
4.将分析模型转化为软件设计
分析模型中的每一个提供了建立设计模型所需的信息。
数据设计将实体关系图中描述的对象和对象之间的关系,以及数据字典中描述的详细数据内容转为数据结构的定义(与数据字典、实体关系图对应)。
体系结构设计定义软件系统各主要成分的关系,主要需要分析数据之间怎样从一个模块流向另一个模块以及在模块内部的流向。(数据流图)。
总体设计分为数据设计和体系结构设计。
接口设计根据数据流图定义软件内部各成分之间、软件与其他协同系统之间及软件与用户之间的交互机制,主要分析数据从不同的模块之间如何设计接口,需要用到数据流图。(数据流图)。
过程设计把结构成分转化为软件的过程性描述,牵扯到数据状态的转换,以及状态变化的方式。(状态转换图、控制规格说明、加工规格说明)。
5.测试步骤与方法
测试时,首先进行单元测试,再进行组装测试,最后进行确认测试。
(1)模块测试:即单元测试。每个模块对应一个独立的子功能,将每个模块作为一个独立的实体进行测试,确认每一个单元能够正常运行,在该阶段的错误通常是编码和详细设计的错误。由编码人员自己完成(白盒法)。
(2)系统集成测试:即接口测试、组装测试。将经测试后的单元模块按照一定的顺序组装成系统,同时进行测试。重点是模块之间的相互通信与协调。当规模系统庞大时,进行集成测试一般分为子系统与系统测试(黑盒法)。应当验证系统是否能够实现需求分析的功能与性能,由专门的测试部门完成。
(3)确认测试:合格测试或验收测试。验证系统是否达到系统规定的要求。
(4)回归测试:在集成测试与确认测试之间加入回归测试。当某一个系统测试出现问题时,与该系统相关的系统进行局部测试,不用进行完全测试,节省时间应该返回就行回归测试。所以回归测试是很有必要的。
6.喷泉模型
“喷泉”体现了软件工程开发过程中的迭代和无缝的特性。
八个关键字:“快速迭代,无缝衔接”
不同阶段的圆圈相互重叠,表明两个活动之间存在交迭。
图中在一个阶段中的每一个向下的箭头表示阶段内的迭代(或求精)。维护的圆圈较小,表示在采取了面向对象范型之后维护的时间缩短了。编码阶段与集成测试阶段的重叠较大,说明两个活动之间存在较大的重叠性,编码阶段的“单元测试”由编码人员自己完成。
与瀑布模型相比,瀑布模型是面向问题的一种软件模型,而喷泉模型是面向对象分析的一种模型,喷泉模型的各个活动之间存在交迭,且每一部分完成之后都要求精,以节省时间。
7.面向对象分析模型
原型开发指向发现对象,对象也指向原型开发。因为原型开发综合其他活动进行是为了找出所有对象。早期的原型用于证实客户的需求,晚期原型用于修改交付用户前使用的状态。
建立用况图是用户使用/需求情况图。
发现对象是必要操作,是建立分析模型的必要环节。
详细说明与发现对象、定义属性与服务、建立结构与连接、划分主题(包)有双向箭头,详细分析对模型中的成分进行规范的定义和文字说明,可集中可分散。详细说明是一个反复的工作,因为对象以及对应属性的不断完善,所以需要反复进行。相当于面向过程分析模型中的“数据字典”。
建立交互图、状态图、活动图是辅助模型,可有可无。
图中每一个过程都有向上回溯的过程,面向对象的一个过程包括对象模型、功能模型与动态模型,各个过程之间界限模糊,为了更详细地找出对象与之间的关系。而面向过程分析模型由 数据模型--功能模型--行为模型,由一定的顺序,遵循严格的顺序进行,逐步找出对象与动能。
8.面向对象设计模型
4大系统:问题域 人机交互 任务管理 数据管理(关系:并列 无缝)
右边主要是OOA模型,5个过程之间无严格层次,先抽取一部分对象,按照其属性与服务相同的归为一个类,当有很多类时存在结构划分,当有更多的结构时划分为主题。对象是在不断发现的,所以在发现新的对象时,又重新开始进行类与对象的划分。
9.建模过程框图
一个模型的可信性分为:在演绎中的可信性 在归纳中的可信性 在目的方面的可信性
在进行一个软件模型建立时,应该具有一定的先验知识,比如现在要做建设银行的软件,可以对比之间做过的农业银行。
演绎分析应在一个逻辑上正确、数学上严格含义进行。
归纳法建模的主要信息来源是实验数据,其可信性分析是检查归纳程序是否按数学上和逻辑上进行。
一个模型只有在他用于原定的目标才能体现出它的意义。
10.建模的整个过程
是一个有规律、可推导、可追溯的过程。
业务模型:如何为现实世界建立模型: 人(actor) 事(use-case) 物(object model) 关键弄明白什么人,什么人做什么事,什么事产生什么物,中间有什么规则,再把人事物之间的关系定义出来,一个模型也就基本建立。参与者(人)是整个模型的核心,用例 (事)表示驱动者的业务目标。对象模型(物)表示达成这些业务目标过程中所涉及到的事物,用逻辑概念来表示他们,并定义他们之间的关系。业务模型映射了参与者在现实世界中的行为。
概念模型:向上映射了原始需求,向下为计算机提出了一种更高层次的抽象。
边界类:界面(UI),所有对计算机的操作都要通过界面进行。
实体类:业务实体的实例化结果 ,添加那些实际业务中使用不到但是转型计算机逻辑时需要的控制信息。
控制类:原始需求中的动态信息,即业务或用例场景中的步骤和活动。
在这个阶段,还可以对这些分析类在不同的视图上进行归纳和整理,以表达软件要求的一些信息。软件架构和框架通常也在这个阶段产生。
设计模型:将该概念模型实例化,得到真正可执行的计算机代码。概念模型中的边界类可以转化为操作界面或者系统接口。控制类可以转化为计算机程序或控制程序。实体类可以转化为数据库、文档或者其他持久化特征的类。
软件系统建模:先完成9种图例--完成5种视图--完成3种转换
9种图例:用例图、类图、对象图、状态图、顺序图、协作图、活动图、构件图、部署图
5种视图:用例、逻辑、构件、并发、部署
3种转换:现实--业务 业务--概念 概念--设计
2019-07-27 09:53:53 昨天在b站看了一个小视频,关于互联网公司的职业划分,在此做一个小分享(原视频up主:小鱼干的藏宝屋 2019/07/21)
一个互联网产品的诞生,最初都来源于一个想法,无论想法来自于客户或者来自于老板,在大多数情况下,他们很难去描述自己的业务需求,所以产品经理应运而生,用来真正地了解客户或者老板的想法并分析用户和市场需求来设计产品,完成设计后,要把自己的设计写成文档和完成设计图,交付给后面地人员进行开发,同时在产品的开发阶段需要配合设计开发测试运营等同事协作完成,进行调整和沟通,保证自己的产品能够顺利上线。
在产品经理设计好文档及原型图之后,项目也开始启动。这时,web后端程序员,设计,架构师,web前端程序员,手机端程序员,数据库管理员,特殊方向程序员,运维,测试等部门准备就位,势必要把这个项目撕个粉碎。 可是,这些人如何协作,进度如何跟进?此时,项目经理出现,顾名思义,带着大家做项目,安排项目计划,主要和人打交道,需要协调各个方面的关系,保证项目进展顺利。
项目开始,首先,设计部门开始设计:赏心悦目的界面,舒服的交互性都是视觉、交互、UI设计师需要考虑的。这时,程序员的最高等级架构师开始根据文档的内容,敲定该产品多用到的技术栈和搭建稳定的基本架构,作为一名合格的架构师,不仅需要过硬的技术能力,还需要对各种编程语言和流行的技术有一定的见解。
确定好技术栈和设计好界面后,程序员上场!程序员分多种: web前端程序员(做网页设计,根据设计师画出的精美图片和产品经理的原型图制作出精美的网页) web后端程序员(主要对数据进行逻辑处理,把结果传给前端程序员或者数据库,相当于厨师把菜、肉传给服务员(前端),前端程序员把肉、菜端给客户品尝) 手机端程序员(与web前端程序员类似,传菜和装修饭店,工作场地是安卓系统和IOS系统) 特殊方向程序员(高端方向:大数据、区块链、人工智能、机器学习、复杂网络,设计高级的算法及数学知识)
下一阶段:测试,就是找茬!主要工作是检查程序员写的程序有没有bug,一般画风如下:
测试女A:秃头郭,你这个页面好像排版不太对呀,这个字体是不是太小了,按钮是不是太大了!还有你,没有bug,但是这个结果不对呀,我明明充值了100块,怎么现在显示我充值了一万?
数据库管理人员(DBA):负责管理数据库,即相当于负责管理肉、菜类,需要的时候把他交给厨师,一般大公司才有,大多数时候这块由后端程序员兼任。
运维:主要和服务器打交道,主要的工作是在linux上搭建各种环境,即安装各种系统和软件,然后监控各个软件和硬件的运行状况,要举例的话,大概就是负责构建厨房的人吧,让厨师能愉快地炒菜。
终于,经过开发和测试后,产品上线了,这时候就轮到运营出场了,顾名思义,就是运行和维护这个产品的人,如淘宝里设置开店规则,设计各种活动的,发放优惠券的,调节客户和卖家的矛盾的。
结合课堂所学与老师所讲,老师刚好布置了作业,顺便整理了软件工程与建模相关知识,十张图为中心。以后随着知识体系不断健全,将不断完善,欢迎指出问题。
参考教材:软件工程导论(第6版)清华大学出版社
软件工程与建模 西安交通大学出版社