建议学习时长:60分钟
学习方式:了解
学习目标
- 了解软件生产的各个周期。
- 了解软件生产中常用的工具。
详细介绍
什么是软件工程
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
软件的生命周期
软件的生命周期以结构化的方法具体分成了六个阶段:
- 问题的定义及规划:开发方调研用户需求及用户环境,开发方和需求方论证项目的技术、经济、市场等可行性并制定项目初步计划。
- 需求分析:开发方确定系统的运行环境、建立逻辑模型、确定系统的功能和性能要求。
- 软件设计:
1). 概要设计:建立系统总体结构、划分功能模块、定义各个功能模块的接口,制定测试计划。
2). 详细设计:设计各个模块的具体实现算法,确定各个模块间的详细接口,制定测试方案。 - 程序编码:编写程序源代码、进行模块测试和调试,编写用户手册。
- 软件测试:集成测试、编写测试报告
- 运行维护:日常的运维工作及后续的维护升级。
一般而言,软件系统的生命周期在10年左右。过了10年后,不是说软件系统就不能用了,而是可能会付出更大的成本去维护。也就是说超过投入产出比。并且投入之后还不一定能满足现有业务的需求。一般这个时候,会用新技术去架构之前的软件系统,重新开发。
软件的开发模型
-
瀑布式开发流程
瀑布式开发流程(Winston Royce 1970)是最早得到广泛承认的开发流程。这是一个线性的模式,只有完成了前一个步骤才能开始下一个步骤。比如说,在开始设计之前,必须先完成需求分析。如果有信息未被覆盖或者发现了问题,那么就得返回上一个阶段并进行适当的修改。
-
螺旋式开发流程
使用螺旋式开发流程,我们能够在早期就提供出产品的原型进行评估。然而,它之所以引入“迭代”的思想其实是因为需要找出项目开发存在的风险并加以控制。风险分析需要有经验的专业人士才能得出正确的结果,如果未能够及时标识风险,势必造成重大损失。
此外,这种阶段式迭代的流程仍然存在周期较长、开发成本较高的问题。因此它更多适用于大型软件项目。 -
迭代式开发
迭代式开发,摒弃了传统的需求分析,设计,编码,测试的流程,而是将整个生命周期变成若干个冲刺(Sprint)阶段,而每一个阶段都是由以上若干或者全部传统的流程组成,在每一个阶段中,都会包含下面四个阶段:初始阶段,细化阶段,构建阶段,交付阶段。在初始阶段中,确认本次冲刺的范围,边界,系统选择的架构,计划,以及所需要的资源等信息。在细化阶段中,对问题进行建域,创建开发案例,创建模板以及准备工具等。在构建阶段的主要任务就是完成构建的开发并且进行测试,将完成的构建集成为产品,并且测试所有的功能(CI)。在交付阶段,主要是完成本次冲刺,将软件产品交付给相关的干系人。
-
敏捷式开发
敏捷式开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷式开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
软件工程中常用工具
-
WBS
工作分解结构(Work Breakdown Structure,简称WBS)跟因数分解是一个原理,就是把一个项目,按一定的原则分解,项目分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的日常活动中,直到分解不下去为止。
即:项目→任务→工作→日常活动
WBS总是处于计划过程的中心,也是制定进度计划、资源需求、成本预算、风险管理计划和采购计划等的重要基础。WBS同时也是控制项目变更的重要基础。项目范围是由WBS定义的,所以WBS也是一个项目的综合工具。 -
DFD
数据流图(Data Flow Diagram)简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
-
甘特图
甘特图(Gantt chart)又称为横道图、条状图(Bar chart)。其通过条状图来显示项目,进度,和其他时间相关的系统进展的内在关系随着时间进展的情况。一般情况下,WBS会结合甘特图,这样可以更有效的管理项目的各个task的进度。
-
时序图
时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等。
总结
希望大家通过这篇文章,大概知道一下有这么一个工具或者模型。以便在他人提及这些名词时能有一个概念。同时也为各位想走软件管理者的学员做一个入门介绍。