1.1 软件
概念:软件= 程序(提供功能) + 数据(处理信息) + 文档(需求、操作、配置等)
特性:
* 逻辑实体(抽象性)
* 没有明显的制造过程
* 不会磨损、老化,但会退化(修改优化引入bug)
* 对硬件和环境有依赖
* 手工,生产效率低
* 复杂
* 成本高
种类:
* 系统软件
* 应用软件
* 工具软件
1.2 软件危机
概念:软件可靠性得不到保证,几乎不存在没有错误的软件。
原因:需求不明确、缺乏正确的引导理论、开发规模大、复杂度越来越高
现象:
* 开发成本和进度估计不准确
* 用户对软件不满意
* 软件质量不可靠
* 不可维护,或维护难度大
* 缺乏文档资料
* 成本高
消除:有成熟的理论作指导,各类人员协同配合,吸取经验和教训,研究更好的技术和方法
1.3 软件工程
概念:用 系统化、规范化、数量化 等 工程原则和方法进行 软件开发和维护 的学科
三要素:方法、工具、过程
-- 方法:“如何做”,如项目计划与估算、需求分析、系统架构设计、算法设计、编码、测试和维护等
-- 工具:自动或半自动化环境支撑
-- 过程:将 方法和工具 综合起来以达到 合理、及时地 进行软件开发
基本原理:
* 分阶段计划的严格管理:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验收计划、运行维护计划
* 坚持阶段评审
* 严格的产品控制:修改难免,须有严格的管理制度和措施
* 现代程序设计技术(结构化、面向对象)
* 结果审查
* 开发人员少而精
* 不断改进工程实践:学习新技术和方法,总结经验、改进方法等
软件工程的技术复审和管理复审:
技术复审:从技术角度确保质量、降低软件成本(今早发现问题)
管理复审:从管理角度对成本、进度、经费等进行复审,确保项目正常地开展
软件生命周期
概念:经历孕育、诞生、成长、成熟、衰亡等阶段
包括:可行性分析与开发项目计划、需求分析、设计、编码、测试、维护等阶段
阶段划分意义:
* 各阶段任务相互独立,降低困难程度
* 各阶段严格管控,保证软件质量,提高可维护性
模型:
* 瀑布模型:上一阶段完成并得到认可后才开始进行下一阶段,以文档驱动
* 迭代模型:将整体目标划分成一些更易于完成和达到的阶段性小目标
* 快速原型模型:短时间内为满足客户迫切的需求,实现部分功能,根据反馈确定真正的需求
* 增量模型:瀑布模型与快速原型模型的结合
* 螺旋模型:在每个阶段增加了风险分析的快速原型模型
敏捷开发:
目标:尽可能早地、持续地交付有价值的软件(变、早、快)
强调:
* 个人及互动胜于过程和工具
* 可用的软件胜于详尽的文档
* 客户协作胜于合同谈判
* 响应变化胜于恪守计划
原则:
* 尽早、持续交付有价值的软件
* 不拒绝需求变更
* 经常交付
* 业务人员和开发人员最好天天在一起工作
* 激励机制(提供所需环境和支持、信任)
* 面对面交谈
* 可工作软件是首要度量标准
* 提倡可持续的开发速度
* 关注优秀的技能和好的设计,增强敏捷能力
* 尽量简化所要做的工作
* 好的架构、需求和设计
* 复盘(项目、个人)
敏捷方法:XP、Scrum、Crystal Methods、FDD、ASD、DSDM、轻量级RUP
1.4 软件开发主流技术
主流软件开发技术:B/S与C/S结构、软件构件、中间件、软件重用等
软件体系结构大体分为:主机终端模式(逐渐被淘汰)、文件服务器模式(仅适用小规模局域网)、C/S模式和B/S模式
三层C/S结构:服务器--中间件--客户机,核心利用中间件将应用层分为表示层、业务逻辑层和数据存储层
-- 客户端:管理用户接口、从用户接受数据、处理应用逻辑、产生数据库请求、向服务器发送数据库请求以及从服务器接受结果并进行处理
-- 服务器:
按硬件性能分:大型、小型、工作站服务器和PC机服务器
功能:从客户机接收数据请求、处理数据请求、格式化结果并传送给客户机、执行完整性检查、提供并行访问控制、事务处理失败后执行事务恢复、优化查询和更新处理
-- 中间件:保证网络中各部件(软件和硬件)之间透明地连接,即隐藏网络部件的异构性。网络透明性、服务器透明性、语言透明性
B/S结构:浏览器/服务器,好处:运行维护简单、能实现不同人员,从不同地点,以不同接入方式访问和操作共同的数据;缺点:对企业外网环境依赖性太强
1.5 项目管理和配置管理
软件项目管理:包括软件度量、项目估算、进度控制(资源分配、风险管理、监管与控制)、人员组织、配置管理、项目计划等
本质:对时间、质量和成本的管理
软件配置管理(SCM):对产品标识、存储和控制,以维护其完整性、可追溯性及正确性
-- 包括:配置项识别、工作空间管理、版本控制、变更控制、状态报告、配置审计等,以版本控制为核心和关键
原文:https://www.cnblogs.com/testing2019/p/10669665.html