雪梨作业 55 + 平时 15 + 期末 30 =100
期末作业是小组单位,放在GitHub中。
本课程别名:软件过程
# 一、软件工程学科 概览
软件工程学价值:促进软件项目的成功
# 软件概念
软件是计算机系统中与硬件相互依存的另一部分。
包括程序、数据及其相关文档的完整集合。
(1)能够完成预定功能和性能的可执行指令(program)
(2)使得程序能够适当地操作信息的数据结构(data)
(3)描述程序的操作和使用的文档(document)
# 软件特点
- 软件是一种 逻辑实体,而不是具体的物理实体。
- 软件的生产与硬件不同。(更多的依靠大脑)
- 存在 退化问题,开发人员必须维护软件。
- 大多数软件是自定的,而不是构件组装。
- 本身复杂 又 成本昂贵 。
# 软件危机
定义:软件在开发和维护过程中遇到的一系列严重问题,包含两层含义:
如何开发软件 与 如何维护软件 。
# 危机的表现
- 软件 开发的进度难以控制 ,经费超预算、完成期限拖延……
- 软件 需求在开发初期不明确,导致矛盾在后期集中暴露,从而对整个开发过程带来灾难性的后果。
- 软件文档资料不完整、不合格。由于缺乏完整规范的资料,加之软件测试不充分,从而造成软件质量低下。
- 软件的 可维护性差,程序错误难以改正,程序不能适应硬件环境的改变。
- 软件 价格昂贵,软件成本在计算机系统总成本中所占的比例逐年上升。
# 危机的原因
- 客户对软件需求的描述不精确,可能有遗漏、有二义性、有错误,在软件开发过程中,用户提出修改软件功能、界面、支撑环境等方面的要求。
- 软件开发人员对用户需求的理解与用户的本来愿望有差异。不能有效地、独立自主地处理大型软件的全部关系和各个分支,因此容易产生疏漏和错误
- 管理人员、软件开发人员等各类人员的信息交流不及时、不准确、有时还会产生误解。
- 缺乏有力的方法和工具方面的支持,过分地依靠程序人员在软件开发过程中的技巧和创造性,加剧软件产品的个性化。
# 解决危机
软件工程学(软件工程)的存在价值:促进软件项目成功
# 软件工程定义
是研究和应用如何以 系统化的、规范的、可度量的方法去开发、运行和维护软件,即把工程化应用到软件上。
历史与发展趋势
•1940s,第一台数字计算机诞生、软件、硬件概念诞生;
•1968年,“软件工程”这个术语第一次使用,作为一个会议标题,该项目由北约(NATO)赞助;该会议确认了要用定义最佳实践的方式帮助改善软件开发;
•1972年,大卫·帕纳斯提出模块化和隐藏信息的关键概念,以帮助程序员应付日益增加软件系统的复杂性;
•1981年,软件工程经济学诞生,Barry W. Boehm在他的书中提出了成本模型COCOMO;
•2000年以后,随着软件需求更多的出现在更小的组织,业界呼唤更廉价的软件解决方案,这导致了更多轻量的软件方法纷纷诞生,Agile就产生于这个背景下;
•2012年,纪律敏捷交付框架(Disciplined Agile Delivery Framework)发布,这是一个混合框架,采用和扩展了Unified Process、 Scrum、 XP和其他软件过程;
研究的目标
• 软件开发成本较低;
• 软件功能能够满足用户的需求;
• 软件性能较好;
• 软件可靠性高;
• 软件易于使用、维护和移植;
• 能按时完成开发任务,并及时交付使用。
低成本,高需求,高性能,易用性,可靠(想的倒是挺美)
采用先进的软件工程方法,使质量、成本和生产率三者之间的关系达到最优的平衡状态。
软件生存周期:
指软件产品从考虑其概念开始到该软件产品交付使用,直至最终退役为止的整个过程。一般包括计划、分析、设计、实现、测试、集成、交付、维护等阶段。
立项考虑 到 停服放弃
# 软件生存周期的各个阶段主要任务(重点)
1.计划阶段
确定待开发系统的总体目标和范围。
研究系统的可行性和可能的解决方案,对资源、成本及进度进行合理的估算。
2.分析阶段(重点)
分析、整理和提炼所收集到的用户需求,建立完整的分析模型,将其编写成软件需求规格说明和初步的用户手册。
3.设计阶段(总体设计和详细设计)(重点)
设计阶段的目标是决定软件怎么做。
软件设计主要集中于软件体系结构、数据结构、用户界面和算法等方面。
4.实现阶段(编码)
实现阶段是将所设计的各个模块编写成计算机可接受的程序代码。
5.测试阶段
设计测试用例,对软件进行测试,发现错误,进行改正。
6.运行和维护阶段
应当在软件的设计和实现阶段充分考虑软件的可维护性。
维护阶段需要测试是否正确地实现了所要求的修改,并保证在产品的修改过程中,没有做其他无关的改动。
维护常常是软件生命周期中最具挑战性的一个阶段,其费用是相当昂贵的。
二、IT行业人才格局及成长路线
三、软件过程—软件工程的核心组成部分
软件工程三要素(重点)(必背)
考试重点
采取某些方法去实施过程。
UML:统一建模语言
目的:提高软件的成功率
依照某些规律,采用某些方法
四个软件过程(后两个重点)
瀑布模型 WaterFall Model
- 首先联系客户,确定客户需求与目标
- 研究要求的可能性,可不可以做,合法,经济支持,功能难度
- 写需求文档
- 概要设计与详细设计
- 编码,测试,运行与维护
RUP 统一软件过程(了解)
了解为主
大体上分四个阶段,是现在比较成熟的方式。
数值看的是图形的面积
RUP四视图,从不同的角度去看项目
最庞大,最规范,最标准,但是成本过高,适合学习,不适合运用。
扩展ICONIX过程(重点)
流程:
- 愿景:获取“老大”的期望
- 业务建模:可以带来很大的业务的提升,发现什么过程可以改进,深受中层领导的喜爱。
- 需求分析:
- 健壮性分析:从需求到设计的过度。
- 关键设计:
- 最终设计:
- 实现:写代码
Scrum敏捷过程(重点)
PO产品负责人/产品经理
迭代会很累
迭代周期建议两周
增量与迭代:👇↓
UML 统一建模语言
用图形来描述业务
设计与来发人员可以拿着这个去交流。
四、本课程的要点说明