推荐书单
《大道至简》主要强调的是设计、生活和思想的简化。通过简单、明了的设计,可以创造更好的用户体验。通过简单的生活方式和思考方式,可以让生活更加简单、高效和有意义。这本书涉及的领域比较广泛,包括设计、科技、教育等。
《软件工程思想》则是一本从软件开发角度探讨如何更好地完成软件开发项目的书籍。这本书主要讲解了软件工程的思想和原则,如需求分析、设计、编码、测试和维护等方面的技术和方法。通过这些原则和方法,开发团队可以更加高效地进行开发,并且保证软件质量。
《人月神话》是一本经典的软件工程书籍,作者弗雷德里克·布鲁克斯通过自己多年的软件开发经验,提出了许多软件工程的理论和方法。书中最著名的观点是“人月神话”,即添加更多的程序员并不能够缩短整个项目的开发时间,反而会延长项目的时间。这本书的主要目的是帮助项目经理明白软件开发的本质和可行性,进而去设计和管理一个成功的软件项目。具体问题具体分析,目前的方法不能完全解决所有的问题。
《软件故事》此书主要讲述了软件开发的历史和趋势,以及几个具有代表性的软件项目的开发过程和故事,向读者展示了软件开发的发展历程和重要性。
个性化领悟
工程
软件开发需要工程化:目的性、设计理念、技术上如何支持
刻意把学习中学到的方法思想用到实际操作中,即使会有点多余。要有意识地训练自己,在学中做!
第一章:软件工程学概述
考虑项目的特点,选择适合它的过程模型。
什么是软件?
软件=程序?
软件和程序不完全等同。
程序通常指的是一段计算机程序代码,是实现软件的具体指令集合。而软件则是指一组相互协调的程序、数据和文档等资源的集合,可以用来完成特定的任务或提供特定的功能。通俗的说,软件就是程序加上运行时所需要的其他资源和支持。
因此,软件开发需要不仅仅是编写程序代码,还需要进行系统设计、测试、文档编写等一系列工作,以确保软件的可靠性、稳定性和易用性。
软件的定义
软件的特点
软件是抽象、智力活动的结晶,其不可见性决定:软件需要在过程进行管控。硬件是制造出来的,软件是创造出来的。
软件危机
三个关键词:质量、时间、预算
软件工程
应对软件危机,能够和硬件配合起来完成某个工作。
什么是工程学?
工程学更多强调的是适用性和可行性,能否解决实际问题。与理论研究有区别,不去证明模型方法程序的正确性,也不大量依赖于数学知识。
方法学
过程就是一系列步骤,model展示步骤的多样性。
IDE帮助测试,代码管理
CASE:计算机辅助软件工程。computer aided software engineer,分析测试工具。
过程、方法、工具
Method:结构化思想和面向对象思想,这两种思想对应的方法属于软件工程方法学的Method部分。后者通过消息决定方法。本课以结构化思想为主。
面向对象设计方法关注数据及其在应用中的行为。它强调现实世界中的事物和概念,并将它们建模为对象。这些对象具有属性(用于描述对象的状态)和方法(用于描述对象的行为)。
面向对象编程(OOP)中的“消息”通常与方法的调用密切相关。当我们说一个对象发送消息给另一个对象时,我们通常指的是一个对象调用另一个对象的方法。例如,如果有一个Dog
类的对象dog1
,并调用其bark()
方法,那么我们可以理解为向dog1
对象发送了一个bark
消息。
软件生命周期(SDLC)
Discover:需求
Design:软件框架的结构设计、算法设计、数据结构设计。Architechture:体系结构。
Develop:开发
Deploy:部署
Deliver:交付
method/process model与Design的关系
method process model 二者是不是对应着软件开发生命周期的Design阶段?
不完全是。`method` 和 `process model` 是软件工程领域的两个概念,而它们不仅仅局限于软件开发生命周期的`Design`阶段。
1. Method:
方法通常指的是一套具体的技术和过程,用于完成某个特定的任务,例如需求分析、系统设计、编程、测试等。方法通常包括一套具体的步骤、规则、模式或实践,这些步骤等可以在特定的阶段或跨越整个软件开发生命周期来应用。例如,面向对象的设计(OOD)是一个设计方法,而测试驱动开发(TDD)是一个编码方法。
简而言之,Method方法是不仅仅对应着结构化/面向对象的设计,而是对应着整个软件生命周期所需的具体技术和过程。
2. Process Model:
过程模型描述了整个软件开发过程的高级结构和流程。它为如何进行软件开发提供了一个框架或“大纲”。常见的过程模型包括瀑布模型、增量模型、螺旋模odel、敏捷开发模型等。过程模型通常覆盖了软件开发生命周期的多个阶段,从需求收集到维护。过程“设计”,但这个设计阶段不只是Design阶段。
所以,尽管`method`和`process model`在`Design`阶段都起到了作用,但它们并不局限于这一阶段。事实上,它们通常分别定义了在软件开发生命周期的多个阶段中应采用的技术和流程。
软件过程(process models)
为了开发出更高质量的软件,规定了一些内容who when what how
里程碑:管理的结果。milestone
瀑布模型
瀑布模型:每一步都有质量的检测控制。注意流程只有单向的内容。水往下流,不管之前有没有错误,直接一口气进行下去。最早的软件过程。
阻塞:前面没做完,后面做不了。
需求一定是明确的、不变的,所以要求很高,成功率很低。
在瀑布模型的基础上做出的改进:根据变更的性质决定回退的阶段
其他
微服务架构是将一个大型应用程序分解为多个独立、轻量级的服务的方法。每个服务都有一个特定的、细粒度的功能,并且与其他服务通过明确定义的接口通信。这些服务可以独立部署、扩展和维护。