1、什么是软件工程
软件工程是一门研究 用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。
2、软件工程基本原理
确保软件产品质量和开发效率。
(1)用分阶段的生命周期计划严格管理
(2) 坚持进行阶段评审。
(3)实现严格的产品控制。 包括需求变更,文档,代码。
(4)采用现代程序设计技术
(5)结果应能清楚的审查。
(6)开发小组人员少而精。
(7)勇于承担责任,错误,不断改进软件工程。
3、软件生存周期
(1) 可行性分析与项目开发计划
参加人员:用户,项目负责人,系统分析师。
输出:可行性分析报告和项目开发计划。
(2) 需求分析
参与人员:用户,项目负责人,系统分析师。
输出:软件需求说明书。
(3) 概要设计
参与人员:系统分析师,软件设计师。
输出:概要设计说明书,数据库设计说明书。
(4) 详细设计
参与人员:软件设计师,程序员。
输出:详细设计文档。
(5) 编码
输出:源程序清单。
(6) 测试
参与人员:另一个部门或单位的软件设计师或系统分析师。
输出:软件测试计划,测试用例,软件测试报告。
(7)维护
4、软件开发模型
准确说是软件过程模型,是软件开发全部过程,活动和任务的结构框架。
4.1 瀑布模型
4.2 原型模型
4.3 增量模型
4.4 螺旋模型
4.5 喷泉模型
4.6 极限编程
原则:快速反馈,简单性假设,逐步修改,提倡更改,优质工作。
极限编程(Extreme Programming,简称XP)是敏捷软件开发方法的代表。
体现:
(1)沟通(Communication):即追求有效的沟通。XP强调项目开发人员、设计人员、客户之间等有效地、及时地沟通,确保各种信息的畅通。
(2)简单(Simplicity):即实现最简单的可行方案。XP认为应该尽量保持代码的简单,只要能够满足工作需要就行,这样有利于代码的重构和优化。
(3)反馈(Feedback):即快速有效的反馈。要求不断对当前系统状态进行反馈,通过反馈,达到迅速沟通、编码、测试、发布的目的。
(4)勇气(Courage):即勇于放弃和重构。对于用户的反馈,XP程序员要勇于对自己的代码进行修改,即使有些修改可能会使得原来已经通过的测试又出现错误,但是经过团队的共同攻关,最终必然会取得满意的效果。
最佳实践:快速指定计划,随着细节的不断变化而完善。小型发布(早交付)。简单设计(只考虑当前的需求)。测试先行。
持续集成(经常发版),每周工作40个小时。
5、软件测试
测试的目的:以最少的人力和时间发现潜在的各种错误和缺陷。
测试过程:(1)制定测试计划。(2)编制测试大纲。(3)设计和生成测试用例。(4)测试。(5)生成测试报告。
测试步骤:单元测试,集成测试,确认测试,系统测试。
单元测试:
集成测试:自顶向下集成测试,自底向上集成测试。回归测试,冒烟测试。
确认测试:α测试,β测试。
系统测试:恢复测试,安全性测试,压力测试,性能测试,部署测试(视情况而定)。
6、项目管理
甘特图:
PERT(计划评审技术,工程网格图)图:
ES = Earliest Start time (最早开始时间)
EF = Earliest Finish time(最早结束时间)
LS = Latest Start time(最晚开始时间)
LF = Latest Finish time(最晚结束时间)
TF = (总浮动时间,总时差)
FF = (自由浮动时间,自由时差)
其他图表推荐:https://zhuanlan.zhihu.com/p/142318015
7、风险管理
特性:不确定性和损失。
管理:风险识别 ,风险预测,风险评估,风险控制。
8、软件质量
要求:必须满足用户规定的要求。 遵循规定标准所定义的一系列开发准则。满足隐含的需求(代码好理解,好维护,好扩展)
9、软件度量
软件度量是对软件开发项目、过程及其产品进行数据定义、收集以及分析的持续性定量化过程,目的在于对此加以理解、预测、评估、控制和改善。没有软件度量,就不能从软件开发的暗箱中跳将出来。通过软件度量可以改进软件开发过程,促进项目成功,开发高质量的软件产品。
维度:
(1) 项目度量 : 规模,成本,满意度
(2) 产品度量:质量
(3) 过程度量:管理,流程,内容
10、软件工具与软件开发环境
目的:以低成本,高效率的方式辅助软件的开发。