软件:1.指令的集合,通过执行这些指令可以满足预期的特性、动能和性能需求;2.数据结构,使得程序可以合理利用信息3.软件描述信息,它以硬拷贝和虚拟形式存在,用来描绘程序的操作和使用
软件的特点:1.软件是设计开发的,而不是传统意义上生产制造的。2.软件不会“磨损”,但会退化。3.大多数软件还是用户定制的。
年代久远的旧的系统被称为遗留软件
软件工程:将系统化的、规范化的、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。
软件工程的三要素:工具,方法,过程
软件工程的基础是过程。软件过程将各个技术层次结合在一起,使得合理及时地开发计算机软件成为可能。
软件工程方法为构建软件提供技术上的解决方法。
软件工程工具为过程和方法提供自动化或半自动化的支持。
支持软件工程的根基在于质量关注点。
软件为什么要更新和迭代?
1.软件必须适应新的计算环境或技术的需要。
2.必须增强软件来实现新的业务需求。
3.软件必须扩展到与其他更现代的系统或数据库进行互操作。
4.必须重新构建软件,使其在网络环境中可行
软件过程:是工作产品构建时所执行的一系列获得、动作和任务的集合。活动主要实现宽泛的目标。动作包含主要工作产品生产过程中的一系列任务。任务关注小而明确的目标,能够产生实际产品。
过程框架五个活动:沟通,策划,建模,构建,部署
沟通:包含了与客户(和其他共利益者)之间大量的交流和协作,还包括需求获取以及其他相关活动。
策划:指为后续的软件工程工作制定计划。它描述了需要执行的技术任务、可能的风险、资源需求、工作产品和工作进度计划。
建模:包括创建模型和设计两方面。创建模型有助于客户和开发人员更好地理解软件需求;设计可以实现需求。
构建:包括编码(手写或自动生成)和测试。
部署:软件(全部或者完成的部分)交付到用户,用户对其进行评测并给出反馈意见。
随着项目开展,框架活动可以迭代应用,每次迭代应用都会产生软件增量,每个软件增量实现了部分的软件特性和功能。随着每一次增量的产生,软件都将逐渐完善。
普适性活动:软件项目跟踪和控制。风险管理。软件质量保证。技术评审。测量。软件配置管理。可复用性管理。工作产品的准备和生产。
实践的精髓:1.理解问题(沟通和分析)2.策划解决方案(建模和软件设计)3.实施计划(代码实现)4.检查结果(测试和质量保证)
通用原则:存在价值、保持简洁、保持愿景、关注使用者、面向未来、提前计划复用、认真思考
沟通包含6个不同动作:起始、需求获取、需求细化、协商、规格说明、确认。
四种过程流:线性过程流;迭代过程流;演化过程流;并行过程流;
瀑布模型
优:①容易理解和计划②适用于充分了解的小型项目③分析和测试是顺序线性的
缺:②不能很好的适应变化②测试在过程的后期进行③客户确认在最后阶段
原型模型
优:①变更需求对后续设计影响较小②客户很早并频繁地参与其中③对小型项目来说效果好④产品失败的可能性低
缺:①客户的参与可能会造成进度延误②“提交”一个原型,可能造成初步完成的假象③原型被抛弃导致工作白干④很难计划和管理
螺旋模型
优:①有持续不断的客户参与②开发风险得到控制③适用于大型复杂项目④适用于可扩展的产品
缺:①风险分析失效可能导致项目失败②项目可能难于管理③需要一个专家开发团队
统一过程模型(UP)
优:①重视质量文档②有持续不断的客户参与③适合需求变更的情况④对维护项目非常有效
缺:①用例并不总是精确的②具有复杂的软件增量集成③阶段的重叠可能会带来问题④需要一个专家开发团队
UP统一过程的五个阶段:起始阶段;细化阶段;构建阶段;转换阶段;生产阶段
敏捷方法是为了克服传统软件工程中认识和实践的弱点形成的
普遍存在的变更是敏捷的基本动力
敏捷原则
1.我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
2.欢迎需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
3.经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
4.业务人员和开发人员必须相互合作,项目中的每一天都不例外。
5.激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
6.不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
7.可工作的软件是进度的首要度量标准。
8.敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
9.坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
10.以简洁为本,它是极力减少不必要工作量的艺术。
11.最好的架构、需求和设计出自自组织团队。
12.团队定期地反思如何能提高成效,并依此调整自身的举止表现。
需求工程:是指致力于不断理解需求的大量任务和技术。
七项任务:起始、获取、细化、协商、规格说明、确认和管理。
起始:与所有利益相关者与软件团队之间建立沟通
获取:让利益相关者参与进来并且鼓励他们如实的分享他们的目标
细化:开发一个精确的需求模型,用以说明软件的功能、特征和信息的各个方面
协商:协商解决冲突获取双赢
规格说明:开发“标准模板”并将之用于规格说明,将促进以一致的、更易于理解的方式来表示需求。
确认:对需求工程的工作产品进行质量评估
需求管理:是帮助项目组在项目进程中标识、控制和跟踪需求以及需求变更的一组活动
需求获取将问题求解、细化、协商和规格说明等元素结合在一起。
设计概念包括:抽象,体系结构,模式,关注点分离,模块化,信息隐蔽,功能独立。求精,方面,重构,面向对象,设计类(完整性与充分性,原始性,高内聚性,低耦合性),依赖倒置,测试设计
四种设计模型:构件级设计;接口设计;体系结构设计;数据/类设计;
软件体系结构:程序或计算系统的软件结构是指系统的一个或多个结构,它包括软件构建,构建的外部可见属性以及他们之间的相互关系
体系结构的风格包括:(1)完成系统需要的某种功能的一组构件;(2)能使构件间实现“通信,合作和协调”的一组连接件(3)定义构件如何集成为系统的约束(4)语义模型,能使设计者通过分析系统组成成分的已知属性来理解西戎的整体性质
体系结构风格的分类:以数据为中心的体系结构;数据流体系结构;调用和返回体系结构;面向对象体系结构;层次体系结构
构件:系统中模块化的,可部署的和可替换的部件,该部件封装了实现对外提供一组接口
构件级基本设计原则:开闭原则;Liskov替换原则;依赖倒置原则;接口分离原则;发布复用等价性原则;共同封装原则,共同复用原则
内聚性:功能内聚;分层内聚;通信内聚
耦合性:内容耦合;公共耦合;外部耦合;控制耦合(由强到弱)