概论和软件过程

来源:互联网 发布:网眼计算机监控软件 编辑:程序博客网 时间:2024/04/29 09:43
1.1概论
1.软件工程的概念
(1968年NATO委员会在德国首次提出)为了经济的获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列工程化原则
IEEE)将系统性的、规范化的、可定量的方法应用于软件开发、运行和维护,即将工程化应用到软件上。
(国务院学位委员会)应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度实现满足用户要求的软件产品的定义、开发、发布和维护工程,或以之为研究对象的科学。
(总结)范围:软件开发过程(设计、开发、运行、维护)、软件开发中应遵循的原则和管理技术、软件开发中所采用的技术和工具
              目标:高质量、按时交付、控制成本、满足用户需求
2.工程化细想
分治、折中、复用、演化
(1)分而治之
将复杂问题分解为若干可独立解决的简单子问题,并独立求解,降低复杂性,然后在把各个子问题的解综合起来,形成最初复杂问题的解。
(2)折中trade-off
通过折中做出合理的取舍,找到使双方满意的点
(3)复用Reuse
直接使用已有的软构件,即可组装成新的系统。即可提高开发效率,也可改善新开发过程中带来的质量问题。
(4)演化
软件系统在其生命周期中面临的各种变化
核心问题:在软件初期要充分考虑可修改性、可维护性、可拓展性
3.软件工程的内容
工具、方法、过程、质量关注点
1.2核心概念和思想
1.软件工程的本质
不同抽象层次之间的映射与转换
概念映射:问题空间的概念与解空间的模型化概念之间的映射。
业务逻辑映射:问题空间的处理逻辑与解空间处理逻辑之间的映射
解决一下问题:
需要设置哪些抽象层次?--单步映射?多步映射?几步?
每一抽象层次的概念、术语与表达式--公式?图形?文字?
相邻的两个抽象层次之间如何进行映射--需要遵循哪些途径和原则?
2.不同抽象层次之间的映射过程
需求分析:建立抽象模型,产生需求规约。现实空间的需求->需求规约
软件设计:定义了实现需求规约所需的系统内部结构与行为,产生设计规约。需求规约->设计规约
实现:  设计规约->代码
验证/确认:  一种评估性活动,确定一个阶段产品是否达到前阶段确立的需求,或确认开发软件与需求是否一致。
3.软件工程所关注的对象
产品:各个抽象层次的产出物
过程:在各个抽象层次之间进行映射与转换
产品与过程二相性                            
4.功能性需求
软件所实现的功能达到它的设计规范和满足用户需求的程度。
完备性、正确性、健壮性(容错能力、恢复能力)、可靠性
5.非功能性需求
系统能够完成所期望的工作的性能与质量
效率、可用性、可维护性、可移植性、清晰性、安全性、兼容性、经济型、商业质量
2.1软件过程
1.软件过程
一个为建造高质量软件所需要完成的活动、动作和任务的框架。
软件过程定义一下内容:人员与分工、所执行的活动、活动的细节和步骤
软件过程通过以下方式组织和管理软件生命周期:定义软件生产过程中的活动、定义这些活动的顺序及其关系
目的:标准化(可模仿)、可预见性(降低风险)、提高开发效率、得到高质量产品、提升制定时间和预算计划的能力
2.软件过程框架
沟通、策划、建模、构建、部署
2.2典型软件过程模型
1.瀑布模型Waterfall Model
特点:需求最为重要,假设需求是稳定的。以文档为中心,文档是连接各阶段的关键。
优点:规范、易操作
缺点:过于理想化
2.增量过程模型Incremental process model
初始需求不明确
(1)增量模型
使用方法:每一个增量是由多种相互作用的模块所形成的提供功能的代码片段构成,都提交一个可以操作的产品,可供用户评估。第一个增量往往是核心产品,但缺少附加性。
本质:以迭代的方式运用瀑布模型
优点:在时间要求较高的情况下交付产品(交付满足客户需求的一个子集的可运行产品),提高对用户需求的响应,人员分配灵活,逐步增加产品功能可以使用户有较充裕的时间来学习和适应新产品,可规避风险。
困难:附加增量并入不能破坏原来已经构造好的东西,加入新增量时应简单、方便,协调个增量之间的关系。
(2)快速应用开发(RAD)模型
短开发周期(60~90天),通过基于构建的构建方法。多个团队并行进行开发
优点:充分利用企业已有资产进行项目开发,提高软件交付速度
问题:需要大量人力资源,系统应被合理模块化,短时间为急速完成整个系统做好准备。如果需求是高性能,并且需要通过调整构建接口的方式来提高性能,不能采用RAD。
3.演化过程模型(Evolutionary model)
本质:循环、反复、不断调整当前系统以适应需求变化
(1)快速原型法
实验性开发,客户提出了软件的一些基本功能,但是没有详细定义其他需求,或者开发人员对于一些技术的使用不确定。
Throwaway prototyping(抛弃式原型)
Evolutionary prototyping(演化式模型)
问题:开发者没有考虑整体软件的质量和长期的可维护性,系统结构较差。用户可能混淆原型系统与最终系统。
(2)螺旋模型
结合了快速原型方法的迭代性质和瀑布模型的系统性和可控性。
制定计划、风险分析、实施工程、客户评估
优点:开发过程中及时识别和分析风险,并采取适当措施以消除或减少风险来的危害。是一种风险驱动型的过程模型。
4.开源过程模型(Open source)
5.统一过程模型(Rational Unified Process,RUP)
面向对象的软件开发方法论
统一软件过程(UP)是源于UML作者的软件开发过程。
四个技术阶段:起始、细化、构建、转换与交付
6个过程工作流:业务建模、需求、分析设计、实现、测试、部署
3个支持工作流:配置和变更管理、项目管理、环境
适用范围:大规模软件开发。可裁剪适应小规模的软件开发过程
6.敏捷过程模型(Agile Progress)
目标:快速、增量的发布软件
遵循原则:小步快跑,及时反馈
    不强调文档,强调可运行的软件片段;开发者与客户频繁沟通;快速开发、快速反馈、快速修改;连续不断的短周期迭代。
典型:极限编程(XP,eXtreme Programming)、Scrum、
7.其他过程模型(Other models)
(1)形式化过程(Formal method model)
太过理想化,仅理论研究
(2)软件复用过程(Component-based reuse)
过程:需求分析、体系结构设计、构建获取、构建修改与测试;构件组装,集成测试
0 0