P1_C1-3:系统分析与设计概要
SE(软件工程)
软件工程的概念在导论这门课介绍的比较清楚。这个地方,我们回想这几个概念,有个自己的理解就好:
- 理解软件工程
- 为什么学软工?
- 软工的知识体系
- 若干重要概念
- 软工的演变与趋势
OOAD
阅读书上第1章
几个课外的概念
- software crisis:
- is a term used in the early days of computing science for the difficulty of writing useful and efficient computer programs in the required time
- Constructive Cost Model(COCOMO):
- an algorithmic software cost estimation model developed by Barry W. Boehm. The model uses a basic regression formula with parameters that are derived from historical project data and current as well as future project characteristics.
- 必须要了解software engineering body of knowledge中本课涉及的KA(knowledge areas)
- software requirements, software design, software construction,software development process, software engineering models and methods
- 必须了解三种开发生命周期的特点
- Waterfall development: 试图在编程之前详细定义所有或大部分需求
- 优势1: 定义了软件开发基本流程,创意阶段描述问题、市场、关键技术等,分析阶段调查问题与需求
- 劣势1: 人力资源问题,知识技能需求不同,人员数量要求不同
- 劣势2: 容错问题能力,再后期发现需求问题,工作量难接受
- 劣势3: 前后依赖问题,前面需求模糊,后面工作无法开展
- Iterative and incremental developmen:允许在不完整的工作、不完美的知识储备下开始
- 优势1: 逐步趋向稳定
- 优势2: 有效管理需求变化
- 优势3: 持续集成
- 优势4: 尽早接触整个系统
- 优势5: 在线风险评估
- Agile development:
- 软件企业的评价指标Capabilty Maturity Model Integration(CMMI)中的5个等级
- Initial: 无序,自发生产模式
- Managed: 建立了基本的项目管理,制定了必要的过程纪律
- Defined:将软件管理和工程过程文档化、标准化
- Quantitatively Managed: 定量理解与控制, 定量预测性能
- Optimizing:工程量化反馈,不断改进
书本基本概念
- Analysis:
- 对问题和需求的调查, 在问题域中发现关键的概念类, “概念”
- Design
- 满足需求的概念上的一个解决方案,将概念类映射到软件类,在问题域外发现实现所需要的类设计框架等, “协作”
UML, 一种可视化语言
- 三种应用UML的方式:
- 草图:普通的使用方式, agile modeling 强调的
- 蓝图:逆向工程-根据源码生成UML类图、包图, 前向工程-根据UML图生成源码
- 编程语言: 自动生成可执行代码
- 三种应用UML的perspective
- conceptual perspective:描述现实世界
- Specification perspective(少用): 描述软件中的实现,但是不说明技术
- implementation perspective: 特定技术(如C++)中的软件实现
- 不同perspective 中的类的概念
- conceptual class: 真实世界中的概念
- software class:过程或方法中,表示软件实现的类
- implementation class: 特定语言中的类
Iterative, evolutionary, and agile
阅读书上第2章
Unified Process
- UP
- the process is scalable, effective, improves productivity, Iterative and incremental approach 允许从不完整的工作和不完备的知识开始
- UP workflow:定义了一系列要执行的活动:
- Business Modeling:定义问题等,建立用力模型
- Requirements Analysis: 定义领域模型等
- Design: 建立设计模型,设计用例在物理上的实现
- Implementation: 编码
- Test and Integration
- Use Case Driven
- 意味着团队从编程和测试中收集发现的需求,应用use case
- Architecture Centric
- 软件系统的整体结构、结构元素、结构元素之间的协作
Iterative and Evolutionary
- Agile Methods and Attitude
- 优先级最高的是,通过早期和持续交付有价值的软件来满足客户
- 欢迎变更需求,即使在开发后期
- 等等等等
- Agile Modeling
- 采用敏捷方法不是意味着不建模
- 建模的目的主要是为了理解和沟通,不是为了交文档
- 不要对所有软件都建模
- 所有模型都可能不准确,最终代码和设计会与模型有差异
- Worker参与系统的开发,Actor是使用系统的人,
- stakeholder包括了workers和actors
- Artifacts(制品),包括用例模型、领域模型、源码等等
- Activities 表示的是工作流中要完成的任务,包括:迭代计划、找到用例和actors、执行迭代测试
越努力越幸运~