HIT哈工大2019春软件构造笔记Week1

课程简介

个人看法

本门课程是HIT的大二下专业核心课之一,非常牛的一门课。和上学期的计算机系统CS:APP一样硬核,据说能让人一学期拥有万行Java经验。我的任课老师也是非常厉害的王忠杰老师,上学期就有幸选修了他的创新研修课——软件仓库挖掘,当时就被告知这学期将会非常痛苦,尽管非常不想写Java ,但还是得硬着头皮上了。

课程目标与要求

这门课主要是MIT 6.0.31 + CMU 17-214两门课的结合体,我们将要讲述的内容和写的实验基本都是这两门课中的。需要阅读大量英文资料,当然可以同时锻炼英语能力啦

Goals of this Cousre

Understanding both the building blocks and the design principles for construction of software systems

  • 软件构造的质量标准与目标
  • ADT & OOP
  • 可理解性、可维护性、可复用性、健壮性、时空性能
  • 代码重构、高级构造技术

Grading policy

  • 平时成绩:5%
    - 阅读相关书籍和论文,思考教师提出的问题,参与课堂测试和交流讨论
    - 针对教师提出的讨论问题,课后阅读材料,或对实验进展过程遇到的问题和经验教训进行总结思考,以文字形式发表自己的见解,以网上公开博客的形式发表
    - 雨课堂小测
  • 实验:35%
    • 共6个,均为个人完成;
    • 现场检查、提交实验报告/实验代码至CMS/GitHub;
  • 期末考试:60%

Reading materials

Mandatory–MIT Course 6.031: Software Construction http://web.mit.edu/6.031/www/fa18/
MIT的阅读材料有学长的火炬,是秋豪学长的翻译,让我们感谢秋豪学长!https://www.cnblogs.com/liqiuhao/category/1167752.html
Recommanded–CMU 17-214 Principles of Software Construction: Objects,Design, and Concurrency
https://www.cs.cmu.edu/~charlie/courses/17-214/2018-fall/

Chapter 1: Views and Quality Objectives of Software Construction

1-1 Multi-Dimensional Views of Software Construction 软件构造中的多维度视图

1 Multi-dimensional software views

在这里插入图片描述
这个图要记住,非常重要!!

Build-time Views

构造阶段的过程是:idea=>requirement=>design=>code=>installable/executable package

  • Code-level view: 源代码 ---- 源代码是如何靠基本代码结构逻辑组织起来的,比如函数、类、方法、接口等等。
  • Component-level view:构造方法/architecture ---- 源代码是如何物理组织起来的,比如文件、文件夹、包、库等。
  • Moment view:在特定时刻代码和结构的怎样的,即特定时刻的软件形态。
  • Period view:代码和结构是如何随着时间演化的
Build-time, moment, and code-level view

三个相关点:

  • 词汇层面:Lexical-oriented source code
  • 语法层面:Syntax-oriented program structure: e.g., Abstract Syntax Tree(AST) 抽象语法树
  • 语义层面:Semantics-oriented program structure: e.g., Class Diagram 类表
Build-time, period, and code-level view

Code churn 代码变化:Code churn is defined as lines added, modified or deleted to a file from one version to another
增加的代码行,将一个文件更新为一个新的版本

Build-time, moment, and component-level view
  • 源代码物理上组织在文件中,文件组织于文件夹中
  • 文件包装在一个包中
  • 可复用的模块在库中

Static linking发生在构造阶段

Build-time, period, and component-level view
  • 软件的文件/包/成分/库随时间的变化
  • SCI–Software Configuration Item 软件配置项
  • Version
    例子:
    Version Control System — VCS 版本控制系统
    Evolution Graph (of a SCI or a Software)
    Software Evolution
Runtime Views

Runtime:主要研究当一个程序在目标机器上运行的时候的状态

  • Code-level view:逻辑实体(对象,函数等)在内存中如何呈现
  • Component-level view: 物理实体(OS,网络,硬件等)在物理硬件环境中如何呈现
  • Moment view:逻辑/物理实体在内存/硬件环境中特定时刻形态的表现
  • Period view:逻辑/物理实体在内存/硬件环境中的形态随时间如何变化
Run-time, moment, and code-level view
  • Snapshot diagram 代码快照图:描述程序运行时内存中变量的状态
  • Memory dump 内存信息转储
Run-time, period and code-level view
  • Sequence diagram in UML: interactions among program units(objects)
  • Execution tracing 执行跟踪:用日志方式记录程序执行的调用次序
Run-time, moment, and component-level view
  • Deployment diagram in UML
Run-time, period, and component-level view
  • Event logging provides system administrators with information useful for diagnostics and auditing. 事件日志:系统层面
  • Each class of event to be assigned a unique “code” to format and output a human-readable message.
Focus

在这里插入图片描述

2 Transformation between views

在这里插入图片描述
转化过程:

  • 空 => Code
    • Programming / Coding (Chapter 3 ADT/OOP)
    • Review, static analysis/checking (Chapter 4 Understandability) 
  • Code => Component
    • Design (Chapter 3 ADT/OOP; Chapter 5 Reusability; Chapter 6 Maintainability)
    • Build: compile, static link, package, install, etc (Chapter 2 Construction process)
  • Build-time => Run-time
    • Install / deploy (Course in the 3rd year)
    • Debug, unit/integration testing (Chapter 7 Robustness)
  • Moment => Period
    • Refactoring(Chapter 9 Refactoring)
    • Version control (Chapter 2 Construction process)
    • Loading, dynamic linking, interpreting, execution (dumping, profiling, logging) (Chapter 8 Performance)

1-2 Quality Objectives of Software Construction 软件构造的质量目标

1 Quality properties of software systems

软件质量分为两种,一种是内部质量,一种是外部质量。外部质量影响用户,内部质量影响软件本身和它的开发者。外部质量取决于内部质量。

外部质量
  • 正确性:严格按照spec执行任务,是最首要的质量指标。方法有
    • 分层:按照任务进行分层,每一层有各自的任务
    • 测试和调试:发现不正确,消除不正确
    • 防御式编程:在写程序时就保证正确性
    • 形式化方法:形式语言与自动机
  • 鲁棒性/健壮性:针对异常情况的处理
    • 是对正确性的补充,当出现了spec以外的情况时,要能做出恰当的反应。出现异常时不要甭溃
  • 可扩展性:修改spec后改变代码是否简单
  • 可复用性:一次开发,多次使用
  • 兼容性:不同软件系统之间相互可容易的集成
  • 性能:需要折中
  • 可移植性:软件能够方便地在不同的技术环境之间移植
  • 易用性:提供详细的指南,容易安装、操作等
  • Functionality功能性:程序设计中一种不适宜的趋势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程序极为复杂、不灵活、占用过多的磁盘空间
  • 及时性Timeliness
内部质量
  • LOC — Lines of Code,Cyclomatic Complexity
  • 可读性
  • 可理解性
  • 简洁
  • 规模
折中

正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来。
虽然需要折中,但“正确性”绝不能与其他质量因素折中。
最重要的几个质量因素:正确性,健壮性,可扩展性,可复用性

2 Five key quality objectives of software construction

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值