1、 什么是软件工程
用工程化的方法来开发软件
工程化:任何生产活动都要按照目标化、规范化、文档化、标准化进行
• 目标化:工程化的目标是使投入产出的效益最大化;
• 规范化:有明确的工作阶段、内容和步骤;
• 文档化:有详细具体的工作规范化文档;
• 标准化:有明确的质量评价标准。
2、软件=程序+数据+文档
软件具有复杂性,一致性,可变性和不可见性的固有的内在特征(这是造成软件开发困难的根本原因)
3、什么是软件危机
在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件工程(学):摆脱软件危机的主要出路
4.高质量的软件:
规范的编码,高质量的设计和有效的测试
5、案例分析步骤:
1) 问题定义——明确要解决的问题
2) 可行性研究——明确做不做
** 用最小的代价在尽可能短的时间内从经济、技术、管理、社会因素等方面论证解决方案的可行性。**
3) 需求分析——明确做什么
对用户的要求进行详细的调研与分析,确定该系统需要实现的功能
4) 概要设计(总体设计)——明确怎么做
根据上一步得到的需求规格说明书,将需求功能进行模块化分
5) 详细设计——明确具体做法
设计出程序的详细规格说明,即详细地设计每个模块,确定实现模块功能所需要的算法和数据结构
6) 编码和单元测试——编码和单元测试
编写出正确的、易理解的、易维护的程序模块。仔细测试编写出的每一个模块。
7) 综合测试——组装/集成测试、验收测试
8) 软件维护——改正性维护、适应性维护、完善性维护和预防性维护
6、过程模型:
1)瀑布模型
又称线性顺序模型、生命周期模型。
强调开发的阶段性、早期计划和需求调查以及产品测试。是一种有效的面向过程的管理模式,但缺乏灵活性。
适合于用户需求明确、完整、无重大变化的软件项目开发
“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点
2)快速原型模型
在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型
֍ 抛弃型(废弃型)
֍ 演化型(追加型)
3)增量模型:在每一个新的发布中逐步增加功能直到构造全部功能。
迭代模型:一开始提交一个完整系统,在后续发布中补充完善各子系统功能。
4)螺旋模型
螺旋模型是一种用于风险较大的大型软件项目开发的过程模型
基本思想是降低风险
5)喷泉模型
以用户需求为动力,以对象作为驱动的模型,主要用于支持面向对象开发过程
7、RUP统一软件开发过程
RUP是基于迭代思想的软件开发模型,可以多次执行各个工作流程。每个周期划分为初始、细化、构造和移交四个阶段,每个阶段围绕着九个核心工作流分别迭代。
RUP是风险驱动的、基于UseCase技术的、以架构为中心的、迭代的、可配置的软件开发流程。RUP是一个流程定义平台,是一个流程框架。
8、敏捷开发过程
敏捷开发过程是容易适应变化并迅速做出调整,在保证质量的前提下做到文档适量适度
以人为核心、循环迭代、响应变化
敏捷的四条基本价值观:
- 个体和交互 胜过 过程和工具
- 可以工作的软件 胜过 面面俱到的文档
- 客户合作 胜过 合同谈判
- 响应变化 胜过 遵循计划
9、敏捷开发方法
一组轻量级开发方法的总称,包含很多具体的开发过程和方法最有影响的两个方法是极限编程(XP)和Scrum开发方法。
Scrum偏项目管理
XP偏编程实践
Sprint:是短距离赛跑的意思,这里面指的是一次迭代,而一次迭代的周期是1个月时间(即4个星期),也就是要把一次迭代的开发内容以最快的速度完成它,这个过程称为 Sprint.
长度一旦确定将保持不变。
1)产品负责人(Product Owner)
主要负责确定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工作成果。
2)流程管理员(Scrum Master)
主要负责整个Scrum流程在项目中的顺利实施和进行,以及清除挡在客户和开发工作之间的沟通障碍,使得客户可以直接驱动开发。
3)开发团队(Scrum Team)
主要负责软件产品在Scrum规定流程下进行开发工作,人数控制在5~10人左右,每个成员可能负责不同的技术方面,但要求每成员必须要有很强的自我管理能力,同时具有一定的表达能力;成员可以采用任何工作方式,只要能达到Sprint(一个冲刺/迭代)的目标。
֍ XP把软件开发过程重新定义为聆听、测试、编码、设计的迭代循环过程。
10、用户故事
特点:独立性、有价值、短小的、可协商、可估算、可测试