什么是软件?
软件=程序+数据+文档
软件有什么特点?
- 软件是一种逻辑实体,具有抽象性
- 软件的生产与硬件的制造不同
- 软件在运行过程中不会磨损
软件危机的表现与原因?
总体来说:进度、成本、质量
具体:1.开发出来的软件产品不能满足用户的需求,即产品的特性和功能与需求不符。
原因:开发人员对用户的需求理解存在差异。
2.硬件越来越便宜,软件代价过高。
3.软件质量难以得到保证。
4.难以准确预估软件开发、维护的费用、开发周期,预算经常超支。
5.难以控制开发风险,开发速度赶不上市场变化
6.软件产品维护困难,集成系统更加难
7.软件文档不完备
软件工程的概念什么时候提出的?
1968年
软件工程的三要素?
过程、方法、工具
软件工程的目标和原则
目标:
1.达到要求的软件功能
2.取得较好的软件性能
3.开发出高质量的软件
4.付出较低的开发成本
5.需要较低的维护费用
6.能按时完成开发工作,及时交付使用。
原则:
1.用分阶段的生命周期计划进行严格的管理
2.坚持进行阶段评审
3.实行严格的产品控制
4.采用现代程序设计
5.软件工程结果应该能被清楚地审查
6.承认不断改进软件工程实践的必要性
7.开发小组的人员应该少而精
软件生命周期的六个阶段?
1.可行性研究
2.需求分析
3.软件设计
4.编码
5.软件测试
6.软件维护
各种软件模型的应用场景和特点
名称 | 描述 | 特点 | 适用项目 |
---|---|---|---|
瀑布模型 | 是一种线性开发模型,具有不可以回溯性 ;前一阶段的输出是后一阶段的输入,错误代价很高 | 1.不可回溯2.错误代价高3.模型简单,容易执行4.缺点,无法适应变更 | 1.需求不发生变化或很少变化2.开发人员一次性获知全部需求3.开发人员具有丰富的经验4.软件项目风险很低 |
快速原型模型 | 为了减少沟通的上的失误,此法就是快速开发一个课运行的软件模型以便理解和澄清问题,达到双方共识 | 1.快速的对用户的反馈和变更做出响应2.低成本、快速地确认需求 | 预先不能确定需求的软件系统开发 |
增量模型 | 首先实现提供基本核心功能的增量组件,创建一个具备基本功能的子系统,然后在进行完善 | 1.待开发系统模块化,可以分批交付软件产品2.一组件为单位进行开发降低了风险3.开发顺序灵活 | 1.软件产品可以分批交付2.待开发系统可以模块化3.软件开发人员对该领域不熟悉,难以一次性开发4.项目管理人员把我全局的水平比较高 |
螺旋模型 | 将瀑布模型和快速模型相结合并且加入了风险控制 | 将开发过程分为4个阶段,制定计划,风险分析,实施工程和客户评审 | 大型的有风险的软件开发 |
喷泉模型 | 面向对象的开发 | 课迭代性,无间隙性质 | 面向对象,可以一个系统多用 |
统一软件开发过程模型 | 用UML统一建模语言的一种面向对象软件开发模型,集大成者 | 迭代思想 | 大型的可迭代的,人员要求高的 |
敏捷模型 | 快与人 | 4个价值观“1.个体与交互大于过程和工具2.可运行软件高于详细文档3.与客户协作高于合同4.对变更及时响应高于遵循计划;4个特点:团队交流2.过程简洁3.用户反馈4.对所作决定的信心和人性化的特征 | |
极限模型 | 实践性较强的规范化的软件开发方法 | 强调团队合作、成员少于10人、需求模糊容易变更、一个办公室;;4个价值观:交流、简单、反馈、勇气;;有12个核心实践 |
可行性研究报告内容?
主要技术可行性研究、社会可行性研究、经济可行性研究
需求分析的原则
需求分析工作应该贯穿整个系统的
需求分析是一个可迭代的过程
需求分析的步骤
1.获取需求
2.分析建模
3.需求描述
4.需求验证
结构化需求分析方法
一种考虑数据和处理的需求的分析方法被称作结构化分析方法 简称 SA
基本思想是“分解”和“抽象”
数据字典
数据字典包含四个类目:数据流、数据存储、数据项和数据加工
软件设计的意义和目标
1.设计必须实现所有包含在分析模型中的明确需求
2.对于程序员、测试和维护人员设计是可读的、可理解的
3.设计必须提供软件的全貌,说明功能、性能和行为领域
软件设计的原则
1.模块化
模块化过程注意的是
模块的规模要适中
提高模块的独立行,降低耦合程度
(耦合度是对模块之间互相关连的度量,耦合度越低相互的影响就越小)
低耦合,高独立
低耦合 | (无直接耦合,数据耦合,标记耦合) |
---|---|
中耦合 | (控制耦合) |
较强耦合 | (外部耦、公共耦合) |
强耦合 | (内容耦合) |
高内聚,高独立
低内聚 | (偶然内聚,逻辑内聚,时间内聚) |
---|---|
中内聚 | (过程内聚、通信内聚) |
强内聚 | (顺序内聚、功能内聚) |
软件设计的分类
软件设计可一从活动任务观点和工程管理观点分别进行分类
活动分析:
- 数据设计
- 体系结构设计
- 接口设计