PS:实在是记不住那么多东西,所以下面的内容被精简了
软件工程概论
软件工程概念
软件的分类
- 应用软件
满足特定功能的一类软件。 - 支撑软件
软件系统的中间层,支持各类软件的开发。 - 系统软件
最接近计算机硬件的软件,如操作系统,编译器等。
软件的四个特性
复杂性、易变性、不可见性、一致性。
软件危机
软件在开发和维护过程中所遇到的一系列问题。
软件危机的表现
- 程序不能满足用户需求
- 程序缺乏合适的文档
- 程序的可维护性差,不能适应外界的变化
- 程序的性能不够
- 程序在预计时间内不能完成,面临超期危险
- 开发成本比重上升
- 软件在开发生产速率赶不上计算机深入的趋势
为什么会出现软件危机
客观上,软件随着时代的推进变得越来越复杂了。1.传统的软件开发方法已经不再适用了。
主观上,软件开发人员缺乏系统性、工程性的方法论来指导软件开发
1.忽视需求分析,轻视软件维护;2.受到软件神话的错误影响;3. 没有将软件开发和程序编码两个概念区分开来;4.虽然具有程序编码能力,但是缺乏工程性的思维。
软件工程的概念
软件工程是在系统上在经济上的获得能使在机器上高速运行软件所采用的一系列工程化的原则。
范围
软件开发过程
软件开发中应当遵循的原则和管理技术
软件开发中用到的工具和技术
软件工程目标
- 按时交付
- 满足用户需求
- 控制成本
- 保证质量
分类
结构化、面向对象的软件开发方法、面向服务的软件开发方法。
软件工程产生根源
由于计算机应用的不断发展,计算机软件规模和复杂度不断变大,使得软件开发的时间和成本增大;同时个体化的开发方法已经不适应了,软件维护困难,软件神话不再存在,软件危机亟待解决,软件工程应运而生。
软件工程的核心思想
软件工程和本质
实际上是从现实空间用户的需求到计算机空间软件编码的映射与转换。
软件工程作用
通过严格的控制和管理,缩小实际和预期结果的差距,用时间来换取质量。
软件工程的两个映射
- 概念映射:软件从问题空间中的概念到解空间中的抽象出来的模型化概念映射。
- 业务逻辑映射:软件从问题空间的处理逻辑到解空间中的处理逻辑的映射。
软件工程在不同层次上的映射过程
需求分析:现实空间的需求->需求规约
系统设计:需求规约->设计规约
实现:设计归约->代码
验证/确认:需求规约-> 需求规约
关注目标
产品:抽象层次产物
过程:各层之间的映射与转换
产品过程二相性:结合考虑
功能性需求
软件所完成任务的功能满足的设计规范,以及满足用户需求的程度。
完备性、正确性、健壮性、可靠性
非功能性需求
软件完成任务的性能、质量。
效率、安全性、可用性、可移植性、代码是否清晰等等
最佳实践
通过采用某种技术、方法、过程、机制,使得在生产或管理实践中获得最佳的实践效果。
软件工程的核心概念
分而治之、复用、折中、演化、一致性和完备性。
敏捷开发过程
软件过程模型
几种常见过程模型
瀑布模型
增量过程模型
-增量模型
-RAD
演化过程模型
-螺旋模型
-原型模型
其他过程模型
-形式化过程
-基于复用的软件过程
-敏捷过程模型
黑盒模型特点
- 要求在开发前需求就被充分理解
- 与用户的交互仅发生开始和结束,类似于机器制造的过程
- 实际开发中并不是这样。
白盒模型特点
- 通过改进可见性来减少风险
- 在开发过程中,可以持续得到用户的反馈
- 用户可以在中途进行修改,类似于服务的过程
什么是软件过程
软件生命周期所涉及的一系列过程。
内容
人员与分工
所执行的具体活动
活动的具体内容
软件过程的目的
标准化、可预见性、提高开发效率、得到高质量软件、提高制定时间和预算的能力
瀑布模型
优点:追求效率
有利于大型项目中人员的组织管理,有利于软件开发方法和工具的研究,提高软件开发的效率。
缺点:过于理想化
- 客户提出的需求的变动代价太大
- 实际的项目很难按照预期前进
- 客户在一开始也很难给出所有需求
使用范围:
- 开发人员对于需求了解 非常全面,且在开发过程中用户需求不发生变动。
- 开发人员对于软件的应用领域非常了解
- 用户的环境非常稳定
- 用户对于项目的参与度比较低
快速原型模型
优点:
提高和改善用户的参与程度,更好的响应用户需求的变化
缺点:
为尽快完成项目可能未考虑软件完成的质量;
可能混淆原型系统和最终系统;
产生额外的费用;
螺旋式模型
优点:
设计上的灵活性,使得项目可以再任何阶段进行变更;
将大型项目分为很多个段,使得成本计算变得容易;
用户参与每个阶段的开发,提高用户参与度,保证了项目不偏离正确方向;
客户始终掌握软件的最新信息,便于与管理层进行交互。
缺点:
采用螺旋式模型,需要相当好的风险评估经验,不然会陷入风险。
会增加软件开发成本,延迟提交时间
增量模型
优点:
人员分配灵活,如果在项目初期的效果比较好后期可以投入更多人手;
每个阶段提交的是可运行产品的一个子集,客户可以及时看到软件的最新进展,提高信心;
具有较高优先级的部分不最先提交,也就是代表了经过更多次的测试,使得系统开发的整体成功率比较高;
用户在开发过程中学习软件的使用,增加缓冲时间。
缺点:
每个附加增量并入现有的软件时,不能破坏原有软件的结构;
新增量应当简单方便;
开发人员应当协调好各个增量之间的关系;
无法处理需求变更的情况;
RAD模型
优点:
侧重于短周期开发,是瀑布模型的高速变体,通过基于构件的方式进行软件开发;
多个团队并行进行,但启动时间有先有后,先启动的输出作为后启动的输入;
缺点:
需要大量的人力资源创建多个RAD团队;
如果短期内没有解决问题,RAD项目将会失败;
如果RAD不能被模块化将会遇到很多问题;
如果采用了很多新技术,不易采用RAD模型。
敏捷开发过程与方法
敏捷开发的本质
小步快跑,及时反馈,以快速的迭代和增量完成软件开发
敏捷开发中最重要的因素是人,具体要求?
能力
共同的兴趣
相互信任与尊重
合作
决策能力
自我组织能力
解决问题的能力
极限编程XP的核心价值有哪些
反馈、勇气、尊重、沟通、简单
scrum基本过程包括哪些内容
确定完成产品需要解决的任务;
确定当前冲刺需要解决的任务;
冲刺;
每日站会;
scrum工件和活动包括哪些内容
产品列表:根据客户优先级进行排序后的高层需求
Spring Backlog:每个冲刺中包含的任务
增量:最终交给客户的内容